Apache Kafka是一个分布式流处理平台,广泛应用于构建实时数据管道和流应用程序。本文将详细介绍如何在三节点集群上部署Kafka 2.8以下版本。
主机名 |
IP地址 |
node4 |
192.168.10.33 |
node5 |
192.168.10.34 |
node6 |
192.168.10.35 |
- 操作系统:Linux(本文以CentOS 7为例)
- Java环境:JDK 1.8或以上
- 磁盘空间:建议至少50GB(根据实际需求调整)
- 内存:建议至少4GB(根据实际负载调整)
# 在所有节点上执行以下操作
# 关闭防火墙(生产环境请根据实际情况配置安全组)
systemctl stop firewalld
systemctl disable firewalld
# 关闭SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 配置主机名解析
cat >> /etc/hosts <
Kafka下载地址: Index of /dist/kafka/2.7.1Zookeeper下载地址: Index of /dist/zookeeper
# 在所有节点执行如下操作
# 创建目录
mkdir -p /export/home/kafka_zk
# 上传安装包并解压
tar -zxvf kafka_2.13-2.7.1.tgz -C kafka_zk/
tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz -C kafka_zk/
# 创建数据目录和日志目录
mkdir -p /export/home/kafka_zk/apache-zookeeper-3.6.3-bin/{data,logs}
mkdir -p /export/home/kafka_zk/kafka_2.13-2.7.1/logs
Kafka 2.8以下版本依赖Zookeeper进行集群管理:
# 在所有节点上执行如下操作
# 编辑conf/zoo.cfg:备份conf/zoo.cfg文件并添加如下内容
cp conf/zoo.cfg conf/zoo.cfg_bak
cat >conf/zoo.cfg<
echo "1" > /export/home/kafka_zk/apache-zookeeper-3.6.3-bin/data/myid
echo "2" > /export/home/kafka_zk/apache-zookeeper-3.6.3-bin/data/myid
echo "3" > /export/home/kafka_zk/apache-zookeeper-3.6.3-bin/data/myid
# 编辑config/server.properties并添加如下内容
cp config/server.properties config/server.properties_bak
cat >config/server.properties<
# 编辑config/server.properties并添加如下内容
cp config/server.properties config/server.properties_bak
cat >config/server.properties<
# 编辑config/server.properties并添加如下内容
cp config/server.properties config/server.properties_bak
cat >config/server.properties<
# 在所有节点上执行
/export/home/kafka_zk/apache-zookeeper-3.6.3-bin/bin/zkServer.sh start
for node in node4 node5 node6; do
echo "=== $node ==="
echo srvr | nc $node 2181 | grep -E "Mode|Zxid"
done
# 在所有节点上执行
/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-server-start.sh -daemon /export/home/kafka_zk/kafka_2.13-2.7.1/config/server.properties
# 在任一节点上执行以下命令验证集群状态
# 查看broker列表
/export/home/kafka_zk/kafka_2.13-2.7.1/bin/zookeeper-shell.sh localhost:2181 ls /brokers/ids
# 创建测试topic
/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-topics.sh --create --topic test --partitions 3 --replication-factor 3 --bootstrap-server node4:9092
# 查看topic详情
/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-topics.sh --describe --topic test --bootstrap-server node4:9092
# 生产消息
/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-console-producer.sh --topic test --bootstrap-server node4:9092
# 消费消息(在另一个终端)
/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server node4:9092
[root@node4 kafka_2.13-2.7.1]# /export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-topics.sh --create --topic test --partitions 3 --replication-factor 3 --bootstrap-server node4:9092
Created topic test.
[root@node4 kafka_2.13-2.7.1]# /export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-topics.sh --describe --topic test --bootstrap-server node4:9092
Topic: test PartitionCount: 3 ReplicationFactor: 3 Configs: compression.type=producer,min.insync.replicas=2,segment.jitter.ms=30000,cleanup.policy=delete,segment.bytes=1073741824,max.message.bytes=10485760,unclean.leader.election.enable=false
Topic: test Partition: 0 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3
Topic: test Partition: 1 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1
Topic: test Partition: 2 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2
[root@node4 kafka_2.13-2.7.1]# /export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-console-producer.sh --topic test --bootstrap-server node4:9092
>test123
>test234
>test345
>test456
>^C[root@node4 kafka_2.13-2.7.1]# /export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server node4:9092
test123
test345
test234
test456
/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-topics.sh --list --bootstrap-server node4:9092
[root@node4 kafka_2.13-2.7.1]# /export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-topics.sh --list --bootstrap-server node4:9092
__consumer_offsets
test
[root@node4 kafka_2.13-2.7.1]#
/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-topics.sh --describe --topic test --bootstrap-server node4:9092
[root@node4 kafka_2.13-2.7.1]# /export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-topics.sh --describe --topic test --bootstrap-server node4:9092
Topic: test PartitionCount: 3 ReplicationFactor: 3 Configs: compression.type=producer,min.insync.replicas=2,segment.jitter.ms=30000,cleanup.policy=delete,segment.bytes=1073741824,max.message.bytes=10485760,unclean.leader.election.enable=false
Topic: test Partition: 0 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3
Topic: test Partition: 1 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1
Topic: test Partition: 2 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2
[root@node4 kafka_2.13-2.7.1]#
/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-topics.sh --delete --topic test --bootstrap-server node4:9092
[root@node4 kafka_2.13-2.7.1]# /export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-topics.sh --delete --topic test --bootstrap-server node4:9092
[root@node4 kafka_2.13-2.7.1]# /export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-topics.sh --describe --topic test --bootstrap-server node4:9092
Error while executing topic command : Topic 'test' does not exist as expected
[2025-04-04 22:56:05,262] ERROR java.lang.IllegalArgumentException: Topic 'test' does not exist as expected
at kafka.admin.TopicCommand$.kafka$admin$TopicCommand$$ensureTopicExists(TopicCommand.scala:539)
at kafka.admin.TopicCommand$AdminClientTopicService.describeTopic(TopicCommand.scala:316)
at kafka.admin.TopicCommand$.main(TopicCommand.scala:70)
at kafka.admin.TopicCommand.main(TopicCommand.scala)
(kafka.admin.TopicCommand$)
[root@node4 kafka_2.13-2.7.1]#
/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-consumer-groups.sh --list --bootstrap-server node4:9092
/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-server-stop.sh
/export/home/kafka_zk/apache-zookeeper-3.6.3-bin/bin/zkServer.sh stop
Zookeeper无法启动:
- 检查myid文件是否正确
- 检查防火墙是否关闭
- 检查数据目录权限
Kafka无法连接Zookeeper:
- 检查Zookeeper是否正常运行
- 检查server.properties中的zookeeper.connect配置
节点间通信问题:
- 检查/etc/hosts配置
- 检查网络连通性
本文详细介绍了在三节点集群上部署Kafka 2.8以下版本的完整流程。通过合理的配置和验证,可以获得一个高可用的Kafka集群。对于生产环境,建议进一步考虑以下优化:
- 监控方案(如Prometheus + Grafana)
- 安全配置(SSL/SASL认证)
- 性能调优(根据硬件配置调整JVM参数)
- 日志保留策略优化