-
6. ConsumerSW개발/Kafka 2020. 9. 20. 23:45
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