【Kafka基础】Kafka高可用集群:2.8以下版本超详细部署指南,运维必看!

Apache Kafka是一个分布式流处理平台,广泛应用于构建实时数据管道和流应用程序。本文将详细介绍如何在三节点集群上部署Kafka 2.8以下版本。

1 环境准备

1.1 服务器信息

主机名

IP地址

node4

192.168.10.33

node5

192.168.10.34

node6

192.168.10.35

1.2 系统信息

  • 操作系统:Linux(本文以CentOS 7为例)
  • Java环境:JDK 1.8或以上
  • 磁盘空间:建议至少50GB(根据实际需求调整)
  • 内存:建议至少4GB(根据实际负载调整)

2 部署步骤

2.1 系统基础配置

# 在所有节点上执行以下操作
# 关闭防火墙(生产环境请根据实际情况配置安全组)
systemctl stop firewalld
systemctl disable firewalld

# 关闭SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

# 配置主机名解析
cat >> /etc/hosts <

2.2 下载并解压安装包

Kafka下载地址: Index of /dist/kafka/2.7.1
Zookeeper下载地址: 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

2.3 配置Zookeeper

Kafka 2.8以下版本依赖Zookeeper进行集群管理:
# 在所有节点上执行如下操作
 # 编辑conf/zoo.cfg:备份conf/zoo.cfg文件并添加如下内容
cp conf/zoo.cfg conf/zoo.cfg_bak
cat >conf/zoo.cfg<

2.4 创建zk的myid文件

2.4.1 节点1(node4)

echo "1" > /export/home/kafka_zk/apache-zookeeper-3.6.3-bin/data/myid

2.4.2 节点2(node5)

echo "2" > /export/home/kafka_zk/apache-zookeeper-3.6.3-bin/data/myid

2.4.3 节点3(node6)

echo "3" > /export/home/kafka_zk/apache-zookeeper-3.6.3-bin/data/myid

2.5 配置Kafka

2.5.1 节点1(node4)

# 编辑config/server.properties并添加如下内容
cp config/server.properties config/server.properties_bak
cat >config/server.properties<

2.5.2 节点2(node5)

# 编辑config/server.properties并添加如下内容
cp config/server.properties config/server.properties_bak
cat >config/server.properties<

2.5.3 节点3(node6)

# 编辑config/server.properties并添加如下内容
cp config/server.properties config/server.properties_bak
cat >config/server.properties<

5 启动服务

5.1 启动Zookeeper集群

# 在所有节点上执行 
/export/home/kafka_zk/apache-zookeeper-3.6.3-bin/bin/zkServer.sh start

5.1.1 验证Zookeeper集群状态

for node in node4 node5 node6; do
  echo "=== $node ==="
  echo srvr | nc $node 2181 | grep -E "Mode|Zxid"
done

5.2 启动Kafka集群

# 在所有节点上执行
/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

5.2.1 验证Kafka集群状态

# 在任一节点上执行以下命令验证集群状态
# 查看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

6 集群管理

6.1 常用命令

6.1.1 查看所有topic

/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]# 

6.1.2 查看特定topic详情

/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]# 

6.1.3 删除topic

/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]# 

6.1.4 查看消费者组

/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-consumer-groups.sh --list --bootstrap-server node4:9092

6.2 服务管理

6.2.1 停止Kafka

/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-server-stop.sh

6.2.2 停止Zookeeper

/export/home/kafka_zk/apache-zookeeper-3.6.3-bin/bin/zkServer.sh stop

7 常见问题解决

Zookeeper无法启动:
  • 检查myid文件是否正确
  • 检查防火墙是否关闭
  • 检查数据目录权限
Kafka无法连接Zookeeper:
  • 检查Zookeeper是否正常运行
  • 检查server.properties中的zookeeper.connect配置
节点间通信问题:
  • 检查/etc/hosts配置
  • 检查网络连通性

8 总结

本文详细介绍了在三节点集群上部署Kafka 2.8以下版本的完整流程。通过合理的配置和验证,可以获得一个高可用的Kafka集群。对于生产环境,建议进一步考虑以下优化:
  • 监控方案(如Prometheus + Grafana)
  • 安全配置(SSL/SASL认证)
  • 性能调优(根据硬件配置调整JVM参数)
  • 日志保留策略优化

你可能感兴趣的:(#,Kafka探索之旅,kafka,分布式,zookeeper,集群部署)