
Apache Kafka는 LinkedIn에서 개발한 분산 스트리밍 플랫폼으로, 대용량의 실시간 데이터 피드를 처리할 수 있는 고성능 메시징 시스템입니다. 빅데이터 환경에서 실시간 데이터 파이프라인을 구축하고 스트리밍 애플리케이션을 개발하는 데 널리 사용됩니다.
Kafka를 설치하기 전에 다음 사항을 확인해야 합니다:
Kafka는 JVM 위에서 동작하므로 Java 설치가 필수입니다.
# Java 버전 확인
java -version
# JAVA_HOME 환경변수 확인
echo $JAVA_HOME
Java가 설치되어 있지 않다면 먼저 설치를 진행합니다:
# Ubuntu/Debian
sudo apt update
sudo apt install openjdk-11-jdk
# CentOS/RHEL
sudo yum install java-11-openjdk-devel
Apache Kafka 공식 웹사이트에서 최신 버전을 다운로드합니다.
# Kafka 다운로드 (예: 3.6.0 버전)
wget https://downloads.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgz
# 압축 해제
tar -xzf kafka_2.13-3.6.0.tgz
# 디렉토리 이동
cd kafka_2.13-3.6.0
kafka_2.13-3.6.0/
├── bin/ # 실행 스크립트
├── config/ # 설정 파일
├── libs/ # 라이브러리
└── logs/ # 로그 파일
참고: Kafka 2.8.0 버전부터는 KRaft 모드를 지원하여 ZooKeeper 없이도 실행 가능하지만, 여기서는 전통적인 ZooKeeper 방식을 설명합니다.
# ZooKeeper 설정 파일 열기
vi config/zookeeper.properties
주요 설정 항목:
# 데이터 저장 디렉토리
dataDir=/tmp/zookeeper
# 클라이언트 포트
clientPort=2181
# 최대 클라이언트 연결 수
maxClientCnxns=0
# ZooKeeper 서버 시작
bin/zookeeper-server-start.sh config/zookeeper.properties
# 백그라운드로 실행
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
# Kafka 설정 파일 열기
vi config/server.properties
# 브로커 ID (클러스터 내에서 고유해야 함)
broker.id=0
# Kafka 서버가 수신할 주소
listeners=PLAINTEXT://localhost:9092
# 로그 데이터를 저장할 디렉토리
log.dirs=/tmp/kafka-logs
# 파티션 수 (기본값)
num.partitions=1
# ZooKeeper 연결 정보
zookeeper.connect=localhost:2181
# 로그 보관 시간 (168시간 = 7일)
log.retention.hours=168
# 로그 세그먼트 파일 크기
log.segment.bytes=1073741824
# 자동 토픽 생성 허용 여부
auto.create.topics.enable=true
# 복제 팩터 (프로덕션에서는 최소 3 권장)
default.replication.factor=1
# 최소 In-Sync Replica 수
min.insync.replicas=1
# 압축 타입 (none, gzip, snappy, lz4, zstd)
compression.type=producer
# 메시지 최대 크기
message.max.bytes=1000012
# Kafka 서버 시작
bin/kafka-server-start.sh config/server.properties
# 백그라운드로 실행
bin/kafka-server-start.sh -daemon config/server.properties
# 테스트용 토픽 생성
bin/kafka-topics.sh --create \
--topic test-topic \
--bootstrap-server localhost:9092 \
--partitions 1 \
--replication-factor 1
# 생성된 토픽 목록 조회
bin/kafka-topics.sh --list \
--bootstrap-server localhost:9092
# 토픽 상세 정보 확인
bin/kafka-topics.sh --describe \
--topic test-topic \
--bootstrap-server localhost:9092
# Producer 콘솔 실행
bin/kafka-console-producer.sh \
--topic test-topic \
--bootstrap-server localhost:9092
# 메시지 입력 (Enter로 전송)
> Hello Kafka!
> This is a test message
# 새 터미널에서 Consumer 실행
bin/kafka-console-consumer.sh \
--topic test-topic \
--from-beginning \
--bootstrap-server localhost:9092
프로덕션 환경에서는 고가용성을 위해 여러 브로커로 구성된 클러스터를 운영합니다.
# server-1.properties 생성
cp config/server.properties config/server-1.properties
# server-2.properties 생성
cp config/server.properties config/server-2.properties
server-1.properties:
broker.id=1
listeners=PLAINTEXT://localhost:9093
log.dirs=/tmp/kafka-logs-1
server-2.properties:
broker.id=2
listeners=PLAINTEXT://localhost:9094
log.dirs=/tmp/kafka-logs-2
# 브로커 1 실행
bin/kafka-server-start.sh -daemon config/server-1.properties
# 브로커 2 실행
bin/kafka-server-start.sh -daemon config/server-2.properties
# 복제 팩터 3인 토픽 생성
bin/kafka-topics.sh --create \
--topic replicated-topic \
--bootstrap-server localhost:9092 \
--partitions 3 \
--replication-factor 3
# 토픽 상태 확인
bin/kafka-topics.sh --describe \
--topic replicated-topic \
--bootstrap-server localhost:9092
# 컨슈머 그룹 목록 조회
bin/kafka-consumer-groups.sh --list \
--bootstrap-server localhost:9092
# 컨슈머 그룹 상세 정보
bin/kafka-consumer-groups.sh --describe \
--group my-group \
--bootstrap-server localhost:9092
# 로그 디렉토리 확인
du -sh /tmp/kafka-logs
# Producer 성능 테스트
bin/kafka-producer-perf-test.sh \
--topic test-topic \
--num-records 100000 \
--record-size 1024 \
--throughput -1 \
--producer-props bootstrap.servers=localhost:9092
# Consumer 성능 테스트
bin/kafka-consumer-perf-test.sh \
--topic test-topic \
--messages 100000 \
--bootstrap-server localhost:9092
ZooKeeper 연결 실패:
# ZooKeeper 상태 확인
echo ruok | nc localhost 2181
# ZooKeeper 로그 확인
tail -f logs/zookeeper.out
포트 충돌:
# 포트 사용 확인
netstat -an | grep 9092
lsof -i :9092
# 프로세스 종료
kill -9 <PID>
디스크 공간 부족:
# 디스크 사용량 확인
df -h
# 로그 정리
bin/kafka-configs.sh --alter \
--entity-type topics \
--entity-name test-topic \
--add-config retention.ms=3600000 \
--bootstrap-server localhost:9092
# Kafka 로그 확인
tail -f logs/server.log
# ZooKeeper 로그 확인
tail -f logs/zookeeper.out
# server.properties에 추가
listeners=SSL://localhost:9093
security.inter.broker.protocol=SSL
ssl.keystore.location=/var/private/ssl/kafka.server.keystore.jks
ssl.keystore.password=your-password
ssl.key.password=your-password
ssl.truststore.location=/var/private/ssl/kafka.server.truststore.jks
ssl.truststore.password=your-password
# SASL/PLAIN 설정
listeners=SASL_PLAINTEXT://localhost:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
Kafka를 성공적으로 설치하고 설정했다면 다음 내용을 학습해보세요:
Apache Kafka는 강력한 분산 스트리밍 플랫폼이지만, 초기 설정이 다소 복잡할 수 있습니다. 이 가이드를 따라 기본 설정을 완료했다면, 이제 실제 애플리케이션 개발을 시작할 준비가 되었습니다.
프로덕션 환경으로 이전하기 전에는 반드시 충분한 테스트를 진행하고, 보안 설정, 백업 전략, 모니터링 시스템을 구축하는 것을 권장합니다.
Happy Streaming! 🚀