Kafka 跨集群同步 MirrorMaker - tenji/ks GitHub Wiki

Kafka 跨集群同步

MirrorMaker 是 Kafka 附带的一个用于在 Kafka 集群之间制作镜像数据的工具。该工具从源集群中消费并生产到目标群集。这种镜像的常见用例是在另一个数据中心提供副本。

注意事项

  1. whitelist 和 blacklist 支持正则表达式。比如需要包含两个 topic 可以这样写--whitelist 'A|B'或者--whitelist 'A,B',如果想迁移所有 topic 可以这样写--whitelist '*'
  2. 注意在迁移之前创建好相关 topic 以及规划好 partition 数量,不要依赖 Producer 自动创建 Topic,特别是对于源集群和目标集群 Topic 的分区数量要保持一致的同步场景;
  3. 老版本和新版本迁移主要考虑 Consumer 和 Producer 的兼容性;
  4. 如果允许的话,建议将 MirrorMaker 部署在目标集群内,这是因为如果一旦发生网络故障,消费者与源集群断开连接比生产者与目标集群断开连接要安全。如果消费者断开连接,那么只是当前读取不到数据,但是数据仍然在源集群内,并不会丢失;而生产者断开连接,MirrorMaker 便生产不了数据,如果 MirrorMaker 本身处理不当,可能会丢失数据。
  5. 开始之前配置好限流,防止影响原来集群的正常工作。
  6. MirrorMaker 的本质是启动 Consumer 从源集群消费数据然后写入目标集群,因此在同步的时候,哪怕源集群和目标集群 Topic 的分区数量一致,同步之后,分区的数据也不是一致的,如果需要同步数据后分区的数据一致,那么 MirrorMaker 无法满足。

进度监控

检测 MirrorMaker 提交到源集群的位移。我们可以使用 kafka-consumer-groups 来检测分区的最新位移以及 MirrorMaker 提交的位移,通过计算差值得到落后间隔。

bin/kafka-consumer-groups.sh --bootstrap-server {Broker IP}:{Broker Port} --command-config consumer.properties --group mirrormaker --describe

启动

bin/kafka-mirror-maker.sh --consumer.config consumer.properties --producer.config producer.properties --whitelist "my-topic1,my-topic2"

参数说明:

  • consumer.config # 消费者配置,详情参考 kafka consumer 配置
  • producer.config # 生产者配置,详情参考 kafka producer 配置
  • whitelist # 需要 mirror 的 topic,支持 Java 正则表达式,例如:'ABTestMsg,AppColdStartMsg’
  • blacklist # 不需要拷贝的 topic,支持 Java 正则表达式
  • num.producers # producer 数量,默认为 1,该参数在 0.9 版本之后已删除
  • num.streams # consumer 数量,默认为 1
  • queue.size # consumer 和 producer 之间缓存的 queue size,默认 10000

参考链接