카프카는 프로듀서 / 커슈머가 핵심이다.
프로듀서 : 데이터를 카프카에 넣어줌
컨슈머 : 데이터를 카프카에서 가져옴
카프카는 사실 쉽게말하면 걍 버퍼 다.
여기서 컨슈머를 정리해본다.
컨슈머와 컨슈머 그룹
컨슈머에 가장 큰 컨슈머와 컨슈머 그룹을 이해해야 한다.
위딩에서 짐작이 되겠지만 컨슈머들을 묶고 있는 것이 컨슈머 그룹이다.
컨슈머에서 가져가는 병목을 줄이기 위해 여러 컨슈머를 실행해 둘 수 있다.
이 여러 컨슈머들이 가져가는 데이터들의 오프셋을 공유하는 것이 컨슈머 그룹이다.
같은 컨슈머 그룹에 속한 컨슈머들은 오프셋들을 공유하며,
토픽의 파티션을 분배해서 컨슈밍 한다.
아래 그림괴 같이 컨슈머하나는 여러 파티션에 연결되어 컨슈밍 하는 것이 가능하다.
하지만 파티션 입장에서는 각 컨슈머 그룹의 컨슈머 하나에만 보낼 수 있다.
즉, 파티션에서 컨슈머 그룹의 컨슈머에 나가는 화살표가 하나여야만 한다.
컨슈머 그룹과 리밸런싱
컨슈머 그룹의 컨슈머들은 각각 할당됨 파티션의 데이터를 읽어 온다.
하지만 리밸런싱이 일어날 경우, 할당된 파티션이 달라질 수 잇다.
리밸런싱이란 각 파티션에 할당되는 컨슈머를 재조정 하는 것을 말하는데
이러한 리밸런싱이 일어나게 되는경우는 아래와 같다.
- 컨슈머 그룹에 새로운 컨슈머가 추가되었을 때
- 컨슈머 그룹의 컨슈머가 빠졌을 때
이러한경우 파티션의 소유권이 이동되는 것을 리밸런싱이라고 한다.
리밸런싱을 통해 컨슈머 그룹은 가용성과 확장성이 높아진다.
리밸런싱이 일어나는 동안 컨슈머들은 메세지를 읽을 수 없다.
리밸런싱은 브로커의 그룹코디네이터가 담당한다.
group coordinator는 각 컨슈머들의 하트비트 스레드가 보내오는 하트비트 시그널로 각 컨슈머들의 세션이 live 인지 판단하고 있다가
time out 이 일어나는 컨슈머가 있으면 세션 만료 시키고 해당 컨슈머가 담당하던 파티션을 다른 컨슈머에 할당하기 위해
리밸런싱을 시작한다.
time out 뿐만 아니라 새로운 컨슈머가 새롭게 추가되었을 경우에도 마찬가지이다.
파티션 할당 처리 절차
1. 컨슈머가 group coordinator 에 joinGroup 요청을 전송한다.
2. 첫번째로 그룹에 합류하게 되는 컨슈머는 해당 컨슈머 그룹의 리더가 된다.
3. 리더는 Partiition Assigner 클래스를 사용해서 파티션마다 컨슈머를 할당한다.
4. 리더는 할당내역을 group coordinator 에 전송한다.
Referances
'일 > kafka' 카테고리의 다른 글
카프카 프로듀서 (0) | 2021.09.26 |
---|---|
Kafka 리밸런싱 리스너 동작 test (0) | 2021.09.04 |
Kafka 성능측정 툴 (0) | 2021.09.04 |
Kafka consumer 개발 (0) | 2021.09.04 |
kafka 요약 (0) | 2021.08.19 |