Apache Kafka는 분산 이벤트 스트리밍 플랫폼으로, 대용량의 데이터를 빠르고 안정적으로 처리하는 데 사용된다. 주로 실시간 데이터 처리, 로그 수집, 메시징 큐, 이벤트 소싱 등에 활용된다.
주요 개념
Producer & Consumer
- Producer: 데이터를 Kafka에 전송하는 역할 (ex. 로그, IoT 센서 데이터, 트랜잭션 이벤트)
- Consumer: Kafka에서 데이터를 읽어 가는 역할 (ex. 분석 시스템, 데이터베이스, 알림 서비스)
Topic & Partition
- Topic: 데이터 스트림을 논리적으로 분리하는 개념 (ex.
user-events, order-events)
- Partition: Topic을 여러 개의 조각으로 나누어 병렬로 처리 가능하게 함
- 각 Partition은 여러 Broker에 분산 저장됨
- Consumer는 여러 Partition을 병렬로 읽을 수 있음
Broker
- Kafka 클러스터를 구성하는 서버 노드
- 여러 개의 Broker가 하나의 Kafka 클러스터를 구성함
- 각 Broker는 특정 Topic의 Partition을 저장 및 관리함
Zookeeper
- Kafka의 메타데이터 및 클러스터 상태를 관리
- Leader Election 및 Configuration Management 역할 수행
- Kafka 2.8 버전부터 Zookeeper를 제거하는 KRaft (Kafka Raft)가 도입됨
동작 방식
- Producer가 메시지를 특정 Topic으로 전송: 메시지는 Partition 단위로 저장됨
- Broker는 메시지를 로그 형태로 저장: 메시지는 Consumer가 읽을 때까지 유지됨
- Consumer는 Topic에서 데이터를 읽음: Offset을 관리하여 중복 처리 방지
- ConsumerGroup을 사용하면 병렬 처리 가능: 동일한 Consumer Group 내에서 각 Consumer는 서로 다른 Partition을 소비
주요 특징
높은 처리량 & 확장성
- 수백만 TPS(초당 트랜잭션)를 처리할 수 있음
- Partition을 이용한 병렬 처리 지원
내결함성 (Falut Tolerance)
- Replication을 통해 데이터 유실 방지
- Broker 장애 시 자동으로 Leader를 선출하여 운영 지속
지속성 (Durability)
- 메시지가 디스크에 저장됨 (Commig Log 구조)
- Consumer가 메시지를 읽을 때까지 유지됨
유연한 메시지 소비 방식
- Pub-Sub (Publish-Subscribe) 모델 지원
- Consumer는 메시지를 순서대로 읽거나 특정 Offset부터 다시 읽을 수 있음
활용 사례
- 로그 수집 및 분석: ELK 스택과 연동하여 실시간 로그 분석
- 메시지 큐 역할: RabbitMQ, ActiveMQ 대체 가능
- 이벤트 기반 아키텍처: 마이크로서비스 간 이벤트 전파
- IoT 데이터 처리: 센서 데이터 스트리밍 및 실시간 분석
- 데이터 파이프라인: Hadoop, Spark, Flink 등과 연동하여 대용량 데이터 처리
관련 주요 기술 스택
- Kafka Streams: Kafka 데이터를 실시간으로 변환 및 처리
- Kafka Connect: 데이터베이스, 클라우드, 파일 시스템 등과 연동하는 커넥터 제공
- Schema Registry: Avro, Protobuf 등을 사용하여 메시지 구조 관리
설치 및 실행
Homebrew를 이용해 Kafka 설치
brew install kafka
Kafka 서버 실행
zookeeper-server-start /opt/homebrew/etc/kafka/zookeeper.properties &
kafka-server-start /opt/homebrew/etc/kafka/server.properties &
Topic 생성
kafka-topics --create --topic test-topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1
Producer 실행
kafka-console-producer --topic test-topic --bootstrap-server localhost:9092
Consumer 실행
kafka-console-consumer --topic test-topic --from-beginning --bootstrap-server localhost:9092