Broker 설정

Kafka Broker의 핵심 설정들을 살펴봅니다.

필수 설정

기본 식별자

# Broker 고유 ID (클러스터 내 유일해야 함)
broker.id = 0
 
# 클라이언트 연결 주소
listeners = PLAINTEXT://0.0.0.0:9092
 
# 외부에 알려지는 주소
advertised.listeners = PLAINTEXT://kafka1.example.com:9092
 
# 로그 저장 디렉토리
log.dirs = /var/kafka-logs

Zookeeper 연결 (Kafka 2.8 이전)

# Zookeeper 연결 문자열
zookeeper.connect = zk1:2181,zk2:2181,zk3:2181/kafka
 
# 세션 타임아웃
zookeeper.session.timeout.ms = 18000
 
# 연결 타임아웃
zookeeper.connection.timeout.ms = 18000

KRaft 모드 (Kafka 3.0+)

# 프로세스 역할
process.roles = broker,controller
 
# 노드 ID
node.id = 1
 
# Controller Quorum
controller.quorum.voters = 1@controller1:9093,2@controller2:9093,3@controller3:9093
 
# Controller 리스너
controller.listener.names = CONTROLLER

네트워크 설정

스레드 풀

# 네트워크 요청 처리 스레드 (기본 3)
num.network.threads = 8
 
# I/O 작업 스레드 (기본 8)
num.io.threads = 16
 
# 요청 큐 크기
queued.max.requests = 500

소켓 설정

# 소켓 버퍼 크기
socket.send.buffer.bytes = 102400
socket.receive.buffer.bytes = 102400
socket.request.max.bytes = 104857600  # 100MB
 
# 연결 설정
connections.max.idle.ms = 600000

리스너 설정

# 다중 리스너
listeners = PLAINTEXT://0.0.0.0:9092,SSL://0.0.0.0:9093
 
# 리스너별 보안 프로토콜 매핑
listener.security.protocol.map = PLAINTEXT:PLAINTEXT,SSL:SSL
 
# 내부 통신용 리스너
inter.broker.listener.name = PLAINTEXT

로그 설정

기본 로그 설정

# 로그 디렉토리 (쉼표로 여러 개 가능)
log.dirs = /var/kafka-logs,/var/kafka-logs2
 
# 파티션당 기본 로그 세그먼트 크기
log.segment.bytes = 1073741824  # 1GB
 
# 세그먼트 롤링 주기
log.roll.hours = 168  # 7일

Retention 설정

# 시간 기반 (기본 7일)
log.retention.hours = 168
 
# 크기 기반 (기본 무제한)
log.retention.bytes = -1
 
# 삭제 검사 주기
log.retention.check.interval.ms = 300000
 
# Cleanup 정책
log.cleanup.policy = delete

플러시 설정

# 메시지 수 기반 플러시 (기본 없음)
log.flush.interval.messages = 10000
 
# 시간 기반 플러시 (기본 없음)
log.flush.interval.ms = 1000
 
# 일반적으로 OS에 위임 (기본값 권장)

복제 설정

기본 복제

# 기본 Replication Factor
default.replication.factor = 3
 
# 토픽 자동 생성
auto.create.topics.enable = true
 
# 자동 생성 시 기본 파티션 수
num.partitions = 3

ISR 관련

# 최소 ISR 수 (acks=all 사용 시 중요)
min.insync.replicas = 2
 
# Replica lag 임계값 (ISR 제외 기준)
replica.lag.time.max.ms = 30000

Fetch 설정

# Follower fetch 스레드 수
num.replica.fetchers = 4
 
# Fetch 최소/최대 바이트
replica.fetch.min.bytes = 1
replica.fetch.max.bytes = 1048576
 
# Fetch 대기 시간
replica.fetch.wait.max.ms = 500

성능 튜닝

처리량 최적화

# 네트워크 스레드
num.network.threads = 8
 
# I/O 스레드
num.io.threads = 16
 
# 배치 크기
socket.receive.buffer.bytes = 1048576
socket.send.buffer.bytes = 1048576
 
# 압축 (CPU ↔ 네트워크 트레이드오프)
compression.type = producer

지연 시간 최적화

# 빠른 플러시 (처리량 감소)
log.flush.interval.messages = 1
 
# 작은 세그먼트
log.segment.bytes = 104857600  # 100MB

메모리 최적화

# 로그 버퍼 크기
log.preallocate = false
 
# 인덱스 간격
log.index.interval.bytes = 4096
log.index.size.max.bytes = 10485760

JVM 설정

힙 메모리

# kafka-server-start.sh 수정 또는 환경변수
export KAFKA_HEAP_OPTS="-Xmx6g -Xms6g"
 
# 권장: 물리 메모리의 10-25%
# 나머지는 Page Cache에 사용

GC 설정

# G1GC 권장 (Kafka 3.0+)
export KAFKA_JVM_OPTS="-XX:+UseG1GC \
    -XX:MaxGCPauseMillis=20 \
    -XX:InitiatingHeapOccupancyPercent=35 \
    -XX:+ExplicitGCInvokesConcurrent"

프로덕션 권장 설정

3노드 클러스터 예시

# server.properties (Broker 1)
broker.id = 1
listeners = PLAINTEXT://0.0.0.0:9092
advertised.listeners = PLAINTEXT://kafka1.example.com:9092
log.dirs = /var/kafka-logs
 
# Zookeeper (또는 KRaft)
zookeeper.connect = zk1:2181,zk2:2181,zk3:2181/kafka
 
# 복제
default.replication.factor = 3
min.insync.replicas = 2
 
# 성능
num.network.threads = 8
num.io.threads = 16
socket.send.buffer.bytes = 102400
socket.receive.buffer.bytes = 102400
 
# Retention
log.retention.hours = 168
log.segment.bytes = 1073741824
 
# 자동 생성 비활성화 (프로덕션)
auto.create.topics.enable = false
auto.leader.rebalance.enable = true

설정 확인 및 변경

동적 설정 변경

# Broker 설정 조회
kafka-configs.sh --describe \
    --bootstrap-server localhost:9092 \
    --entity-type brokers \
    --entity-name 0
 
# 동적 설정 변경 (재시작 불필요)
kafka-configs.sh --alter \
    --bootstrap-server localhost:9092 \
    --entity-type brokers \
    --entity-name 0 \
    --add-config log.retention.hours=72

동적 변경 가능 설정

설정범위설명
log.retention.msTopic/BrokerRetention 기간
log.retention.bytesTopic/BrokerRetention 크기
min.insync.replicasTopic/Broker최소 ISR
unclean.leader.election.enableTopic/Broker비동기 리더 선출
max.connections.per.ipBrokerIP당 최대 연결

관련 문서