liminfo

Apache Kafka Reference

Kafka 메시지 브로커 레퍼런스

25개 결과

Apache Kafka Reference 소개

Apache Kafka 레퍼런스는 Kafka의 핵심 API, CLI 도구, 설정을 6개 필수 카테고리로 정리한 종합 검색 가능 가이드입니다. 프로듀서 섹션은 CLI 메시지 전송용 kafka-console-producer, Java ProducerRecord(키/값/토픽), 주요 프로듀서 설정(내구성을 위한 acks=all, retries, 직렬화 설정), 전송 버퍼 비우기용 producer.flush()를 다룹니다. 컨슈머 섹션은 --from-beginning kafka-console-consumer, 폴링 루프를 가진 Java consumer.subscribe(), group.id·오프셋 설정, 정확히 한 번 처리를 위한 수동 consumer.commitSync(), 랙 모니터링용 kafka-consumer-groups --describe를 포함합니다. 토픽 섹션은 파티션·복제 팩터 옵션을 가진 kafka-topics --create, --list, 파티션·리더 정보용 --describe, 파티션 수 확장용 --alter를 커버합니다. 파티션 섹션은 커스텀 파티셔닝 전략 partitioner.class, 파티션 재조정 kafka-reassign-partitions, 내구성 보장 min.insync.replicas를 다룹니다. 스트림 섹션은 StreamsBuilder를 사용한 KStream 생성, 최신 상태 구체화 KTable, 변환 mapValues, 시간 윈도우 stream.join()을 포함합니다. 커넥트 섹션은 단독·분산 모드 시작, 커넥터 생명주기 REST API(POST/GET/DELETE /connectors), JDBC 소스 커넥터 예제를 다룹니다.

Apache Kafka는 모든 규모의 기업에서 이벤트 기반 아키텍처, 실시간 데이터 파이프라인, 스트림 처리 시스템의 핵심입니다. 백엔드 엔지니어는 Kafka로 마이크로서비스를 분리하고 메시지 전달을 보장합니다. 데이터 엔지니어는 Kafka를 데이터베이스, 데이터 웨어하우스, Apache Flink나 Spark Structured Streaming 같은 스트림 프로세서를 연결하는 중앙 허브로 활용합니다. 이 레퍼런스는 전체 문서를 암기하지 않고 Kafka로 효율적으로 작업하는 데 필요한 정확한 명령, Java 코드 스니펫, 설정 속성을 제공합니다.

레퍼런스는 모든 실무자가 이해해야 할 6가지 핵심 Kafka 개념을 중심으로 구성되어 있습니다: 데이터가 Kafka에 들어오는 방법(프로듀서), 소비되는 방법(컨슈머), 구성되는 방법(토픽·파티션), 스트림으로 처리되는 방법(스트림), 외부 시스템이 연결되는 방법(커넥트). 로컬 개발 Kafka 클러스터를 실행하거나, 컨슈머 랙을 디버깅하거나, 프로덕션 멀티 브로커 배포를 설정할 때 모두 이 가이드에서 각 작업의 정확한 구문과 예제를 찾을 수 있습니다.

주요 기능

  • 프로듀서 CLI·Java API: kafka-console-producer, 키/토픽/값을 가진 ProducerRecord, acks=all 내구성 설정, retries, 직렬화 속성, producer.flush()·close()
  • 컨슈머 CLI·Java API: --from-beginning kafka-console-consumer, consumer.subscribe() 폴링 루프, group.id, auto.offset.reset, enable.auto.commit=false, commitSync()
  • 컨슈머 그룹 모니터링: kafka-consumer-groups --describe로 파티션 할당, 현재 오프셋, 로그 끝 오프셋, 파티션별 컨슈머 랙 확인
  • 토픽 생명주기 관리: --partitions·--replication-factor를 가진 kafka-topics --create, --list, 리더·ISR 상세 --describe, 파티션 수 확장 --alter
  • 파티션 관리: 라운드로빈·커스텀 파티셔닝용 partitioner.class, 재조정용 kafka-reassign-partitions, 쓰기 내구성 보장 min.insync.replicas
  • Kafka Streams API: filter·to()를 가진 KStream, 단어 수 집계 KTable, 상태 없는 변환 mapValues, JoinWindows 시간 윈도우 스트림 조인
  • Kafka Connect: 단독·분산 모드 시작 명령, 커넥터 CRUD REST API(POST·GET·DELETE /connectors), JDBC 소스 커넥터 설정 예제
  • 동작하는 코드 예제와 함께 모든 Kafka CLI·Java API·설정 항목에서 즉시 검색 및 카테고리 필터링

자주 묻는 질문

Kafka 프로듀서 설정에서 acks=all은 무엇을 의미하나요?

