Apache Kafka作为分布式流处理平台,在金融交易系统、物联网数据处理、实时日志分析等场景中发挥关键作用。某电商平台日均处理订单消息1.2亿条,峰值QPS达5万,采用Kafka集群实现订单状态流转、用户行为追踪和库存同步等功能。以下是经过生产验证的集群部署方案及典型故障处理经验。
指标 | 推荐值 | 监控阈值 |
---|---|---|
分区数量/Broker | ≤4000 | ≥3500 告警 |
副本同步延迟 | <100ms | >500ms 告警 |
磁盘使用率 | ≤75% | ≥85% 紧急处理 |
网络吞吐/Broker | ≤70% 带宽 | ≥85% 限流 |
下载 Kafka
[root@elk91 ~]# wget https://dlcdn.apache.org/kafka/3.9.0/kafka_2.13-3.9.0.tgz
解压 Kafka
[root@elk91 ~]# tar xf kafka_2.13-3.9.0.tgz -C /usr/local/
修改 Kafka 配置文件
# Kafka 的唯一标识
broker.id=91
# 修改数据目录
log.dirs=/var/lib/kafka
# 指定 Kafka 的元数据存储在 Zookeeper 集群的路径(znodes)
zookeeper.connect=10.0.0.91:2181,10.0.0.92:2181,10.0.0.93:2181/oldboyedu-kafka-3.9.0
配置环境变量
[root@elk91 ~]# cat /etc/profile.d/kafka.sh
#!/bin/bash
export KAFKA_HOME=/usr/local/kafka_2.13-3.9.0
export PATH=$PATH:$KAFKA_HOME/bin
启动 Kafka
[root@elk91 ~]# source /etc/profile.d/kafka.sh
[root@elk91 ~]# kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
验证 Kafka 是否启动成功
[root@elk91 ~]# ss -ntl | grep 9092
LISTEN 0 50 *:9092 *:*
拷贝 Kafka 数据到集群节点(92/93)
[root@elk91 ~]# scp -r /usr/local/kafka_2.13-3.9.0/ 10.0.0.92:/usr/local/
[root@elk91 ~]# scp -r /usr/local/kafka_2.13-3.9.0/ 10.0.0.93:/usr/local/
[root@elk91 ~]# scp /etc/profile.d/kafka.sh 10.0.0.92:/etc/profile.d/
[root@elk91 ~]# scp /etc/profile.d/kafka.sh 10.0.0.93:/etc/profile.d/
修改 92/93 节点的配置文件
[root@elk92 ~]# sed -i '/^broker.id/s#91#92#' /usr/local/kafka_2.13-3.9.0/config/server.properties
[root@elk93 ~]# sed -i '/^broker.id/s#91#93#' /usr/local/kafka_2.13-3.9.0/config/server.properties
启动其他节点的 Kafka
[root@elk92 ~]# source /etc/profile.d/kafka.sh && kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
[root@elk93 ~]# source /etc/profile.d/kafka.sh && kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
验证 Zookeeper 集群数据是否写入成功
[root@elk91 ~]# echo "ls /oldboyedu-kafka-3.9.0" | nc 10.0.0.91 2181
问题描述
在连接 Kafka 集群时,出现未知主机异常,日志显示:
复制
[2025-03-17 10:53:58,604] WARN [Controller id=91, targetBrokerId=93] Error connecting to node elk93:9092 (id: 93 rack: null) (org.apache.kafka.clients.NetworkClient)
java.net.UnknownHostException: elk93
问题分析
这是由于 Kafka 集群在连接时进行了反向解析,而主机名未正确解析。
解决方案
在 Kafka 配置文件中指定监听的 IP 地址:
listeners=PLAINTEXT://10.0.0.91:9092
然后重启 Kafka 服务:
[root@elk91 ~]# kafka-server-stop.sh
[root@elk91 ~]# kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
问题描述
执行 Kafka Topic 命令时,出现超时错误:
Error while executing topic command : Timed out waiting for a node assignment. Call: listTopics
问题分析
这可能是由于 Kafka 集群节点间网络通信不畅或配置错误导致的。
解决方案
检查 Kafka 集群节点间的网络连通性,确保各节点间可以正常通信。
确保 Kafka 配置文件中的 zookeeper.connect
配置正确,能够连接到 Zookeeper 集群。
检查 Kafka 服务是否正常运行,各节点的监听地址和端口是否正确。
查看现有的 Topics 列表
[root@elk91 ~]# kafka-topics.sh --bootstrap-server 10.0.0.91:9092,10.0.0.92:9092,10.0.0.93:9092 --list
创建指定分区副本的 Topic
[root@elk91 ~]# kafka-topics.sh --bootstrap-server 10.0.0.91:9092,10.0.0.92:9092,10.0.0.93:9092 --create --partitions 2 --replication-factor 3 --topic tml666
查看分区的详细信息
[root@elk91 ~]# kafka-topics.sh --bootstrap-server 10.0.0.91:9092,10.0.0.92:9092,10.0.0.93:9092 --topic tml666 --describe
修改分区数
[root@elk91 ~]# kafka-topics.sh --bootstrap-server 10.0.0.91:9092,10.0.0.92:9092,10.0.0.93:9092 --alter --partitions 5 --topic tml666
删除 Topic
[root@elk91 ~]# kafka-topics.sh --bootstrap-server 10.0.0.91:9092,10.0.0.92:9092,10.0.0.93:9092 --delete --topic tml666
创建生产者程序
[root@elk91 ~]# kafka-console-producer.sh --bootstrap-server 10.0.0.92:9092 --topic producer-001
查看现有的 Topics 列表
[root@elk92 ~]# kafka-topics.sh --bootstrap-server 10.0.0.92:9092 --list
创建消费者程序
[root@elk93 ~]# kafka-console-consumer.sh --bootstrap-server 10.0.0.91:9092 --topic producer-001
从最老的 offset 获取数据
[root@elk93 ~]# kafka-console-consumer.sh --bootstrap-server 10.0.0.91:9092 --topic producer-001 --from-beginning
创建 Topic
[root@elk92 ~]# kafka-topics.sh --bootstrap-server 10.0.0.92:9092 --create --topic consumer-grop001 --partitions 3 --replication-factor 1
创建生产者写入数据
[root@elk93 ~]# kafka-console-consumer.sh --bootstrap-server 10.0.0.91:9092 --topic consumer-grop001 --consumer-property group.id=xixi --from-beginning
查看消费者组的详细信息
[root@elk91 ~]# kafka-consumer-groups.sh --bootstrap-server 10.0.0.92:9092 --group xixi --describe ;echo
Kafka 作为一种高性能的分布式消息队列系统,在企业中有着广泛的应用。通过合理的配置和管理,可以有效地利用 Kafka 的特性,满足企业对大规模数据流处理的需求。在部署和使用 Kafka 集群时,需要注意网络配置、主机名解析等问题,以确保集群的稳定运行。