💻 Kafka运维实战 (17篇)

要将 Kafka 分区的副本数从 1 增加到 3,需要通过 kafka-reassign-partitions.sh 脚本手动指定新的副本分布(无法通过 --generate 自动增加副本数)。以下是具体实现步骤:

核心原理

Kafka 不允许直接通过命令修改副本数,需通过自定义重分配计划,在 JSON 文件中为每个分区指定 3 个副本(包含原副本),然后执行重分配。

实现步骤

步骤 1:创建自定义重分配计划 JSON 文件

创建 reassignment-plan.json,格式如下(以 perf-test-topic 为例):

{
  "version": 1,
  "partitions": [
    {
      "topic": "perf-test-topic",
      "partition": 0,
      "replicas": [3, 1, 2],
      "log_dirs": ["any", "any", "any"]
    },
    {
      "topic": "perf-test-topic",
      "partition": 1,
      "replicas": [2, 1, 3],
      "log_dirs": ["any", "any", "any"]
    },
    {
      "topic": "perf-test-topic",
      "partition": 2,
      "replicas": [3, 1, 2],
      "log_dirs": ["any", "any", "any"]
    },
    {
      "topic": "perf-test-topic",
      "partition": 3,
      "replicas": [1, 2, 3],
      "log_dirs": ["any", "any", "any"]
    },
    {
      "topic": "perf-test-topic",
      "partition": 4,
      "replicas": [1, 2, 3],
      "log_dirs": ["any", "any", "any"]
    },
    {
      "topic": "perf-test-topic",
      "partition": 5,
      "replicas": [2, 1, 3],
      "log_dirs": ["any", "any", "any"]
    }
  ]
}

配置说明

  • replicas 数组中,第一个元素为原副本(保持 leader 不变,减少迁移开销),后两个为新增副本的 broker ID。
  • 确保新增的 broker(如 1、2、3)均正常运行,且集群总 broker 数量 ≥ 3(否则无法分配 3 个副本)。
  • log_dirs 用于指定每个副本存放的日志目录,默认用 “any” 表示由 Kafka 自动分配。
步骤 2:执行重分配计划

运行以下命令执行副本数增加操作:

kafka-reassign-partitions.sh \
  --bootstrap-server 192.168.37.10:9092 \  # 替换为你的 broker 地址
  --reassignment-json-file reassignment-plan.json \
  --execute

在这里插入图片描述
执行过程

  • 脚本会启动副本复制,将数据从原副本同步到新增的 2 个副本。
  • 过程中主题可正常读写,不影响服务可用性。
步骤 3:检查重分配进度
kafka-reassign-partitions.sh \
  --bootstrap-server 192.168.37.10:9092 \
  --reassignment-json-file reassignment-plan.json \
  --verify

输出显示 Completed 表示成功。

在这里插入图片描述

步骤 4:确认副本数

使用 kafka-topics.sh 查看最终副本配置:

kafka-topics.sh \
  --bootstrap-server 192.168.37.10:9092 \
  --describe \
  --topic perf-test-topic

若输出中 ReplicationFactor: 3,则表示副本数已成功从 1 增加到 3。
在这里插入图片描述

注意事项

  1. ** broker 数量要求**:需保证集群中至少有 3 个可用 broker(否则无法分配 3 个副本)。
  2. 性能影响:副本同步会消耗网络和磁盘 IO,建议在低峰期执行。
  3. 副本分布均衡:新增副本应尽量分散在不同 broker 上,避免集中到某几个节点导致负载不均。
Logo

一站式 AI 云服务平台

更多推荐