실시간 데이터 파이프라인과 스트리밍 애플리케이션을 위한 분산 메시지 브로커 — Kafka의 구조부터 운영 패턴까지.
메시지를 분류하는 논리적 채널. 파일 시스템의 폴더와 유사하며, 메시지는 특정 토픽으로 발행된다. 토픽은 여러 파티션으로 나뉜다.
논리적 채널토픽을 물리적으로 분할한 단위. 각 파티션은 순서가 보장된 불변 레코드 시퀀스이며, 브로커에 분산 저장된다. 병렬 처리의 기본 단위.
병렬 처리 단위토픽에 메시지를 발행하는 클라이언트. 키(key)를 기반으로 파티션을 선택하거나 라운드로빈 방식으로 분산한다. acks 설정으로 신뢰성 수준을 조정.
메시지 발행자토픽에서 메시지를 구독하는 클라이언트. 오프셋을 통해 읽은 위치를 추적하며, Consumer Group으로 묶여 파티션을 나눠 처리한다.
메시지 소비자Kafka 서버 프로세스. 메시지를 디스크에 저장하고 Producer/Consumer의 요청을 처리한다. 여러 브로커가 모여 클러스터를 구성한다.
Kafka 서버동일한 group.id를 공유하는 컨슈머 집합. 각 파티션은 그룹 내 한 컨슈머에만 할당되어 중복 없이 처리된다. 수평 확장의 핵심 메커니즘.
수평 확장파티션 내 메시지의 고유 순번(0부터 시작). 컨슈머는 오프셋을 커밋하여 처리 위치를 기록한다. 재처리(replay)가 필요할 때 오프셋을 조정한다.
위치 포인터Kafka 2.x까지는 ZooKeeper로 클러스터 메타데이터를 관리. Kafka 3.x부터는 KRaft(내장 Raft 합의)로 ZooKeeper 의존성을 제거, 단순화.
클러스터 코디네이션파티션을 여러 브로커에 복제하여 내구성 확보. Leader가 읽기/쓰기를 담당하고, Follower는 복제만 수행. replication.factor로 복제 수 설정.
내결함성↑ = 현재 레코드 기록 위치(오프셋). 각 Consumer는 파티션 1개씩 전담.
// 신뢰성 설정 props.put("acks", "all"); // 전체 ISR 확인 props.put("retries", 3); props.put("enable.idempotence", "true"); // 성능 설정 props.put("batch.size", 16384); props.put("linger.ms", 5); props.put("compression.type", "snappy");
// 그룹 및 오프셋 설정 props.put("group.id", "my-group"); props.put("auto.offset.reset", "earliest"); props.put("enable.auto.commit", "false"); // 처리량 설정 props.put("max.poll.records", 500); props.put("fetch.min.bytes", 1024); props.put("session.timeout.ms", 30000);
# 토픽 생성 (파티션 3, 복제 2) $ kafka-topics.sh --create \ --topic my-topic \ --partitions 3 \ --replication-factor 2 \ --bootstrap-server localhost:9092 # 컨슈머 그룹 오프셋 확인 $ kafka-consumer-groups.sh --describe \ --group my-group \ --bootstrap-server localhost:9092 # LAG 모니터링 (미처리 메시지 수) TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG my-topic 0 1024 1029 5 my-topic 1 882 882 0 my-topic 2 1200 1201 1
외부 시스템(DB, S3, Elasticsearch 등)과 Kafka를 연결하는 프레임워크. Source/Sink 커넥터를 플러그인으로 배포. 별도 코드 없이 파이프라인 구성 가능.
Kafka 위에서 동작하는 클라이언트 스트림 처리 라이브러리. 별도 클러스터 없이 Java 앱으로 실행. stateful 처리, 윈도잉, 조인 지원.
Kafka 스트림을 SQL로 처리하는 데이터베이스. 실시간 집계·필터·조인을 SQL 구문으로 선언. Kafka Streams 위에 구축.
Avro/Protobuf/JSON 스키마를 중앙 관리. Producer-Consumer 간 스키마 호환성 검증. Confluent 플랫폼 구성요소이나 오픈소스 버전 존재.