kafka一主两从环境怎样搭建

搭建一个“一主两从”的 Kafka 集群,核心是部署 3个 Broker 节点。这能让你的系统获得高可用性,确保即使有一台机器宕机,服务也能持续运行

目前搭建 Kafka 集群主要有两种方式,我建议你优先考虑更现代的 KRaft 模式

模式选择:KRaft vs. ZooKeeper

  • KRaft 模式(Kafka 3.3.1+ 推荐):这是 Kafka 自 3.3.1 版本后内置的、生产可用的新集群管理方式。它最大的优势是去掉了对 ZooKeeper 的依赖,将元数据管理集成在 Kafka 内部,让架构更简单,也降低了运维的复杂度

  • ZooKeeper 模式(传统方式):这是旧版 Kafka 的经典方案,需要额外搭建一个 3 节点的 ZooKeeper 集群来管理元数据。如果你的环境必须使用 Kafka 2.x 版本,可以选择此方案


准备工作(两种模式通用)

在开始前,请确保完成以下步骤:

  1. 准备三台服务器:规划好三台机器的 IP 和主机名(例如 kafka-1kafka-2kafka-3),并确保它们之间网络互通

  2. 安装 Java:在所有节点上安装 Java 8 或更高版本

  3. 下载 Kafka:从官网下载 Kafka 的二进制包(例如 kafka_2.13-3.4.0.tgz)并解压到 /opt/kafka 目录

  4. 配置主机名和防火墙:配置好各节点的主机名解析(/etc/hosts),并开放 Kafka 默认端口 9092(以及 KRaft 模式下的 9093 端口)


方案一:使用 KRaft 模式部署(推荐)

1. 生成集群唯一 ID

任意一台节点上执行以下命令,生成一个集群 ID,并记下来

bash
/opt/kafka/bin/kafka-storage.sh random-uuid
# 示例输出:2nZvZ4y5Q1qP4pQ2nZvZ4A

2. 配置 server.properties

编辑每台节点的配置文件 /opt/kafka/config/kraft/server.properties

所有节点共用的配置

properties
# 角色设定为 broker 和 controller(合设模式)
process.roles=broker,controller                          [reference:17]
# 所有节点的投票者列表,格式: node.id@hostname:port
controller.quorum.voters=1@kafka-1:9093,2@kafka-2:9093,3@kafka-3:9093 [reference:18][reference:19]
# 监听端口
listeners=PLAINTEXT://:9092,CONTROLLER://:9093           [reference:20]
# 日志数据目录
log.dirs=/var/lib/kafka/data                             [reference:21]
# 默认主题分区数和副本数,建议都设为3
num.partitions=3                                         [reference:22]
default.replication.factor=3                             [reference:23]
# 最少同步副本数,保证数据不丢
min.insync.replicas=2                                    [reference:24][reference:25]

各节点独有的配置(请根据节点修改):

properties
# kafka-1 节点
node.id=1                                               [reference:26]
advertised.listeners=PLAINTEXT://<kafka-1的IP>:9092     [reference:27][reference:28]

# kafka-2 节点
node.id=2
advertised.listeners=PLAINTEXT://<kafka-2的IP>:9092

# kafka-3 节点
node.id=3
advertised.listeners=PLAINTEXT://<kafka-3的IP>:9092

3. 格式化存储目录

每一台节点上,使用第一步生成的集群 ID 来格式化日志目录

bash
/opt/kafka/bin/kafka-storage.sh format -t <你的集群ID> -c /opt/kafka/config/kraft/server.properties

4. 启动 Kafka 服务

每一台节点上,后台启动 Kafka

bash
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/kraft/server.properties

方案二:使用 ZooKeeper 模式部署(传统)

1. 搭建 ZooKeeper 集群

首先,你需要在这三台机器上搭建一个 3 节点的 ZooKeeper 集群

  • 配置 zoo.cfg,指定数据目录和集群节点信息

  • 在每个节点的数据目录下创建 myid 文件,内容分别为 123

  • 启动所有节点的 ZooKeeper 服务

2. 配置 server.properties

编辑每台节点的配置文件 /opt/kafka/config/server.properties

各节点独有的配置

properties
# kafka-1 节点
broker.id=1                                             [reference:38][reference:39]
listeners=PLAINTEXT://:9092                             [reference:40]
advertised.listeners=PLAINTEXT://<kafka-1的IP>:9092

# kafka-2 节点
broker.id=2
advertised.listeners=PLAINTEXT://<kafka-2的IP>:9092

# kafka-3 节点
broker.id=3
advertised.listeners=PLAINTEXT://<kafka-3的IP>:9092

所有节点共用的配置

properties
# 数据存储目录
log.dirs=/var/lib/kafka/data                             [reference:41]
# 指向你的 ZooKeeper 集群地址
zookeeper.connect=kafka-1:2181,kafka-2:2181,kafka-3:2181 [reference:42][reference:43]

3. 分发配置并启动

将配置好的 Kafka 目录复制到另外两台机器,然后在每一台节点上启动 Kafka 服务

bash
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties

验证集群

集群启动后,可以通过以下命令验证其状态:

  1. 查看主题列表(KRaft 和 ZK 模式命令略有不同):

    • KRaft 模式/opt/kafka/bin/kafka-topics.sh --list --bootstrap-server kafka-1:9092

    • ZooKeeper 模式/opt/kafka/bin/kafka-topics.sh --list --zookeeper kafka-1:2181

  2. 创建测试主题(验证集群功能):

    bash
    /opt/kafka/bin/kafka-topics.sh --create --topic test-topic --bootstrap-server kafka-1:9092 --partitions 3 --replication-factor 3

    注意--replication-factor 3 表示每个分区有3个副本,即“一主两从”

  3. 查看主题详情

    bash
    /opt/kafka/bin/kafka-topics.sh --describe --topic test-topic --bootstrap-server kafka-1:9092

    在输出中,你会看到每个分区的 Leader 和 Replicas 信息,从而确认集群已正确配置

 
 
 
 
 

posted on 2026-09-04 09:53  ~码铃薯~  阅读(3)  评论(0)    收藏  举报

导航