Kafka高可用配置搭建指南
Kafka的高可用性(HA)通过多节点集群、数据副本机制、故障自动转移等特性实现,以下是具体搭建步骤及关键配置:
环境要求
集群规划
ZooKeeper是Kafka集群的“大脑”,需先部署高可用的ZooKeeper集群:
下载并解压ZooKeeper
在所有ZooKeeper节点执行:
wget https://downloads.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz tar -xzf apache-zookeeper-3.7.0-bin.tar.gz cd apache-zookeeper-3.7.0-bin 配置ZooKeeper
复制默认配置并修改zoo.cfg(关键参数):
cp conf/zoo_sample.cfg conf/zoo.cfg vi conf/zoo.cfg 添加以下内容(3节点示例):
tickTime=2000 # ZooKeeper基本时间单位(毫秒) dataDir=/var/lib/zookeeper # 数据目录(需提前创建) clientPort=2181 # 客户端连接端口 initLimit=5 # Leader与Follower初始同步超时(心跳数) syncLimit=2 # Leader与Follower同步超时(心跳数) server.1=zoo1:2888:3888 # 节点1,2888用于数据同步,3888用于Leader选举 server.2=zoo2:2888:3888 # 节点2 server.3=zoo3:2888:3888 # 节点3 创建myid文件
在每个ZooKeeper节点的dataDir目录下创建myid,内容为节点ID(与server.X中的X一致):
echo "1" > /var/lib/zookeeper/myid # zoo1节点 echo "2" > /var/lib/zookeeper/myid # zoo2节点 echo "3" > /var/lib/zookeeper/myid # zoo3节点 启动ZooKeeper
在每个节点执行:
bin/zkServer.sh start 使用bin/zkServer.sh status检查状态,确认3个节点均为Leader或Follower。
在所有Kafka节点执行以下步骤:
下载并解压Kafka
wget https://downloads.apache.org/kafka/3.2.0/kafka_2.13-3.2.0.tgz tar -xzf kafka_2.13-3.2.0.tgz cd kafka_2.13-3.2.0 配置Kafka Broker
修改config/server.properties(关键参数):
broker.id=1 # 当前Broker唯一ID(集群内不可重复) listeners=PLAINTEXT://:9092 # 监听地址(生产环境建议用SSL加密) advertised.listeners=PLAINTEXT://broker1:9092 # 对外暴露的Broker地址(客户端使用的地址) log.dirs=/var/lib/kafka-logs # 日志存储目录(需提前创建,建议挂载SSD) zookeeper.connect=zoo1:2181,zoo2:2181,zoo3:2181 # ZooKeeper集群地址 default.replication.factor=3 # Topic默认副本数(需≥2,建议3) min.insync.replicas=2 # 写入时需同步的最小副本数(需<default.replication.factor,建议2) unclean.leader.election.enable=false # 禁止非同步副本成为Leader(避免数据丢失) group.initial.rebalance.delay.ms=0 # 消费者组初始再平衡延迟(0表示立即开始) 启动Kafka Broker
在每个节点执行:
bin/kafka-server-start.sh config/server.properties & 使用jps命令检查Kafka进程是否启动,或通过bin/kafka-broker-api-versions.sh --bootstrap-server localhost:9092验证Broker状态。
创建Topic时需指定副本因子≥2(建议3)和分区数(建议为Broker数量的倍数,提升并行度):
bin/kafka-topics.sh --create \ --topic my-topic \ --bootstrap-server zoo1:9092,zoo2:9092,zoo3:9092 \ --replication-factor 3 \ --partitions 3 使用--describe查看Topic详情,确认副本分布均匀:
bin/kafka-topics.sh --describe --topic my-topic --bootstrap-server zoo1:9092 输出应显示每个分区的Leader和Follower分布在不同Broker上。
生产者测试
启动生产者向Topic发送消息:
bin/kafka-console-producer.sh --topic my-topic --bootstrap-server zoo1:9092,zoo2:9092,zoo3:9092 输入测试消息(如hello kafka)。
消费者测试
启动消费者消费消息:
bin/kafka-console-consumer.sh --topic my-topic --from-beginning --bootstrap-server zoo1:9092,zoo2:9092,zoo3:9092 确认能收到生产者发送的消息。
模拟Broker故障
手动停止某个Broker(如zoo1上的Kafka):
bin/kafka-server-stop.sh 观察消费者是否能继续消费(Kafka会自动将Leader转移到其他Broker),并检查Topic状态:
bin/kafka-topics.sh --describe --topic my-topic --bootstrap-server zoo2:9092,zoo3:9092 确认Leader已切换至其他Broker,数据未丢失。
监控工具
kafka-topics.sh、kafka-consumer-groups.sh等命令行工具查看Topic、消费者组状态。日志管理
logrotate),避免日志文件过大占用磁盘空间;logs目录),及时排查故障。故障恢复
通过以上步骤,即可搭建一个具备数据冗余、故障自动转移能力的Kafka高可用集群。生产环境中还需根据业务需求调整分区数、副本因子、JVM参数等,进一步优化性能。