카프카 컨슈머 그룹의 리벨런싱
카프카는 컨슈머그룹이 존재한다. 이때 컨슈머그룹에서 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 >>
카프카 컨슈머 코디네이터(kafka consumer coordinator)는 파티션 재할당을 위해 주키퍼와통신하여 새로운 리더를 선출한다.
- 리더가 선출된후 카프카 컨슈머 코디네이터는 파티션 재할당을 위해 주키퍼와 협력하여 파티션 소유권을 조정한다. (재조정은 반복적으로 일어날수있다.)
- 컨슈머 그룹의 모든 컨슈머들이 새로운 파티션 할당 정보를 받고, 해당 파티션을 소비하도록 조정된다.
- 리벨런싱이 완료되면 카프카 컨슈머 코디네이터는 컨슈머 그룹과 컨슈머들에게 리벨런싱 완료를 알리게 된다.
'MessageQueue > Kafka' 카테고리의 다른 글
spring, kafka offset commit 정책 (0) | 2023.06.14 |
---|---|
kafka partitioner 종류와 전략 (producer) (0) | 2023.06.12 |
컨슈머 그룹(consumer group) offset 관리 및 reset 방법 (0) | 2023.06.09 |
kafka 설치 (Single mode) (0) | 2023.06.09 |
브로커? 파티션과, 리플리케이션, ISR 이란? (0) | 2023.06.09 |