kafka 기술문서

컨슈머 오프셋 관리

saay-hi 2024. 6. 25. 11:01

컨슈머의 동작 중 가장 핵심은 바로 오프셋 관리라고 할 수 있다.

코드 배포로 인해 컨슈머가 일시적으로 동작을 멈추고 재시작하는경우나, 컨슈머가 구동 중인 서버에서 문제가 발생해 새로운 컨슈머가 기존 컨슈머의 역할을 대신하는 경우 등

기존 컨슈머의 마지막 메시지 위치부터 새로운 컨슈머가 메시지를 가져올 수 있어야만 장애로부터 빠르게 복구할 수 있다.

 

컨슈머들은 지정된 토픽의 메시지를 읽은 뒤 읽어온 위치의 오프셋 정보를 __consumer__offsets에 기록한다.

이때 컨슈머 그룹은 컨슈머 그룹, 토픽, 파티션 등의 내용을 통합해 기록한다.

이렇게 __consumer_offsets 토픽에 기록된 정보를 이용해 컨슈머 글부은 자신의 그룹이 속해 있는 컨슈머의 변경이 발생하는 경우 (컨슈머 장애 또는 컨슈머 이탈 등 ) 해당 컨슈머가 어느 위치까지 읽었는지를 추적할 수 있다.

 

*여기서 저장되는 오프셋값은 컨슈머가 마지막까지 읽은 위치가 아니라 컨슈머가 다음으로 읽어야 할 위치를 뜻한다.

모든 컨슈머 그룹의 정보가 저장되는 __consumer_offsets 토픽은 다음과 같은 파티션 수와 리플리케이션 팩터 수를 가지고 있으며, 내부 토픽이지만 파티션 수와 리플리케이션 수는server.properties에서 변경 가능하다.

  • offset.topic.num.partition:기본값50
  • offset.topic.replication.factor:기본값3

카프카 클러스터 초기에 잘못 설정해 __cousnuemer_offsets 토픽의 리플리케이션 팩터 수가 1로 설정되어 있는 경우도 있다.

따라서 반드시 __consumer_offset 토픽의 리플리케이션 팩터 수가 어떻게 설정돼 있는지 확인 권장