Kafka 安装与 Zabbix JMX 集成

发布: (2025年12月8日 GMT+8 18:45)
4 min read
原文: Dev.to

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 Server

编辑配置文件以指明 Java Gateway。

sudo nano /etc/zabbix/zabbix_server.conf

在文件中找到并修改(或添加)以下行:

# Gateway 所在位置(与服务器在同一台机器,使用 127.0.0.1)
JavaGateway=127.0.0.1

# Gateway 监听的端口(默认 10052)
JavaGatewayPort=10052

# Java 轮询器数量(若为 0 则不工作,建议至少设为 5)
StartJavaPollers=5

3. 重启服务

sudo systemctl restart zabbix-server

第 3 部分:Zabbix Web 界面配置

在 Zabbix 中添加 Kafka 主机的步骤:

  1. 进入菜单: Data Collection(或 Configuration)→ Hosts → 点击右上角的 Create host 按钮。
  2. 填写主机信息:
    • Host name: emine-kafka(或自定义名称)。
    • Templates: Apache Kafka by JMX(提供关键数据的模板)。
    • Host groups: ApplicationsLinux servers
  3. 配置接口(Interface):
    • Interfaces 行点击 Add,选择 JMX
    • IP Address: 192.168.100.1(Kafka 主机的 IP)。
    • Port: 9999

Zabbix host 添加界面

  1. 保存并监控:
    • 点击 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 测试)

使用 JmxTool 在 Kafka 服务器上验证 Zabbix 接收到的数据是否正确。将 Zabbix 中的值与终端输出对比。

场景

  • Item: Produce request total time, mean
  • Key: jmx["kafka.network:type=RequestMetrics,name=TotalTimeMs,request=Produce","Mean"]
  • Zabbix 中显示的值: 0

Zabbix item 界面

验证命令(在 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 接收到的数据是正确的。

Back to Blog

相关文章

阅读更多 »