ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6. Consumer
    SW개발/Kafka 2020. 9. 20. 23:45

    Consumer Summary

    1. 주요기능

     특정 파티션을 관리하고 있는 파티션 리더에게 메세지 가져오기 요청을 함

     

    2. 종류

    2.1 Old Consumer

    Consumer의 Offset 저장을 주키퍼에 함

     

    2.2 New Consumer

    Consumer의 Offset 저장을 토픽에 함(0.9 버전 이후)

     

    3. 주요 옵션

    bootstrap.servers

    fetch.min.bytes - 한 번에 가져올 수 있는 최소 데이터 사이즈

    group.id - consumer가 속한 consumer group 식별자

    enable.auto.commit

    auto.offset.reset (3개 방식 존재)

      earliest - offset이 없는 경우 가장 초기의 offset으로 설정

      latest - offset이 없는 경우 가장 마지막의 offset으로 설정

      none - offset 없으면 error

    fetch.max.bytes - 한 번에 가져올 수 있는 최대 데이터 사이즈

    request.timeout.ms

    seesion.timeout.ms

    heartbeat.interval.ms

    max.poll.records - 단일 호출 poll()에 대한 최대 레코드 수 조정

    max.poll.interval.ms

    auto.commit.interval.ms

    fetch.max.wait.ms

     

    4. 파티션의 메세지 순서

    4.1 토픽의 파티션 1개 - 컨슈머 1개

      메세지가 순서대로 들어옴

    4.2 토픽의 파티션 n개 - 컨슈머 1개

      데이터가 리더 파티션 메세지 - 다음 순서의 파티션 메세지... 순으로 읽어오면서 출력되는 데이터의 순서가 엉킨듯이 보임

     

    5. Consumer Group

    5.1 기능

     

     

    하나의 토픽에 여러 컨슈머 그룹이 동시에 접속해 메세지를 가져올 수 있음

    컨슈머 그룹에는 n개의 컨슈머가 포함되어있음

    컨슈머 그룹마다 각자의 오프셋을 별도로 관리

     

    5.2 Rebalance

    프로듀서가 전송하는 메시지가 많아서 처리하지 못하는 경우에 컨슈머를 추가하는거나 또는 반대의 경우 삭제하는것.

    토픽의 파티션 수 만큼 최대 컨슈머 수가 연결될 수 있음. 단, 리밸런스가 발생하면 컨슈머 그룹 전체를 일시적으로 사용할 수 없다는게 단점

     

    6. Commit

    각 파티션에 대해 현재 위치를 업데이트 하는 동작으로, 카프카 내에 별도로 내부에서 사용하는 토픽(__consumer_offsets)을 만들고 그 토픽에 오프셋 정보를 저장함.

     

    리밸런스가 일어난 후 각각의 컨슈머는 이전에 처리했던 토픽의 파티션이 아닌 다른 새로운 파티션에 할당됨. 컨슈머는 새로운 파티션에 대해 가장 최근 커밋된 오프셋을 읽고 그 이후부터 메세지들을 가져오기 시작함.

     

    6.1 자동커밋

    enable.auto.commit=true 옵션 사용

    auto.commit.interval.ms를 통해 주기설정 가능

     

    6.2 수동커밋

    개발자 코드에서 커밋 시점을 지정

     

     

     

    'SW개발 > Kafka' 카테고리의 다른 글

    7. Kafka 운영  (0) 2020.09.21
    5. Producer (1)  (0) 2020.09.18
    4. kafka 구조  (0) 2020.09.17
    3. Kafka broker의 주요 설정(properties)  (0) 2020.09.16
    2. zookeeper(주키퍼)  (0) 2020.09.15
Designed by Tistory.