GW LABS

실전 카프카 개발부터 운영까지 (6) - 컨슈머의 내부 동작 원리와 구현 본문

Book-Review/Programing

실전 카프카 개발부터 운영까지 (6) - 컨슈머의 내부 동작 원리와 구현

GeonWoo Kim 2022. 9. 6. 12:23

6.1 컨슈머 오프셋 관리

  • 컨슈머 동작 중 가장 핵심은 오프셋 관리
    • __consumer_offsets 토픽에 각 컨슈머 그룹별로 오프셋 위치 정보가 기록
    • __consumer_offsets은 다음에 읽어야 할 메시지의 오프셋을 기록된다.

 

6.2 그룹 코디네이터

  • 리밸런싱: 컨슈머 그룹에서 각 컨슈머들에게 작업을 균등하게 분해하는 동작
  • 그룹 코디네이터: 안정적인 컨슈머 그룹 관리를 위한 별도의 코디네이터
    • heartbeat.interval.ms: 그룹 코디네이터와 하트비트 인터벌 시간
    • session.timeout.ms: 컨슈머가 특정 시간 안에 하트비트를 받지 못하면 문제가 발생했다고 판단해 컨슈머 그룹에서 해당 컨슈머는 제거되고 리밸런싱 동작
    • max.poll.interval.ms: 컨슈머는 주기적으로 poll()을 호출해 토픽으로부터 레코드들을 가져오는데, poll() 호출 후 최대 5분간 poll() 호출이 없다면 컨슈머에 문제가 있는 것으로 판단해 리밸런싱 동작

 

6.3 스태틱 멤버십

  • 컨슈머가 재시작 등으로 그룹에서 나갔다가 다시 합류하더라도 리밸런싱이 일어나지 않게 하는 기능
  • group.instance.id만 설정하면 적용 됨
  • 점검이나 재배포 등의 상황에서 리밸런싱을 줄일 수 있음

 

6.4 컨슈머 파티션 할당 전략

  • 레인지 파티션 할당 전략: 파티션 할당 전략의 기본값으로서 토픽별로 할당 전략을 사용함. 동일한 키를 이용하는 2개 이상의 토픽을 컨슘할 때 유용함
  • 라운드 로빈 파티션 할당 전략: 사용 가능한 파티션과 컨슈머들을 라운드 로빈으로 할당함. 균등한 분배 가능
  • 스티키 파티션 할당 전략: 컨슈머가 컨슘하고 있는 파티션을 계속 유지할 수 있음
  • 협렵적 스티키 파티션 할당 전략: 스티키 방식과 유사하지만, 전체 일시 정지가 아닌 연속적인 재조정 방식임

 

6.5 정확히 한 번 컨슈머 동작

  • 트랜잭션이 완료된 메시지만 읽게 하려면 컨슈머 설정에 ISOLATION_LEVEL_CONFIG 설정이 필요함
  • 트랜잭션 메시지를 사용하기 때문에 메시지 오프셋이 2개씩 올라간다.
  • 트랜잭션을 컨슈머에 적용시키는건 아직 어렵다.
  • https://www.youtube.com/watch?v=TtwpO9Pozis
Comments