Kafka 主题分布原理、主题迁移、跨集群复制及配置修改

Kafka 主题分布原理、主题迁移、跨集群复制及配置修改 笔记,按照逻辑结构全面梳理,分为四大部分,适合做为学习文档或运维手册使用。


✅ Kafka 主题分布与管理全解析

涵盖:主题分布原理|分区副本迁移|跨集群复制|配置动态修改


一、Kafka 主题分布原理

Kafka 以主题(Topic)为逻辑单位组织数据,通过 分区(Partition)副本(Replica) 实现高并发读写、容错和扩展。

1. 核心组件关系

概念说明
Topic主题,Kafka 的逻辑数据通道,生产者按主题发送数据,消费者按主题读取。
Partition每个主题包含多个分区,每个分区是一个有序且可追加的日志文件。
Replica每个分区可以配置多个副本,存放在不同的 Broker 上。
Leader每个分区的主副本,负责读写请求。
Follower跟随者副本,从 Leader 同步数据,用于高可用和故障转移。

2. 分区与副本的分布策略

  • 默认分布策略:Kafka 尽可能将副本均匀分配到不同的 Broker 上。
  • Rack 感知策略:配置 broker.rack,Kafka 避免将多个副本分配到同一机架上,提高容灾能力。

3. 示例:分区副本分布

假设集群有 3 个 Broker:B0、B1、B2
创建主题 orders,配置如下:

  • 分区数:3
  • 副本因子:2

可能的分布:

分区LeaderReplica 列表
P0B0B0, B1
P1B1B1, B2
P2B2B2, B0

二、Kafka 主题迁移(同集群内重分配)

Kafka 支持在不影响业务的前提下重新分配主题分区副本位置,常见场景:

  • 增加新 Broker 后希望平衡负载
  • 某 Broker 故障或退役
  • 手动优化数据分布

1. 工具使用:kafka-reassign-partitions.sh

Step 1️⃣:准备要迁移的主题 JSON
{
  "topics": [{"topic": "orders"}],
  "version": 1
}

保存为 topics-to-move.json

Step 2️⃣:生成新的分区副本方案
bin/kafka-reassign-partitions.sh \
  --bootstrap-server localhost:9092 \
  --topics-to-move-json-file topics-to-move.json \
  --broker-list "0,1,2,3" \
  --generate > reassign_plan.json
Step 3️⃣:执行迁移任务
bin/kafka-reassign-partitions.sh \
  --bootstrap-server localhost:9092 \
  --reassign-json-file reassign_plan.json \
  --execute
Step 4️⃣:验证迁移完成状态
bin/kafka-reassign-partitions.sh \
  --bootstrap-server localhost:9092 \
  --reassign-json-file reassign_plan.json \
  --verify

2. 注意事项

  • 分区迁移期间会触发数据复制,建议在业务低峰执行。
  • 可结合 Kafka 的监控系统(如 Prometheus + Grafana)查看迁移进度。

三、Kafka 跨集群主题复制

跨集群复制用于异地容灾、数据同步、云上云下混合部署,主流方案如下:

1. MirrorMaker 2(官方推荐)

特性:
  • 基于 Kafka Connect 架构
  • 支持 topic 白名单、黑名单过滤
  • 支持自动恢复 leader 和消费位置
启动示例:

准备配置文件 mm2.properties

clusters = A, B

A.bootstrap.servers=source-cluster:9092
B.bootstrap.servers=target-cluster:9092

tasks.max=1
topics = orders

启动命令:

bin/connect-mirror-maker.sh mm2.properties

2. Kafka Connect + Source/Sink Connector

可组合使用 Kafka Connector 实现以下链路:

  • Kafka Source Connector(读源集群)
  • Kafka Sink Connector(写目标集群)

适合与 ETL、数据清洗任务结合使用。


四、Kafka 主题配置修改

Kafka 支持动态调整主题的元数据和运行参数,常见包括:

1. 修改分区数(只能增加)

bin/kafka-topics.sh \
  --bootstrap-server localhost:9092 \
  --topic orders \
  --partitions 6 \
  --alter

📌 注意:

  • Kafka 不支持减少分区数
  • 新增分区无初始数据,分配策略可通过 --assignments 自定义

2. 修改副本因子(通过副本迁移)

Kafka 不支持通过单条命令直接修改副本数,应使用重分配方案:

{
  "partitions": [
    {"topic": "orders", "partition": 0, "replicas": [0,1,2]},
    {"topic": "orders", "partition": 1, "replicas": [1,2,3]}
  ],
  "version": 1
}

然后执行:

bin/kafka-reassign-partitions.sh \
  --bootstrap-server localhost:9092 \
  --reassign-json-file increase_replicas.json \
  --execute

3. 修改主题配置参数

# 设置压缩策略为 compact
bin/kafka-topics.sh --bootstrap-server localhost:9092 \
  --topic orders --alter \
  --config cleanup.policy=compact

# 设置消息保留时间为 7 天
bin/kafka-topics.sh --bootstrap-server localhost:9092 \
  --topic orders --alter \
  --config retention.ms=604800000
常用可修改参数:
参数名说明
retention.ms消息最大保留时间(毫秒)
cleanup.policy清理策略(deletecompact
segment.bytes日志段大小
min.insync.replicas最小同步副本数

五、操作建议与最佳实践

操作类别建议与说明
副本迁移避免高峰时段执行,防止占满带宽与 I/O
分区增加增加后需调整消费者组策略,避免数据倾斜
跨集群复制事先测试链路稳定性,监控延迟与数据一致性
参数修改配置生效范围为当前及未来写入数据,不会影响历史记录
自动化与可视化推荐使用 Kafka Manager、KRaft UI、Prometheus、Control Center 监控与操作
回滚与备份每次迁移或参数调整前保留原始配置 JSON,便于异常时快速回滚

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值