Kafka 리밸런싱
Rebalancing
컨슈머 그룹으로 이루어진 컨슈머들 중 일부 컨슈머에 장애가 발생하면, 장애가 발생한 컨슈머에 할당된 파티션은 장애가 발생하지 않은 컨슈머에 소유권이 넘어간다.
이러한 과정을 ‘리밸런싱(rebalancing) 이라고 부른다. 리밸런싱은 아래와 같이 크게 두 가지 상황에서 일어난다.
- 컨슈머가 추가되는 상황
- 컨슈머가 제외되는 상황
- 이슈가 발생한 컨슈머를 컨슈머 그룹에서 제외하여 모든 파티션이 지속적으로 데이터를 처리할 수 있도록 가용성을 높여준다.
리밸런스 리스너
리밸런스 발생을 감지하기 위해 카프카 라이브러리는 ConsumerRebalanceListener 인터페이스를 지원한다. ConsumerRebalanceListener 인터페이스로 구현된 클래스는 onPartitionAssigned()
함수와 onPartitionRevoked()
함수로 이루어져 있다.
- onPartitionAssigned : 리밸런스가 끝난 뒤에 파티션 할당이 완료되면 호출회는 함수이다.
- onPartitionRevoked : 리밸런스가 시작되기 직전에 호출되는 함수이다.
- 마지막으로 처리한 레코드를 기준으로 커밋을 하기 위해서는 리밸런스가 시작하기 직전에 커밋을 하면 되므로
onPartitionRevoked()
함수에 커밋을 구현하여 처리할 수 있다.
- 마지막으로 처리한 레코드를 기준으로 커밋을 하기 위해서는 리밸런스가 시작하기 직전에 커밋을 하면 되므로
파티션 할당 컨슈머 애플리케이션
토픽의 특정 파티션을 할당받아 처리할 수 있다. consumer.assgin()
함수에 토픽과 파티션 번호를 넘겨 할당받는다.
Comments