https://product.kyobobook.co.kr/detail/S000209587240
Kafka in Action | 딜런 스콧 - 교보문고
Kafka in Action | 아파치 카프카는 고성능 소프트웨어 버스로, 이벤트 스트리밍, 로깅, 분석 및 데이터 파이프라인 작업을 빠르게 처리하며, 아파치 카프카를 사용하면 운영 데이터 모니터링과 함께
product.kyobobook.co.kr
05, 06장. 컨슈머: 데이터 열기, 브로커
컨슈머 옵션
키 | 용도 |
bootstrap.servers | 시작할 때 연결할 하나 이상의 카프카 브로커 |
value.deserializer | 값 역직렬화에 필요 |
key.deserializer | 키 역질렬화에 필요 |
group.id | 컨슈머 그룹에 조인하기 위해 사용되는 ID |
client.id | 유저를 식별하기 위한 ID(10장 참고) |
heartbeat.interval.ms | 컨슈머가 그룹 코디네이터에게 핑 신호를 보낼 간격 |
코디네이트 이해
- 오프셋 : 컨슈머가 브로커에게 보내는 로그의 인덱스 위치
- auto.offset.reset : 컨슈머 시작 시 어느 시점의 오프셋으로 재시작 할지 정하는 옵션
- earliest : 시작할 때 0부터
- latest : 시작할 때 이미 있는 메시지 처리 무시(default)
- timestamp 사용으로 오프셋 찾기 가능
- group.id 용도
- 다른 컨슈머와 동일한 group.id 를 사용하는 각 컨슈머는 해당 토픽의 파티션과 오프셋을 하나의 논리적 어플리케이션으로 소비하기 위한 협업으로 간주
파티션 할당 전략
- partition.assignment.strategy : 개별 컨슈머에 어떤 파티션이 할당되는지 결정
- Range : 단일 토픽을 사용해 파티션 수를 찾은 다음 컨슈머 수로 분할
- 균등한 분할 어려움
- RoundRobin : 파티션이 컨슈머 밑으로 균일하게 분산되는 방식
- 하나씩 번갈아 가며 매핑
- Sticky : 기존 파티션 할당을 최대한 유지, 재할당 시 유효하지 않은 모든 파티션 할당은 제거하는 방식
- 라운드 로빈 할당 전략을 예로 들면, 컨슈머 2가 문제 발생시, 해당 컨슈머가 그룹을 탈퇴하면 파티션과 컨슈머의 매핑 관계를 모두 끊어버리고 다시 파티션 할당을 진행.
- 하지만, 스티키 파티션 할당 전략에서는 컨슈머1, 3에 이미 할당된 파티션은 유지시킴.
- CooperativeSticky
- 카프카 2.3
- 스티키 전략과 동일한 방식이지만, 컨슈머 그룹 내부의 리밸런싱 동작이 한층 더 고도화 된 전략임. EAGER 라는 리밸런스 프로토콜을 사용해서 리밸런싱 동작 시 컨슈머에 할당된 모든 파티션을 항상 취소함. 이유는 그룹 내에서 2 이상의 컨슈머가 동일한 파티션을 소유할 수 없기 때문임. 또한, 새로운 파티션 할당 작업이 동시에 이뤄져야하므로 단순 구현을 위해서임. 하지만 이런 리밸런싱에서 모든 파티션 할당 취소는 리소스를 많이 사용하는 컨슈머 그룹에서 큰 문제 발생. 즉 다운 타임 오버헤드가 크다는 것을 의미함.
- LAG 발생(지연)
- 카프카 2.3
- 카프카 2.4 이상
- Cooperative 프로토콜 적용. 이는 리밸런싱 동작 전에 컨슈머 상태를 유지시킴. 되도록 동작 중인 컨슈머들에게 영향을 주지 않는 상태에서 몇 차례 걸쳐 리밸런싱함. 현재 bae03, bae02 컨슈머는 각각 파티션 1, 2 를 할당받고 추가적으로 bae02 는 파티션 3을 할당받음. 여기서 bae01 이라는 새로운 컨슈머가 합류 시 리밸런싱 과정에서 한 번에 완료되지 않았지만, 현재 동작하고 있는 컨슈머에서 영향을 주지 않음.
- CooperativeSticky 전략은 카프카 2.5 에서 안정화 되었고, 리밸런싱 다운타임을 최소화하도록 개선됨.
작업 위치 표시
- enable.auto.commit : 오프셋 자동 커밋 옵션으로 default 는 true
주키퍼의 역할
- 리더 선출하고 결정을 내리기 위해 최소한의 숫자가 필요하므로 이 클러스터는 브로커에게 정말 중요
- 주키퍼 자체는 카프카 클러스터의 토픽과 같은 정보 보유
- 브로커보다 먼저 실행되고 존재해야 함
- 할당과 통지를 코디네이트해서 브로커를 도움
데이터 손실
- 장애로 인해 리더 레플리카가 손실되고 unclean.leader.election.enable 값이 true 라면 컨트롤러는 레플리카가 최신이 아니라도 시스템이 계속 실행되도록 파티션 리더를 선택함. 이는 리더가 실패했을 때 살아 있는 레플리카 중 어느 것도 모든 데이터를 가지고 있지 않아서 데이터 손실 유발됨.
'Study' 카테고리의 다른 글
[Book] SQL Antipatterns 데이터베이스 프로그래밍의 실수 줄이기 - 01~04 Chapter (0) | 2024.09.05 |
---|---|
[Book] Kafka IN ACTION - 09, 10장. 관리: 도구와 로깅, 카프카 보호 (0) | 2024.09.05 |
[Book] Kafka IN ACTION - 03장. 카프카 프로젝트 설계 (0) | 2024.09.05 |
[Book] 아토믹 코틀린 - 7부 파워 툴 (0) | 2024.09.05 |
[Book] 아토믹 코틀린 - 5부 객체 지향 프로그래밍 - 2 (0) | 2024.09.05 |