-
Kafka Consumer Group 알아보기Backend/Kafka 2023. 9. 10. 00:37728x90
Consumer Group ?
Consumer 이 묶여있는 그룹을 의미한다.
Consumer Group 의 특징
- Consumer Group 별로 offset 을 관리한다.
* offset 이란 파티션 내에서 데이터의 위치를 표시하는 유니크한 숫자이다. 내부 토픽을 통해 관리한다.
- Consumer Group 은 동일 그룹내의 Consumer 가 문제가 생길 시 동일 그룹의 다른 Consumer 가 역할을 대신 수행할 수 있다.
이를 리밸런싱이라고 한다. ( Consumer Group 별로 offset 을 관리하므로 가능 )
- Consumer Group 의 Consumer 수는 Topic 의 Partition 수를 넘지 못한다.
Partition 의 개수 >= Consumer Group 내의 Consumer 의 개수
( Partition 은 최대 1개의 Consumer 만 붙을 수 있다, Consumer 는 여러 Partition 에 붙을 수 있다. )
- Consumer Group 간의 독립성을 보장하여 같은 토픽의 데이터를 읽는데에 문제가 없다.
Consumer Group 리밸런싱
Kafka Broker 중 하나가 Group coordinator 의 역할로 리밸런싱을 발동시킨다.
Consumer Group 내의 Consumer 에 문제가 발생하면 다른 Consumer 가 대신 역할을 수행한다.
리밸런싱은 3가지 경우에 일어난다.
1. 컨슈머의 생성 / 삭제
2. 설정된 시간안에 Poll 요청을 보내지 않았을때 ( max.poll.interval.ms 로 설정된 시간 )
3. 컨슈머가 설정된 시간안에 하트비트를 보내지 못했을때 ( session.timeout.ms 로 설정된 시간 )
리밸런싱 시 유의할 점
- 리밸런싱이 완료되기 전 까지는 Consumer 가 동작하지 않는다.
리밸런싱을 줄이기 위해 max.poll.records 값을 줄일 수 있다. ( 처리할 레코드가 적어지므로 리밸런싱 발생 감소 위의 2번을 초과하지 않을 확률이 높아짐, 데이터 중복 처리 개수가 줄어듦 )
- Consumer 에 문제가 생겨 리밸런싱이 될 때 문제가 생긴 Consumer 가 _consumer_offsets 토픽에 오프셋이 정상적으로 기록하지 못했다면 데이터를 중복으로 처리하게 될 수 있다. 이를 방지하기 위해서 멱등성을 지킬 수 있도록 코드를 작성해야한다.
( 수동 커밋을 통해 오프셋을 기록할 수 있다. 동기 비동기 전부 가능 / Default 는 자동으로 커밋됨 )
728x90