컨슈머 오프셋 관리
- 컨슈머의 오프셋의 역할은 메시지의 위치를 나타내는 것입니다
- 오프셋이 중요한 이유는 컨슈머가 일시적으로 동작을 멈추고 재시작하는 경우에 새로운 컨슈머가 기존 컨슈머의 역할을 대신하는 경우에 기존 컨슈머의 마지막 메시지 위치부터 새로운 컨슈머가 메시지를 가져오기 때문입니다
- 토픽에 저장하여 관리
그룹 코디네이터
컨슈머 그룹이 구독한 토픽의 파티션들과 그룹의 멤버들을 트래킹
스태틱 멤버십(Static Membership)
- 컨슈머 그룹 내에서 컨슈머가 재시작 등으로 컨슈머 그룹에서 나갔다가 다시 합류하더라도 리밸런싱이 일어나지 않게 하는 기능
- group.instance.id값을 컨슈머를 식별하기 위한 고유값을 입력
- 스태틱 멤버십 또한 session.timeout.ms 시간을 넘어갈 경우 리밸런싱이 똑같이 일어난다
- 컨슈머 리밸런싱 동작이 일어나면 그룹에 떠나는 컨슈머에만 적용되는 것이 아니라 그룹 내 전체 컨슈머를 대상으로 동작한다
컨슈머 파티션 할당 전략
컨슈머 파티션 할당 전략은 프로듀서의 파티셔너가 어떤 파티션으로 메시지를 전송할지 결정했던 것처럼 컨슈머가 어떤 파티션의 메시지를 읽어올지를 결정하는 정책
- RangeAssignor
- RoundRobinAssignor
- StickyAssignor
- CooperativeStickyAssignor
레인지 파티션 할당 전략
- 파티션 할당 전략의 기본값
- 동일한 메시지 키를 사용하고 하나의 컨슈머 그룹이 동일한 파티션 수를 가진 2개 이상의 토픽을 컨슘 할 때 유용
- 동일한 키값을 갖고 있는 두 토픽의 파티션을 하나의 컨슈머가 컨슘 하기 때문
- consumer 1번에서 4개의 파티션을 소비.. 다소 불균형
라운드 로빈 파티션 할당 전략
스티키 파티션 할당 전략
- 리밸런싱 작업이 일어나기 전의 컨슈머의 파티션 정보를 우선으로 매핑해 주는 전략
- 리밸런싱이 일어날 경우 기존에 매핑됐던 파티션과 컨슈머를 최대한 유지하려고 하는 전략
- 스키마 파티션 할당 전략은 두 가지 목적으로 컨슈머에 파티션을 할당합니다.
- 첫 번째 목적은 가능한 균형 잡힌 파티션을 할당하는 것
- 두 번째 목적은 재할당이 발생할 때 되도록 기존의 할당된 파티션 정보를 보장하는 것
협력적 스티키 파티션 할당 전략
- 스티키 파티션 할당 전략과 동일
- 즉 리밸런싱이 일어나도 기존의 컨슈머와 파티션 매핑은 유지하고 최소한의 파티션만 컨슈머와 매핑
- 스티키 파티션보다 한 가지 차이점이 존재하는데 내부 리밸런싱 동작이 한층 더 고도화
- COOPERATIVE 리밸런싱 프로토콜은 동작 중인 커너슈머들에게 영향을 주지 않는 상태에서 몇 차례에 걸쳐 리벨런싱이 이뤄진다
- <-> EAGER 리밸런스 프로토콜 (리밸런스시 모든 파티션과 컨슈머의 연결을 끊는 것)