요약
- 핵심 아이디어 한 줄 요약
- “이 노트는 왜 중요한가?” → 맥락 설명
본문
파티션과 컨슈머 사이의 관계
- 카프카 토픽의 파티션은 메시지가 실제로 저장되는 단위, 각 파티션 내에세 메시지는 순서대로 쌓이고, 각 메시지에는 0부터 시작하는 오프셋을 붙인다.
- 컨슈머 그룹 내에세 하나의 파티션은 반드시 하나의 컨슈머에게만 할당된다.
- 파티션 4개, 컨슈머 2개면 각 컨슈머가 2개씩 맡는다.
오프셋 관리
- 컨슈머가 메시지를 읽으면 "여기까지 읽었다"는 정보를 Kafka의 내부 토픽(
__consumer_offsets)에 커밋함, 이 커밋은 컨슈머 그룹 단위 X 파티션 단위로 저장됨 - 커밋 시점
- 자동 커밋: 일정 주기마다 마지막으로 읽은 오프셋을 자동 커밋
- 수동 커밋: 어플리케이션이 처리 완료 후 명시적 커밋
컨슈머가 죽었을 때 -- 리밸런싱
- 컨슈머 A-1이 죽으면 Kafka 브로커는 일정 시간 동안 하트 비트가 오지 않는 것을 감지
- 리밸런싱이 트리거됨, 컨슈머 그룹내에세 파티션 할당을 다시 하는 과정
- A-1이 맡던 파티션 2가 A-2에게 재할당 됨, 이때 A-2는
__consumer_offsets에 기록된 마지막 커밋 오프셋부터 읽기 시작함 - 여기서 2가지 시나리오로 갈림
- A-1이 오프셋 57까지 커밋 후 죽은 경우: A-2는 오프셋 58부터 읽는다.
- A-1이 오프셋 55까지만 커밋하고, 56-57은 읽었지만 커밋 전에 죽은 경우
- A-2는 오프셋 56부터 다시 읽는다. 56,57이 중복처리 되기때문에 멱등성 처리가 필요함