본문 바로가기
🔥 Data Engineer/Kafka

[Kafka] - 카프카 server.properties 설정방법

by jyu_seo_ 2026. 1. 20.

 

Apache Kafka는 대용량의 실시간 데이터 스트리밍을 처리하는 분산 메세징 시스템이다.

Kafka 브로커의 핵심 설정 파일인 server.properties를 올바르게 구성하는 것은 안정적이고 효율적인 운영의 시작점이다.

이 가이드에서는 주요 설정 항목들을 카테고리 별로 상세히 살펴보겠다.

 

1. 필수 기본 설정 (Essential Configurations)

1.1 broker.id

broker.id = 0

 

  • 설명: 클러스터 내에서 각 브로커를 식별하는 고유한 정수 ID
  • 권장사항: 
    • 첫번째 브로커는 0, 두번째는 1, 세번째는 2... 순차적으로 설정
    • 설정하지 않으면 자동으로 고유 ID가 생성되지만, 명시적 설정 권장
    • 클러스터 내에서 절대 중복되어서는 안됨

1.2 log.dirs

log.dirs=/var/kafka-logs

 

  • 설명: Kafka가 메세지 로그를 저장할 디렉토리 경로
  • 권장사항:
    • 쉼표로 구분하여 여러 디렉토리 지정 가능: /mnt/disk1/kafka-logs,/mnt/disk2/kafka-logs
    • SSD 사용 시 성능 향상 효과 큼
    • 충분한 디스크 용량 확보 필요
    • 파티션은 설정된 디렉토리 들에 균등하게 분산됨

1.3 zookeeper.connect

zookeeper.connect=localhost:2181
  • 설명: Zookeeper 클러스터 연결 정보
  • 권장사항:
    • 단일 노드: localhost:2181
    • 클러스터: zk1:2181,zk2:2181,zk3:2181
    • chroot 경로 사용 가능: zk1:2181, zk2:2181/kafka
  • 참고: kafka 3.x 이상에서는 KRaft 모드를 통해 Zookeeper 의존성 제거 가능

2. 네트워크 및 통신 설정

2.1 listeners

listeners=PLAINTEXT://:9092
  • 설명: 브로커가 실제로 바인딩되어 수신 대기하는 주소
  • 형식: PROTOCOL://HOST:PORT
  • 예시:
listeners=PLAINTEXT://0.0.0.0:9092,SSL://0.0.0.0:9093

2.2 advertised.listeners

advertised.listeners=PLAINTEXT://kafka-broker-1:9092
  • 설명 : 클라이언트에게 알리는(advertise) 브로커 접속 주소
  • 중요: 클라이언트는 이 주소를 사용하여 브로커에 연결
  • 권장사항:
    • Docker/Kubernetes환경에서 특히 중요
    • 외부에서 접근 가능한 실제 주소 설정 필요
    • 클라우드 환경에서는 public IP 또는 도메인 사용

2.3 num.network.threads

num.network.threads=3
  • 설명: 네트워크 요청을 처리하는 스레드 수
  • 권장사항:
    • 기본값: 3
    • 높은 트래픽 환경: 8~16
    • CPU 코어 수와 클라이언트 연결 수를 고려하여 조정

2.4 num.io.threads

num.io.threads=8
  • 설명: 디스크 I/O 작업을 처리하는 스레드 수
  • 권장사항:
    • 기본값: 8
    • 디스크가 많거나 파티션이 많은 경우 증가(16~32)
    • SSD 사용 시 더 높은 값 설정 가능

3. 로그 보관 및 정리 설정

3.1 log.retention.hours

log.retention.hours=168
  • 설명: 로그를 보관하는 시간(기본 168시간 = 7일)
  • 대안 설정:
    • log.retention.minutes : 분 단위
    • log.retention.ms: 밀리초 단위(가장 우선순위 높음)
  • 권장사항:
    • 비즈니스 요구사항에 따라 조정
    • 디스크 용량을 고려하여 설정

3.2 log.retention.bytes

log.retention.bytes=-1
  • 설명: 파티션당 로그의 최대 크기(-1은 무제한)
  • 권장사항:
    • 디스크 공간 제한이 있을 때 설정
    • ex: log.retention.bytes=1073741824 (1GB)

3.3 log.segment.bytes

log.segment.bytes=1073741824
  • 설명: 로그 세그먼트 파일의 최대 크기(기본 1GB)
  • 권장사항:
    • 높은 처리량: 더 큰 값(2GB)
    • 빠른 로그 롤링 필요: 더 작은 값 (512MB)

3.4 log.cleanup.policy

log.cleanup.policy=delete
  • 설명: 로그 정리 정책
  • 옵션:
    • delete: 오래된 세그먼트 삭제
    • compact:키 별 최신 값만 유지 (로그 컴팩션)
    • delete, compact: 두 정책 모두 적용

4. 복제 및 고가용성 설정

4.1 default.replication.factor

default.replication.factor=3
  • 설명:새로 생성되는 토픽의 기본 복제 팩터
  • 권장사항:
    • 프로덕션 환경: 최소 3
    • 개발/테스트 환경: 1~2

4.2 min.insync.replicas

min.insync.replicas=2
  • 설명: 쓰기가 성공으로 간주되기 위한 최소 동기화된 복제된 수
  • 권장사항:
    • replication.factor=3일때 min.insync.replicas=2 권장
    • 데이터 내구성과 가용성의 균형점