acks=all(acks=-1과 동일)은 프로듀서가 메시지를 성공적으로 전송된 것으로 간주하기 전에 모든 인싱크 레플리카(ISR)로부터 확인을 받을 때까지 기다린다는 의미입니다. 이것은 가장 강력한 내구성 보장을 제공합니다 — 리더 브로커가 확인 직후 실패해도 메시지는 손실되지 않습니다. min.insync.replicas=2와 결합하면 최소 두 레플리카가 쓰기를 확인했음을 보장합니다.

auto.offset.reset=earliest와 latest의 차이는 무엇인가요?

컨슈머 그룹에 커밋된 오프셋이 없을 때(첫 시작 또는 오프셋 만료 후), earliest는 토픽 파티션의 처음부터 읽기 시작하고, latest는 컨슈머 시작 후 생성된 새 메시지부터만 읽습니다. 배치 처리나 따라잡기 시나리오에는 earliest를, 새 이벤트만 처리하는 실시간 이벤트 처리에는 latest를 사용하세요.

Kafka 컨슈머에서 enable.auto.commit=false를 설정해야 하는 이유는?

자동 커밋은 애플리케이션이 메시지를 성공적으로 처리했는지와 관계없이 고정 간격(기본 5초)으로 오프셋을 주기적으로 커밋합니다. 자동 커밋 후 처리를 완료하기 전에 프로세스가 충돌하면 메시지가 손실됩니다. enable.auto.commit=false를 설정하고 성공적인 처리 후에만 commitSync()를 호출하면 최소 한 번 전달 시맨틱을 달성하고 데이터 손실을 방지할 수 있습니다.

Kafka Streams의 KStream과 KTable의 차이는 무엇인가요?

KStream은 개별 이벤트의 무한한 스트림을 나타냅니다 — 모든 레코드는 독립적인 이벤트입니다. KTable은 각 키의 최신 상태를 나타냅니다 — 각 키에 대한 새 레코드가 현재 값을 업서트하는 변경 로그 스트림입니다. 이벤트별 처리(클릭 이벤트, 트랜잭션)에는 KStream을, 집계·조인·현재 상태 유지(사용자 프로필, 누적 합계)에는 KTable을 사용하세요.

Kafka에서 컨슈머 랙을 확인하는 방법은?

kafka-consumer-groups --bootstrap-server localhost:9092 --describe --group my-group을 실행하세요. 출력에는 각 파티션의 현재 오프셋(컨슈머 위치), 로그 끝 오프셋(파티션의 최신 메시지), 랙(차이)이 표시됩니다. 높은 랙은 컨슈머가 프로듀서를 따라가지 못하고 있다는 의미입니다. Kafka의 JMX 메트릭이나 Prometheus용 Kafka Exporter 같은 도구로 랙을 모니터링하세요.

Kafka 토픽의 파티션 수를 줄일 수 있나요?

아니오, Kafka는 파티션 수 감소를 지원하지 않습니다. kafka-topics --alter --partitions N으로 파티션만 늘릴 수 있습니다. 파티션 증가는 키에서 파티션으로의 매핑을 변경하여 키 기반 프로듀서의 순서 보장이 깨질 수 있습니다. 파티션을 실제로 줄이는 유일한 방법은 파티션이 적은 새 토픽을 만들고 kafka-streams나 커스텀 마이그레이션 작업으로 데이터를 이전하는 것입니다.

Kafka Connect란 무엇이고 언제 사용해야 하나요?

Kafka Connect는 커스텀 코드 없이 Kafka와 외부 시스템(데이터베이스, S3, Elasticsearch 등) 사이에서 안정적으로 데이터를 스트리밍하기 위한 프레임워크입니다. 소스 커넥터는 외부 시스템에서 Kafka로 데이터를 가져오고, 싱크 커넥터는 Kafka에서 외부 시스템으로 데이터를 내보냅니다. 표준 통합이 필요할 때 Connect를 사용하세요 — 오프셋 관리, 오류 처리, 스케일링을 자동으로 처리합니다. 주요 커넥터로는 JDBC 소스/싱크, Debezium CDC, S3 싱크가 있습니다.

Kafka 컨슈머 그룹을 병렬 처리용으로 설정하는 방법은?

동일한 그룹(같은 group.id)에 여러 컨슈머 인스턴스를 생성하세요. Kafka가 자동으로 그룹 멤버 간에 파티션을 분배합니다 — 각 파티션은 동시에 그룹의 정확히 하나의 컨슈머에 할당됩니다. 최대 병렬성을 위해 토픽의 파티션 수가 컨슈머 수 이상인지 확인하세요. 파티션 수를 초과하는 컨슈머는 유휴 상태가 됩니다. kafka-consumer-groups --describe로 파티션 할당을 확인하고 컨슈머별 랙을 모니터링하세요.