1 基础健康检查命令
1.1 查看未同步副本
/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-topics.sh --describe \
--bootstrap-server 192.168.10.33:9092 \
--under-replicated-partitions
参数说明:
- --under-replicated-partitions:显示所有副本未完全同步的分区
- 输出解读:结果会显示哪些分区的副本落后于leader,通常表示网络问题、broker故障或磁盘I/O瓶颈
1.2 检查无Leader分区
/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-topics.sh --describe \
--bootstrap-server 192.168.10.33:9092 \
--unavailable-partitions
参数说明:
- --unavailable-partitions:显示当前没有活跃leader的分区
- 严重程度:这种情况会导致客户端无法读写该分区,属于严重故障
2 高级健康检查命令
2.1 查看分区ISR变化历史
/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-topics.sh --describe \
--bootstrap-server 192.168.10.33:9092 \
--topic your-topic \
--unavailable-partitions \
--under-replicated-partitions \
--verify
参数说明:
- --verify:显示更详细的分区状态验证信息
2.2 检查分区分布均衡性
/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-topics.sh --describe \
--bootstrap-server 192.168.10.33:9092 \
| awk '/Partition:/ {print $2,$4}' \
| sort | uniq -c \
| sort -nr
2.3 检查消息堆积情况
/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-run-class.sh kafka.tools.GetOffsetShell \
--broker-list 192.168.10.33:9092 \
--topic testtopic \
--time -1 \
| awk -F ":" '{sum += $3} END {print sum}'
3 故障排查标准化流程
3.1 检查Broker状态
# 查看broker存活状态
/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-broker-api-versions.sh --bootstrap-server 192.168.10.33:9092
# 检查controller broker
/export/home/kafka_zk/kafka_2.13-2.7.1/bin/zookeeper-shell.sh 192.168.10.33:2181 get /controller
3.2 验证网络连接
# 测试 broker 间连通性
for broker in 192.168.10.33:9092 192.168.10.34:9092 192.168.10.35:9092; do
echo "Testing $broker..."
telnet ${broker%:*} ${broker#*:} <<EOF
EOF
done
3.3 查看日志文件
# 查看 Kafka 服务日志
tail -n 100 /export/home/kafka_zk/kafka_2.13-2.7.1/logs/server.log | grep -E "ERROR|WARN"
# 查看 controller 日志
grep "Controller" /export/home/kafka_zk/kafka_2.13-2.7.1/logs/controller.log | tail -n 50
3.4 检查系统资源
# 检查磁盘空间
df -h
# 检查磁盘 I/O
iostat -dx 2 5
# 检查内存使用
free -h