Kafka 설치 및 Zabbix JMX 통합
Source: Dev.to
섹션 1: Kafka 서버 설치 및 구성 (호스트 측)
1. Java 설치 및 준비
Kafka가 동작하려면 Java가 필요합니다.
sudo apt update
sudo apt install openjdk-17-jdk -y
java -version
2. Kafka 다운로드 및 설치
Kafka 3.6.1 버전을 다운로드하고 압축을 풀어 /opt 디렉터리로 이동합니다.
cd /tmp
wget https://archive.apache.org/dist/kafka/3.6.1/kafka_2.13-3.6.1.tgz
# 압축 해제
tar -xvzf kafka_2.13-3.6.1.tgz
# 이동
sudo mv kafka_2.13-3.6.1 /opt/kafka
# 디렉터리 진입
cd /opt/kafka
3. 서비스 시작 (JMX 활성화)
먼저 Zookeeper를 실행하고, 그 다음 JMX 포트(9999)를 지정하여 Kafka를 시작합니다.
# Zookeeper 시작
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
# JMX 포트 지정 후 Kafka 시작
export JMX_PORT=9999
bin/kafka-server-start.sh -daemon config/server.properties
4. 확인
서비스와 포트가 정상적으로 실행되었는지 확인합니다.
# 프로세스 확인 (Kafka와 QuorumPeerMain이 보여야 함)
jps
# 9999 포트가 열려 있는지 확인 (출력이 비어 있으면 안 됨)
ss -tpln | grep 9999
섹션 2: Zabbix 서버 측 구성
1. Java Gateway 설치
sudo apt update
sudo apt install zabbix-java-gateway -y
sudo systemctl enable --now zabbix-java-gateway
2. Zabbix 서버 설정
설정 파일을 편집하여 Java Gateway를 지정합니다.
sudo nano /etc/zabbix/zabbix_server.conf
파일 안에 아래와 같은 줄이 존재하며, 필요에 따라 수정(또는 추가)합니다.
# Gateway가 위치한 곳 (같은 머신이므로 127.0.0.1)
JavaGateway=127.0.0.1
# Gateway가 리스닝하는 포트 (기본값 10052)
JavaGatewayPort=10052
# Java가 사용할 poller 수 (0이면 작동하지 않으며 최소 5로 설정)
StartJavaPollers=5
3. 서비스 재시작
sudo systemctl restart zabbix-server
섹션 3: Zabbix 웹 인터페이스 구성
Kafka 호스트를 Zabbix에 추가하는 단계:
- 메뉴 이동: Data Collection (또는 Configuration) → Hosts → 오른쪽 위 Create host 버튼 클릭.
- 호스트 정보 입력:
- Host name:
emine-kafka(또는 원하는 이름). - Templates: Apache Kafka by JMX (데이터를 받아오는 핵심 템플릿).
- Host groups: Applications 또는 Linux servers.
- Host name:
- 연결 설정 (Interface) 구성:
- Interfaces 행에서 Add 버튼을 누르고 JMX 선택.
- IP Address:
192.168.100.1(Kafka 머신의 IP). - Port:
9999

- 저장 및 모니터링:
- Add 버튼 클릭.
- 리스트의 Availability 열에 있는 JMX 아이콘이 회색에서 녹색으로 바뀌면 정상이며, 1‑2분 정도 소요될 수 있습니다.
섹션 4: 문제 해결 (SSL/Auth 오류)
아이콘이 녹색으로 변하지 않고 아래와 같은 오류가 나타날 경우:
오류: SSL peer shut down incorrectly: service:jmx:rmi:///jndi/rmi://192.168.100.1:9999/jmxrmi
해결 단계
Kafka를 중지하고 SSL/인증을 비활성화한 뒤 IP 주소를 고정합니다.
cd /opt/kafka
bin/kafka-server-stop.sh
# SSL 및 Auth 비활성화, Hostname 고정 (IP 주소는 환경에 맞게 수정)
export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.100.1"
export JMX_PORT=9999
bin/kafka-server-start.sh -daemon config/server.properties
섹션 5: 데이터 검증 (JmxTool 테스트)
Zabbix에 전달된 데이터가 정확한지 확인하기 위해 Kafka 서버에서 JmxTool을 사용합니다. Zabbix에 표시된 값과 터미널 출력이 일치하는지 비교합니다.
시나리오
- Item: Produce request total time, mean
- Key:
jmx["kafka.network:type=RequestMetrics,name=TotalTimeMs,request=Produce","Mean"] - Zabbix에 표시된 값:
0

검증 명령 (Kafka 서버)
cd /opt/kafka
JMX_PORT="" bin/kafka-run-class.sh kafka.tools.JmxTool \
--jmx-url service:jmx:rmi:///jndi/rmi://127.0.0.1:9999/jmxrmi \
--object-name "kafka.network:type=RequestMetrics,name=TotalTimeMs,request=Produce" \
--attributes Mean \
--date-format "YYYY-MM-dd HH:mm:ss"
예시 출력
WARNING: The 'kafka.tools' package is deprecated...
Trying to connect to JMX url: service:jmx:rmi:///jndi/rmi://127.0.0.1:9999/jmxrmi
"time","kafka.network:type=RequestMetrics,name=TotalTimeMs,request=Produce:Mean"
2025-12-08 07:21:43,0.0
2025-12-08 07:21:45,0.0
2025-12-08 07:21:47,0.0
결과: 터미널 출력도 0.0을 반환하므로 Zabbix에 전달된 데이터가 정확합니다.