브로커 장애시 replication이 2 이상이면 나머지 1개 남은 follower partition이 leader partition으로 역할을 승계
그렇다고 replication이 많아지면 broker 리소스 사용량도 그만큼 증가한다.
Partitioner
producer가 데이터를 보내면 무조건 Partitioner을 거쳐서 브로커로 데이터 전송
Partitioner는 데이터를 토픽에 어떤 파티션에 넣을지 결정
메세지 키가 존재 : 특정 해쉬 값이 생성되어 해쉬값을 기준으로 어느 partition에 들어갈지 정해짐
동일한 해시값을 생성하므로 순서가 보장된다는 것을 확인 가능, 큐처럼 동작
메시지 키가 존재하지 않음 : 라운드 로빈 방식으로 partition에 들어감, 즉 적절히 분배
라운드 로빈 방식 : 우선순위를 두지 않고, 순서대로 시간단위(Time Quantum)로 CPU를 할당하는 방식, 시간이 지나면 큐 끝으로 밀려남, 전통적인 방식과는 조금 다름
Rebalance
Partition을 담당하던 Consumer가 처리불가 상태가 되면 Partition과 Consumer을 재조정하여 Consumer들이 적절하게 나누어 Partition을 처리하게 됩니다. 이는 같은 Consumer group 내 Consumer 들이 Offset 정보를 공유하고 있기 때문에 가능합니다.
이렇게 처리 불가 상태가 된 Consumer 를 제외한 나머지 Consumer들이 Partition을 처리하는 것을 Rebalance라 합니다. 이를 위해 Consumer group이 필요합니다.
메세지(이벤트) 전달 컨셉
At most once : 메시지가 손실될 수 있지만 재전달은 하지 않습니다.
At least once : 메시지가 손실하진 않지만 재전달이 일어납니다.
Exactly once : 메시지는 정확히 한 번 전달됩니다.
Consumer Lag
kafka를 운영함에 있어 가장 중요한 모니터링 지표
producer가 넣은 데이터가 consumer가 가져가는 것보다 많을 때 producer가 넣은 데이터의 offset과 consumer가 가져간 데이터의 offset 차이가 발생하며 이 것이 consumer lag
consumer group이 1개고 partition이 2개인 topic에서 데이터를 가져가면 lag 2개 측정가능
한 개의 토픽과 컨슈머 그룹에 대해 lag이 여러개 존재할 수 있고 그 중 가장 높은 숫자의 lag을 records-lag-max라고 부름