Kafka JoinGroupRequest를 통한 컨슈머 그룹 리더 선출 과정

Kafka Client-Side Partition Assignment

카프카 클라이언트 라이브러리 코드를 살펴보던 와중에, 컨슈머 그룹 리밸런싱이 발생한 시점에 컨슈머가 구독할 파티션을 결정하는 ConsumerPartitionAssignor 인터페이스와 몇 가지 구현체 (RangePartitionAssignor, CooperativeStickyAssignor)가 있는 것을 확인할 수 있습니다. 연결된 컨슈머 정보를 기반으로 파티션을 분배하는 작업은 서버(예: 브로커)가 처리해야 할 작업처럼 보였는데, 이러한 로직이 클라이언트 라이브러리 코드에 포함되어 있다는 점이 다소 생소하게 느껴졌습니다. 이에 대해 조금 더 살펴보던 중, 카프카에서 이러한 구조를 채택하게 된 배경을 설명하는 문서를 찾아 공유해 드립니다. client-side 파티션 분배 정책의 필요성 파티션 분배 작업은 반드시 서버가 처리해야 하는 것은 아닙니다. 예를 들어, 파티션 분배의 책임이 브로커에 있을 경우, 새로운 파티션 분배 정책을 적용하기 위해서는 브로커를 재시작해야 하는 부담이 있습니다. 파티션 분배 정책은 매우 다양할 수 있어서 이에 대한 획일화된 검증 규칙을 적용하기 어렵습니다. 예를 들어, 하나의 파티션을 여러 컨슈머에게 동시에 배정해야 할 수도 있습니다. 커스텀한 파티션 분배 정책이 필요한 대표적인 사례는 다음과 같습니다. ...

2024년 4월 14일 · 3 분 · Donghyung Ko