4.3 replica.lag.time.max.ms

replica.lag.time.max.ms=30000
  • 설명: 팔로워 복제본이 ISR에서 제외되기 전 최대 지연 시간(밀리초)
  • 권장사항:
    • 네트워크 지연을 고려하여 설정
    • 기본값: 30000ms (30초)

5. 메모리 및 버퍼 설정

5.1 socket.send.buffer.bytes & socket.receive.buffer.bytes

socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
  • 설명: 네트워크 소켓 송수신 버퍼 크기
  • 권장사항:
    • 높은 처리량 환경: 더 큰 값 (1MB 이상)
    • 기본값: 102400 (100KB)

5.2 socket.request.max.bytes

socket.request.max.bytes=104857600
  • 설명: 소켓 요청의 최대 크기 (기본 100MB)
  • 권장사항:
    • 큰 메세지 처리 시 증가 필요
    • 메모리 고려하여 설정

5.3 message.max.bytes

message.max.bytes=1048576
  • 설명: 브로커가 수용할수 있는 최대 메세지 크기 (기본 1MB)
  • 주의:
    • Producer의 max.request.size와 일치 시켜야 함
    • Consumer의 fetch.max.bytes보다 작거나 같아야함

 

6. 자동 토픽 생성 설정

6.1 auto.create.topics.enable

auto.create.topics.enable=true
  • 설명: 존재하지 않는 토픽에 메세지 생성/소비 시 자동 생성 여부
  • 권장사항:
    • 프로덕션 환경: false (명시적 토픽 관리)
    • 개발 환경: true(편의성)

6.2 num.partitions

num.partitions=1
  • 설명: 자동 생성되는 토픽의 기본 파티션 수
  • 권장사항:
    • 처리량 고려: 3~10 파티션
    • 브로커 수와 소비자 수를 고려하여 결정

7. 압축 설정

7.1 compression.type

compression.type=producer

 

  • 설명: 브로커가 사용하는 압축 타입
  • 옵션:
    • producer: Producer가 설정한 압축 유지
    • none: 압축 없음
    • gzip, snappy, lz4, zstd: 특정 압축 알고리즘 강제
  • 권장사항:
    • 일반적으로 producer 유지
    • 네트워크 대역폭 절약이 중요하면 lz4 또는 zstd

8. 보안 설정

8.1 인증 및 암호화

# SSL 설정
listeners=SSL://0.0.0.0:9093
ssl.keystore.location=/var/private/ssl/kafka.server.keystore.jks
ssl.keystore.password=password
ssl.key.password=password
ssl.truststore.location=/var/private/ssl/kafka.server.truststore.jks
ssl.truststore.password=password

# SASL 설정
security.inter.broker.protocol=SASL_SSL
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN

8.2 ACL(Access Control List)

authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=false

9. 성능 튜닝 팁

9.1 운영 환경 추천 설정

# 브로커 식별
broker.id=1

# 로그 디렉토리
log.dirs=/data/kafka-logs

# Zookeeper 연결
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181/kafka

# 네트워크 설정
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://kafka-1.example.com:9092
num.network.threads=8
num.io.threads=16

# 복제 설정
default.replication.factor=3
min.insync.replicas=2
replica.lag.time.max.ms=30000

# 로그 보관
log.retention.hours=168
log.segment.bytes=1073741824
log.cleanup.policy=delete

# 토픽 설정
auto.create.topics.enable=false
num.partitions=6

# 성능 최적화
socket.send.buffer.bytes=1048576
socket.receive.buffer.bytes=1048576
socket.request.max.bytes=104857600

# 압축
compression.type=lz4

9.2 하드웨어 별 권장사항

고성능 시스템(SSD, 충분한 메모리):

  • num.io.threads: 16~32
  • num.network.threads: 8~16
  • log.segment.bytes: 2GB
  • 큰 힙 메모리 할당 (6~8GB)

일반 시스템

  • num.io.threads: 8~16
  • num.network.threads: 3~8
  • log.segment.bytes: 1GB
  • 힙 메모리 4~6GB

10. 모니터링 및 유지보수

10.1 JMX 포트 설정

export JMX_PORT=9999
  • JMX를 통해 Kafka 메트릭 모니터링 가능

10.2 주요 모니터링 메트릭

  • 처리량:BytesInPerSec, BytesOutPerSec
  • 지연: RequestQueueTimeMs, ResponseQueueTimeMs
  • 복제: UnderReplicatedPartitions
  • 리소스: CPU, 메모리, 디스크I/O

결론

server.properties 설정은 Kafka 클러스터의 성능과 안정성을 좌우하는 핵심 요소입니다. 위에서 소개한 설정들을 환경과 요구사항에 맞게 조정하여 사용하시기 바랍니다.

주요 포인트:

  • ✅ 필수 설정(broker.id, log.dirs, zookeeper.connect)을 반드시 구성
  • ✅ 프로덕션 환경에서는 복제 팩터 최소 3 이상 설정
  • ✅ 네트워크 및 I/O 스레드를 하드웨어 사양에 맞게 튜닝
  • ✅ 로그 보관 정책을 디스크 용량과 비즈니스 요구사항에 맞게 설정
  • ✅ 보안이 중요한 환경에서는 SSL/SASL 활성화
  • ✅ 지속적인 모니터링을 통해 설정 최적화

설정 변경 후에는 반드시 테스트 환경에서 충분히 검증한 후 프로덕션에 적용하는 것을 권장한다.