温馨提示×

Kafka高可用配置怎么搭建

小樊
42
2025-09-23 19:40:53
栏目: 大数据

Kafka高可用配置搭建指南

Kafka的高可用性(HA)通过多节点集群数据副本机制故障自动转移等特性实现,以下是具体搭建步骤及关键配置:

一、前置准备

  1. 环境要求

    • 至少3台Linux服务器(如CentOS/Ubuntu),确保网络互通;
    • 每台服务器安装JDK 1.8+(Kafka依赖JVM);
    • 推荐使用SSD存储(提升IO性能)。
  2. 集群规划

    • Broker数量:至少3个(Kafka Controller选举需多数派,3节点可容忍1节点故障);
    • ZooKeeper集群:Kafka依赖ZooKeeper管理元数据(如分区Leader、Broker状态),需部署3或5节点(奇数节点保证多数派)。

二、安装与配置ZooKeeper集群

ZooKeeper是Kafka集群的“大脑”,需先部署高可用的ZooKeeper集群:

  1. 下载并解压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 
  2. 配置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 
  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节点 
  4. 启动ZooKeeper
    在每个节点执行:

    bin/zkServer.sh start 

    使用bin/zkServer.sh status检查状态,确认3个节点均为LeaderFollower

三、安装与配置Kafka Broker

在所有Kafka节点执行以下步骤:

  1. 下载并解压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 
  2. 配置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表示立即开始) 
  3. 启动Kafka Broker
    在每个节点执行:

    bin/kafka-server-start.sh config/server.properties & 

    使用jps命令检查Kafka进程是否启动,或通过bin/kafka-broker-api-versions.sh --bootstrap-server localhost:9092验证Broker状态。

四、创建高可用Topic

创建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上。

五、验证高可用性

  1. 生产者测试
    启动生产者向Topic发送消息:

    bin/kafka-console-producer.sh --topic my-topic --bootstrap-server zoo1:9092,zoo2:9092,zoo3:9092 

    输入测试消息(如hello kafka)。

  2. 消费者测试
    启动消费者消费消息:

    bin/kafka-console-consumer.sh --topic my-topic --from-beginning --bootstrap-server zoo1:9092,zoo2:9092,zoo3:9092 

    确认能收到生产者发送的消息。

  3. 模拟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,数据未丢失。

六、监控与运维

  1. 监控工具

    • Prometheus + Grafana:监控Kafka集群的吞吐量、延迟、分区状态等指标;
    • Kafka自带工具:使用kafka-topics.shkafka-consumer-groups.sh等命令行工具查看Topic、消费者组状态。
  2. 日志管理

    • 配置日志轮转(如logrotate),避免日志文件过大占用磁盘空间;
    • 定期检查Kafka和ZooKeeper日志(位于logs目录),及时排查故障。
  3. 故障恢复

    • Broker宕机:重启故障Broker,Kafka会自动同步数据并恢复Leader角色;
    • ZooKeeper宕机:修复故障节点并重启,若多数派节点恢复,集群可继续运行。

通过以上步骤,即可搭建一个具备数据冗余故障自动转移能力的Kafka高可用集群。生产环境中还需根据业务需求调整分区数、副本因子、JVM参数等,进一步优化性能。

0