linux

Kafka高可用配置怎么搭建

小樊
45
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
看了该问题的人还看了