DB & AWS Knowledge
Kafka server.property (config 설정) 관련 옵션들 - 1 본문
이 페이지에서는 Kafka broker 들을 구성할 때, 튜닝을 고려 할 수 있는 server.property 옵션들에 대하여 다룬다.
이 페이지는 perplexity 를 통해 필자가 어떤 prompt 를 작성하여 공부하는지를 공유한다. ([] 로 표기)
또한, 검색이외에 추가로 덧붙일 내용은 ※ 로 추가한다.
AI 를 통해 관련된 자료를 검색하다보면 이전 게시글과 중복된 사항도 있으나 이는 복습 및 상기 차원에서 그대로 기재 되도록 한다.
또한, 출처 또한 동시에 표기한다.
[kafka server.properties 에서 자주 사용되는 옵션들을 알려줘]
Kafka 서버(브로커)에서 자주 사용되는 주요 옵션(properties)은 다음과 같다.
주요 Kafka Server Properties
broker.id | int | 0 | 브로커의 고유 식별자. 클러스터 내 각 브로커마다 중복되지 않아야 함1. |
listeners | string | PLAINTEXT://:9092 | 브로커가 클라이언트 연결을 받을 수 있는 주소와 프로토콜 목록. 예: PLAINTEXT://:9092,SSL://:9093231. |
advertised.listeners | string | null | 클라이언트가 실제로 연결해야 하는 주소. 외부 클라이언트가 접근해야 할 경우 설정 필요21. |
log.dirs | string | /tmp/kafka-logs | 메시지 데이터가 저장되는 디렉터리 경로. 여러 경로 지정 가능231. |
num.network.threads | int | 3 | 네트워크 요청을 처리하는 스레드 수341. |
num.io.threads | int | 8 | 디스크 I/O 처리 스레드 수341. |
num.recovery.threads.per.data.dir | int | 1 | 데이터 디렉터리마다 로그 복구에 사용되는 스레드 수341. |
default.replication.factor | int | 1 | 새로 생성되는 토픽의 기본 복제 인자. 보통 3으로 설정41. |
num.partitions | int | 1 | 새로 생성되는 토픽의 기본 파티션 수41. |
log.retention.hours | int | 168 (7일) | 로그(메시지)가 보관되는 최대 시간41. |
log.segment.bytes | int | 1073741824 (1GB) | 하나의 로그 세그먼트 파일의 최대 크기41. |
zookeeper.connect | string | localhost:2181 | ZooKeeper 연결 정보. 클러스터 내 ZooKeeper 서버 목록1. |
auto.create.topics.enable | boolean | true | 존재하지 않는 토픽에 대한 생성을 자동으로 허용할지 여부1. |
참고
- listeners와 advertised.listeners는 클라이언트가 브로커에 접근하는 방식과 실제 연결 주소를 구분하여 설정할 때 중요하다21.
- log.dirs는 여러 경로를 지정할 수 있어 데이터 저장 공간을 확장할 수 있다231.
- num.network.threads, num.io.threads 등은 브로커의 성능 튜닝에 자주 사용된다341.
- default.replication.factor와 num.partitions는 토픽의 내구성과 병렬 처리 능력에 영향을 준다41.
- log.retention.hours와 log.segment.bytes는 메시지 저장 정책을 결정한다41.
이 옵션들은 Kafka 브로커의 기본 동작, 성능, 내구성, 확장성에 큰 영향을 미친다.
- https://www.ibm.com/docs/en/oala/1.3.7?topic=collection-apache-kafka-broker-configuration-example
- https://docs.confluent.io/platform/current/installation/configuration/broker-configs.html
- https://docs.redhat.com/en/documentation/red_hat_streams_for_apache_kafka/2.5/html-single/kafka_configuration_properties/index
- https://docs.redhat.com/en/documentation/red_hat_streams_for_apache_kafka/2.8/html/kafka_configuration_tuning/con-broker-config-properties-str
- https://www.ibm.com/docs/en/tivoli-netcoolimpact/7.1.0?topic=source-kafka-configuration-properties-file
- https://presentlee.tistory.com/12
- https://dev-youngjun.tistory.com/177
- https://kafka.apache.org/documentation/
- https://docs.redhat.com/ko/documentation/red_hat_streams_for_apache_kafka/2.5/html/using_amq_streams_on_rhel/assembly-configuring-kafka-str
- https://docs.confluent.io/platform/current/kafka/dynamic-config.html
※ RDBMS 에서 파라미터 사용에 익숙하다면 이를 연상하여 읽으면 된다.
[broker.id 가 필요한 이유]
broker.id는 Kafka 클러스터 내에서 각 브로커를 고유하게 식별하기 위해 반드시 필요한 값이다. 클러스터에 여러 브로커가 존재할 때, 각 브로커가 자신만의 고유한 숫자 ID를 가져야만 클러스터 관리, 메타데이터 동기화, 장애 복구, 파티션 할당 등 다양한 작업에서 서로를 명확히 구분할 수 있다156.
예를 들어, 브로커가 새로 추가되거나 장애가 발생했을 때 클러스터는 broker.id를 기준으로 해당 브로커를 식별하고, 메타데이터(예: 컨트롤러 정보, 파티션 할당 상태 등)를 올바르게 관리한다78. 만약 broker.id가 중복되면 클러스터 내에서 브로커를 구분할 수 없게 되어 시스템 오류나 데이터 불일치가 발생할 수 있다.
정리하면, broker.id는 Kafka 클러스터의 안정적이고 일관성 있는 운영을 위해 각 브로커에 반드시 설정해야 하는 고유 식별자다.
- https://always-kimkim.tistory.com/entry/kafka101-broker
- https://velog.io/@jaymin_e/Kafka-Kafka-Brokers
- https://jh-labs.tistory.com/391
- https://blog.naver.com/adamdoha/222183734423
- https://assu10.github.io/dev/2024/06/15/kafka-install/
- https://presentlee.tistory.com/12
- https://sjh9708.tistory.com/151
- https://g-study.tistory.com/214
- https://cla9.tistory.com/169
- https://yeon-kr.tistory.com/183
[listeners 가 필요한 이유와 advertised.listeners 와의 연관성]
listeners는 Kafka 브로커가 실제로 클라이언트의 연결 요청을 수신하는 네트워크 인터페이스와 포트를 지정하는 설정이다. 즉, 브로커가 어느 IP 주소나 호스트, 그리고 어떤 포트에서 메시지를 받을지 결정한다. 예를 들어, listeners=PLAINTEXT://localhost:9092로 설정하면 브로커는 로컬호스트의 9092 포트에서 PLAINTEXT 프로토콜로 들어오는 연결을 받게 된다123.
이 설정은 브로커가 클라이언트와 통신하기 위해 반드시 필요하다. 만약 listeners를 설정하지 않으면, 브로커는 외부에서 접근할 수 없게 된다2.
advertised.listeners는 브로커가 클라이언트(프로듀서, 컨슈머, 다른 브로커 등)에게 자신의 위치를 알릴 때 사용하는 주소다. 클라이언트는 이 정보를 바탕으로 브로커에 접속한다. 특히, 브로커가 내부 네트워크와 외부 네트워크에서 서로 다른 주소로 접근해야 할 때(예: 내부에서는 사설 IP, 외부에서는 퍼블릭 IP 또는 도메인 사용), advertised.listeners를 통해 외부 클라이언트가 올바른 주소로 접속할 수 있게 해준다145.
예를 들어,
- listeners=PLAINTEXT://192.168.1.10:9092
- advertised.listeners=PLAINTEXT://kafka.example.com:9092
이렇게 설정하면, 브로커는 내부 네트워크(192.168.1.10)에서 실제로 연결을 받지만, 클라이언트는 kafka.example.com 주소로 연결을 시도하게 된다.
두 설정의 연관성은 다음과 같다.
- listeners는 브로커가 실제로 바인딩하는 주소(수신 주소)다.
- advertised.listeners는 클라이언트가 브로커에 접속할 때 사용할 주소(공개 주소)다.
- advertised.listeners를 따로 지정하지 않으면, listeners 설정이 클라이언트에게도 그대로 전달된다15.
이렇게 분리함으로써 내부/외부 네트워크, 프록시, 로드밸런서 등 다양한 환경에서 Kafka 클러스터를 유연하게 운영할 수 있다.
- https://blog.voidmainvoid.net/500
- https://dortmoot.tistory.com/144
- https://shinwusub.tistory.com/133
- https://westlife0615.tistory.com/529
- https://godekdls.github.io/Apache%20Kafka/broker-configuration/
- https://parkcheolu.tistory.com/196
- https://sharplee7.tistory.com/144
- https://foulerback.tistory.com/26
- https://developer-pi.tistory.com/388
- https://bagbokman.tistory.com/16
※ Kafka listeners 는 프로토콜, 호스트 이름, 포트 양식으로 접속 설정이 된다. 구버전은 단순 포트 설정으로만 설정이 가능했다.
[log.dirs 와 num.recovery.threads.per.data.dir 와의 연관성]
log.dirs와 num.recovery.threads.per.data.dir는 모두 Kafka 브로커가 데이터를 저장하고 관리하는 데 중요한 역할을 하며, 서로 밀접하게 연관되어 있다.
- log.dirs
- num.recovery.threads.per.data.dir
즉, log.dirs에 지정된 디렉터리 개수가 많아질수록 num.recovery.threads.per.data.dir 값이 전체 복구 스레드 수에 미치는 영향이 커진다.
이 두 설정은 함께 조정하여, 브로커 시작/종료 시 로그 복구 속도를 최적화할 수 있다.
실제 운영 환경에서는 여러 디렉터리를 사용해 I/O 병목을 줄이고, 복구 스레드 수를 늘려 복구 시간을 단축하는 것이 일반적이다.
- https://docs.confluent.io/platform/current/installation/configuration/broker-configs.html
- https://www.ibm.com/docs/ko/oala/1.3.8?topic=collection-configuring-apache-kafka-brokers
- https://data-engineer-tech.tistory.com/11
- https://velog.io/@mineru/Kafka-kafka-%EC%84%9C%EB%B2%84-%EC%84%A4%EC%A0%95
- https://strimzi.io/blog/2021/06/08/broker-tuning/
- https://stackoverflow.com/questions/53821671/kafka-broker-taking-too-long-to-come-up
- https://presentlee.tistory.com/12
- https://marrrang.tistory.com/21
- https://stackoverflow.com/questions/63544003/understanding-kafka-log-dirs
- https://docs.cloudera.com/runtime/7.3.1/kafka-managing/topics/kafka-manage-cli-logdir.html
[auto.create.topics.enable 에 대해서 더 알려줘]
auto.create.topics.enable는 Kafka 브로커의 중요한 설정 중 하나로, 존재하지 않는 토픽에 대해 메시지를 전송하거나 읽으려고 할 때 해당 토픽을 자동으로 생성할지 여부를 결정한다. 기본값은 true로, 별도로 지정하지 않으면 자동 생성이 활성화된다125.
이 옵션의 주요 특징과 주의점은 다음과 같다.
- 자동 생성 동작
- 편의성 vs 관리
- 성능 및 관리 영향
- 관리 팁
정리하면, auto.create.topics.enable는 Kafka의 편의성을 높여주지만, 운영 안정성과 성능을 위해 신중히 사용해야 하는 옵션이다.
- https://ydeer.tistory.com/311
- https://rockintuna.tistory.com/265
- https://devidea.tistory.com/85
- https://learn.microsoft.com/ko-kr/azure/hdinsight/kafka/apache-kafka-auto-create-topics
- https://velog.io/@mineru/Kafka-kafka-%EC%84%9C%EB%B2%84-%EC%84%A4%EC%A0%95
- https://kjyun.tistory.com/142
- https://snowturtle93.github.io/posts/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%94%84%EB%A1%9C%EB%93%80%EC%84%9C/
- https://motti.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4Kafka-%ED%99%9C%EC%9A%A9%EC%A0%95%EB%A6%AC
- https://presentlee.tistory.com/12
- https://heodolf.tistory.com/11
'Kafka, MSK, Kinesis > 아키텍처 및 내부 구조' 카테고리의 다른 글
Kafka server.property (config 설정) 관련 옵션들 - 2 (0) | 2025.07.09 |
---|---|
Kafka Broker 설치 방법 (0) | 2025.06.16 |
Zookeeper 설치 방법 - 앙상블 (ensemble) 구성 (0) | 2025.06.15 |
Zookeeper 설치 방법 - 기본설치 (0) | 2025.06.13 |
Zookeeper 개요 (0) | 2025.05.24 |