Kafka 는 메트릭을 JMX 로 낸다. 원격 JMX 는 JMX_PORT 환경 변수를 주면 kafka-run-class.sh 가 켠다[1]. 스크립트 파일을 고칠 필요는 없다.
JMX 는 기본적으로 인증 · 암호화가 꺼져 있다[1:1]. 운영에서는 방화벽으로 수집기(Prometheus JMX exporter 등)만 열거나
KAFKA_JMX_OPTS로 인증을 켠다. Prometheus 로 모을 때는 원격 JMX 대신 javaagent 방식의 JMX exporter 가 포트를 하나만 열어 간단하다.
systemd 유닛에 넣는다. Kafka 4.3.1 설치 가이드 의 유닛 파일 [Service] 절에 추가한다.
[Service]
Environment=JMX_PORT=9999
Environment="KAFKA_JMX_OPTS=-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=kafka01.example.com -Djava.net.preferIPv4Stack=true"
sudo systemctl daemon-reload
sudo systemctl restart kafka
손으로 띄울 때는 같은 값을 export 한다.
export JMX_PORT=9999
export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=kafka01.example.com -Djava.net.preferIPv4Stack=true"
bin/kafka-server-start.sh -daemon config/server.properties
java.rmi.server.hostname 은 수집기가 접속할 때 쓸 이름이다. 빠뜨리면 RMI 스텁이 루프백 주소를 돌려줘 원격에서 붙지 못한다.
JMX_PORT가 설정된 셸에서kafka-topics.sh같은 CLI 도구를 실행하면 같은 포트를 열려다 실패한다. 도구를 돌리는 셸에서는unset JMX_PORT한다.
ss -tlnp | grep 9999
# jconsole 또는 jmxterm
jconsole kafka01.example.com:9999
우선 볼 브로커 메트릭[1:2].
| MBean | 의미 |
|---|---|
kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions |
0 이어야 한다 |
kafka.controller:type=KafkaController,name=ActiveControllerCount |
클러스터 전체 합이 1 |
kafka.server:type=KafkaRequestHandlerPool,name=RequestHandlerAvgIdlePercent |
0.3 아래면 I/O 스레드 부족 |
Kafka 4.3 — Monitoring — 2026-09-20 확인. https://kafka.apache.org/43/operations/monitoring/ ↩︎ ↩︎ ↩︎