从 Confluent Replicator 迁移到 Apache Mirror Maker 2.0 时保持相同的偏移量

Maintaining same offset while migrating from Confluent Replicator to Apache Mirror Maker 2.0

我们目前正在尝试将 Confluent 复制器迁移到 Apache Open Source Mirror Maker v2.0。我们面临一个问题,即当镜像制造商在同一主题上启动时,已经被复制器复制的消息再次被复制。这不应该发生,因为消息在目标集群中被复制。以下是更多详情:

  1. RCA:复制器分配一个消费者组来复制消息。该消费者组维护源主题的偏移量。但是我们无法将相同的消费者组分配给镜像制造商 2 中的消费者配置。
  2. Mirror Maker 1.0:可以在 consumer.properties 文件中分配同一个消费者组,并在复制器停止后立即选择消息。
  3. 尝试 运行 并在 mirror maker 2.0 的所有可用选项中配置 source.cluster.consumer.group.id(在集群模式、独立连接和分布式连接模式下),但 mirror maker 2.0 正在分配消费者组 ID复制消息时为 null。

如果有人做过同样的事情并试图与镜像制造商 2.0 保持相同的偏移量,请提供任何指示。

我们有一个粗略的方法来解决这个问题。以下是高级步骤:

  • 阅读 Replicator 内部主题中关于存储偏移量的消息。 [连接偏移量]
  • 该主题存储在 key:value 对中复制的所有主题的偏移量。例如

Key : ["replicator-group",{"topic":"TEST","partition":0}]
Value: {"offset":24}

  • 对于每个主题和分区,每当复制一条新消息时,都会向 connect-offsets 主题生成一条具有相同密钥但增加偏移量的新消息。
  • 将此消息的密钥转换为Mirror Maker 2格式并在MirrorMaker2的内部主题中生成。 [您可以更改 mirrormaker2-connect-distributed.properties 文件中的内部主题] mirror maker内部话题格式为:

Key: ["mirrormaker-group",{"cluster":"","partition":0,"topic":"TEST"}]
Value: {"offset":24}

  • 消息发布后,一旦mirror maker重新启动,它会读取内部topic,获取需要复制消息的topic的最新偏移量,这样我们就可以确保不会复制重复的消息.