Kafka
title: 2026-04-28 author: 강병호 (이름) date: 2026-04-28 (날짜) category: TIL/강병호/2026/04 (파일 경로 : TIL/{이름}/{연}/{월}) layout: post (자유) —
- 메시지 전달 보장 전략 (Delivery Semantics) 시스템의 요구사항에 따라 프로듀서와 컨슈머 사이의 데이터 전달 신뢰도를 설정할 수 있습니다.
At most once (최대 한 번): 메시지 손실 가능성이 있지만 중복은 허용하지 않습니다. 성능이 가장 중요할 때 사용합니다.
At least once (최소 한 번): 메시지 손실은 없으나 중복이 발생할 수 있습니다. 카프카의 기본 동작 방식이며 가장 많이 사용됩니다.
Exactly once (정확히 한 번): 메시지 손실도, 중복도 없는 상태입니다. 카프카 트랜잭션 API를 사용하며 금융 서비스 등 정합성이 극도로 중요한 경우에 활용합니다.
- Consumer Group과 리밸런싱 (Rebalancing) 카프카의 확장성을 책임지는 핵심 기법이지만, 운영 시 가장 주의해야 할 대목입니다.
동작 원리: 동일한 group.id를 가진 컨슈머들은 토픽의 파티션을 나누어 소유합니다. 파티션 수보다 컨슈머 수가 많으면 남는 컨슈머는 대기 상태가 됩니다.
리밸런싱: 컨슈머가 추가되거나 제외될 때 파티션 소유권을 다시 배분하는 과정입니다.
문제점: 리밸런싱이 일어나는 동안 컨슈머 그룹 전체의 읽기 작업이 중단(Stop-the-world)되어 지연(Latency)이 발생할 수 있습니다.
해결책: Static Membership 설정을 통해 불필요한 리밸런싱을 방지하거나, 점진적 리밸런싱(Cooperative Sticky Assignor) 전략을 사용합니다.
- ISR (In-Sync Replicas)과 복제 메커니즘 고가용성을 유지하면서 데이터 유실을 방지하는 카프카만의 방식입니다.
ISR (In-Sync Replicas): 리더 파티션의 데이터를 완벽하게 복제하고 있는 팔로워들의 그룹입니다.
Leader election: 리더 브로커가 장애가 나면 ISR에 속한 팔로워 중 하나가 새로운 리더가 됩니다. ISR에 속하지 못한 팔로워는 데이터 유실 가능성 때문에 리더가 될 수 없습니다(설정에 따라 강제 선출 가능).
acks 설정:
acks=0: 전송 확인 안 함. (매우 빠름, 유실 위험 높음)
acks=1: 리더의 저장만 확인.
acks=all (-1): ISR 내의 모든 복제본 저장까지 확인. (가장 안전함)
- 성능 최적화의 핵심: Page Cache와 Zero Copy 카프카가 디스크 기반임에도 불구하고 메모리 기반 시스템만큼 빠른 이유입니다.
Page Cache: OS 레벨의 페이지 캐시를 적극 활용합니다. 잔여 메모리를 캐시로 사용하여 한 번 읽은 데이터나 방금 쓴 데이터를 메모리에서 바로 처리합니다.
Zero Copy: 디스크의 데이터를 네트워크 카드로 보낼 때, 커널 공간과 유저 공간 사이의 불필요한 데이터 복사를 생략합니다. CPU 사용량을 획기적으로 줄여 처리량을 극대화합니다.
- 모니터링 핵심 지표: Consumer Lag 카프카 운영에서 가장 중요한 지표는 Consumer Lag입니다.
의미: 프로듀서가 넣은 마지막 오프셋과 컨슈머가 읽은 오프셋의 차이입니다.
해석: Lag이 늘어난다는 것은 소비 속도가 생산 속도를 따라가지 못하고 있다는 뜻입니다.
해결: 컨슈머 애플리케이션의 로직을 최적화하거나, 파티션과 컨슈머 수를 함께 늘려 병렬 처리량을 높여야 합니다.