본문 바로가기
MessageQueue/Kafka

카프카 컨슈머 그룹의 리벨런싱

by 아이티.파머 2023. 6. 23.
반응형

카프카 컨슈머 그룹의 리벨런싱

카프카는 컨슈머그룹이 존재한다. 이때 컨슈머그룹에서 broker가 잘못되어 빠지게 되거나, 그룹에 추가적인 컨슈머가 들어올때 리벨런싱을 진행하게 된다.

리벨런싱이 일어날때 Consumer 의 Partitioner 가 어떤 전략을 사용했느냐에 따라 컨슈머가 연결되는 Topic의 partition 이 달라진다.

프로듀서와 컨슈머에대한 파티션전략은 여기를 참고

kafka partitioner 전략 (consumer) - 작성중

kafka partitioner 란? (producer, consumer)

리벨런싱(rebalancing)이 생기는 이유

  • Consumer Group 내의 consumer 가 추가 되거나 삭제될때
    • 클러스터링 확장 혹은 컨슈머 브로커에서 장애가 발생했을때 일어난다.
  • Consumer 에서 설정한 시간동안 처리를 하지 못했을때 일어난다.
    • “max.poll.records” (poll 할때 한번에 가져오는 갯수),
    • max.poll.interval.ms” (poll 한 갯수를 처리 하는 시간)
    • 이렇게 두가지가 존재하는데 가져온갯수를 시간내에 처리하지 못할때 리벨런싱이 일어나게 된다. (이때 무한 리벨런싱에 빠질수있으니 주의가 필요하다. poll.recodes 와 interval.ms 의 적절한 정의가 시스템에 따라 필요하다.)
  • 새로운 파티션의 추가 혹은 변경
    • 운영중에 파티션을 추가하는건 쉽지만 파티션갯수를 줄이기 위해서는 서버를 중단한뒤에 실행해야 한다.

이렇든 컨슈머의 리벨런싱은 위와 같은 이유들로 인해 발생되게 되는데 이때의 리스크도 생각해봐야 한다.

리벨선싱이 일어날때 생각해봐야할 것

  • OFFSET COMMIT 설정을 어떻게 하냐에 따라 데이터 중복처리가 발생할수있다.
  • 리벨런싱이 일어나는동안 컨슈머는 데이터 처리를 할 수없다.

리벨런싱이(rebalance) 일어나는 구조

리벨런싱이 일어나게되는 이유는 위에서 언급한것 과 같이 컨슈머그룹에서 컨슈머가 추가되거나 삭제될때 또는 브로커가 추가되거나 삭제되엇을때, 파티셔너가 늘어나거나 줄어들었을때, 데이터를 가져와 처리하는 시간이 설정한 시간을 초과했을대 발생되게 된다.

리벨런싱 과정은 간단하게 보면 다음과 같이 진행된다.

  1. 클러스터의 변화를 감지한다.
  2. 새로운 리더를 선출한다.
  3. 파티션을 재할당한다.
  4. 리벨런싱이 완료됨

이것을 좀더 상세하게 보면 다음과 같다.

  1. 클라이언트는(컨슈머코디네이터) 카프카 브로커에게 문제가 발생되었음을알리고 리벨런싱 을 요청한다.
  2. 카프카브로커는 주키퍼에게 다시 리더선출을 요청한다. ( 클러스터링시 홀수구성을 하는이유이다)
  3. 주키퍼는 리더 선출을 완료한 후 해당정보를 카프카 브로커에게 응답한다.
  4. 리더선출후 주키퍼는 파티션 재할당을 시작한다.
  5. 카프카 브로커는 주키퍼로부터 파티션 할당 변경정보를 받아, 해당 파티션을 소유한다. (이과정은 여버런 반복될수있다.)
  6. 주키퍼와 카프카 브로커는 파티션재할당이 완료되었음을 서로에게 응답한다.
  7. 클라이언트와 카프카 브로커는 리벨런싱이 완료되었음을 서로에게 응답한다.

리벨런싱이 일어나게 되는 과정에 관여하것은 카프카 컨슈머 코디네이터 임을 알고가자

리벨런싱과정에서 새로운 컨슈머가 추가되거나, 기존컨슈머가 실패한경우 리더선출 및 파티션 재할당이 필요해진다.

 

주키퍼와 카프카 코디네이터에 대한 그림으로 보면 다음과 같다.

<<그림 -1 >>

 

 

 

 

 

 

 

카프카 컨슈머 코디네이터(kafka consumer coordinator)는 파티션 재할당을 위해 주키퍼와통신하여 새로운 리더를 선출한다.

  1. 리더가 선출된후 카프카 컨슈머 코디네이터는 파티션 재할당을 위해 주키퍼와 협력하여 파티션 소유권을 조정한다. (재조정은 반복적으로 일어날수있다.)
  2. 컨슈머 그룹의 모든 컨슈머들이 새로운 파티션 할당 정보를 받고, 해당 파티션을 소비하도록 조정된다.
  3. 리벨런싱이 완료되면 카프카 컨슈머 코디네이터는 컨슈머 그룹과 컨슈머들에게 리벨런싱 완료를 알리게 된다.
반응형