Kafka 리밸런싱

less than 1 minute read

Rebalancing

컨슈머 그룹으로 이루어진 컨슈머들 중 일부 컨슈머에 장애가 발생하면, 장애가 발생한 컨슈머에 할당된 파티션은 장애가 발생하지 않은 컨슈머에 소유권이 넘어간다.

이러한 과정을 ‘리밸런싱(rebalancing) 이라고 부른다. 리밸런싱은 아래와 같이 크게 두 가지 상황에서 일어난다.

  1. 컨슈머가 추가되는 상황
  2. 컨슈머가 제외되는 상황
    • 이슈가 발생한 컨슈머를 컨슈머 그룹에서 제외하여 모든 파티션이 지속적으로 데이터를 처리할 수 있도록 가용성을 높여준다.

리밸런스 리스너

리밸런스 발생을 감지하기 위해 카프카 라이브러리는 ConsumerRebalanceListener 인터페이스를 지원한다. ConsumerRebalanceListener 인터페이스로 구현된 클래스는 onPartitionAssigned() 함수와 onPartitionRevoked() 함수로 이루어져 있다.

  • onPartitionAssigned : 리밸런스가 끝난 뒤에 파티션 할당이 완료되면 호출회는 함수이다.
  • onPartitionRevoked : 리밸런스가 시작되기 직전에 호출되는 함수이다.
    • 마지막으로 처리한 레코드를 기준으로 커밋을 하기 위해서는 리밸런스가 시작하기 직전에 커밋을 하면 되므로 onPartitionRevoked() 함수에 커밋을 구현하여 처리할 수 있다.

파티션 할당 컨슈머 애플리케이션

토픽의 특정 파티션을 할당받아 처리할 수 있다. consumer.assgin() 함수에 토픽과 파티션 번호를 넘겨 할당받는다.

-->

Categories:

Updated:

Comments