**Kafka** 跨区域数据中心之间的双向同步

**Kafka** Bi-directional sync between datacenter across regions

我有一个部署,我们使用 kafka 从服务发送消息。但是我们需要在所有地区都拥有 Kafka 大师。因此,一旦消息被推送到 1 个数据中心,就应该同步到其他数据中心。当它再次在其他数据中心完成时,它应该被同步回来。 Mirror Maker 可以提供从 1 到其他的同步,但是如何实现双向同步?

我怀疑 MirrorMaker 是单向的原因是为了避免 "loops" 同一事件从站点 A 读取到站点 B,然后从 B 同步回 A。

如果您查看 this blog post(特别是 "tiers and aggregation"),一个解决方案是使用 "local" 和 "aggregate" 主题,您可以在其中使用 MM 从本地主题中读取进入远程聚合主题

Kafka不支持Master-Master复制,Kafka MirrorMaker只能单向镜像。

为什么?
Kafka MirrorMaker 基本上是生产者和消费者将事件从一个 DC 传输到另一个 DC 的组合,在此过程中,镜像主题的偏移量将与源集群中的不同。现在,如果我们想要双向,就必须跟踪一端产生的消息,如果不对所有消费者和生产者进行太多调整,这很难(不值得)。 没有办法 运行 让 mirrormaker 在 Kafka 中做主-主类型的复制,它只会以循环结束。

如果您想实现您的要求,您可能必须保留数据中心特定主题并将它们聚合到一个主主题。

假设您要从 DC1 和 DC2 向主题 A 生成消息。

  • 在 DC1 中有 topicA-DC1,在 DC2 中有 topicA-DC2。并且在 DC1 和 DC2 中都有主主题 topicA。

  • 您的 mirromaker 应该聚合来自 topicA-DC1 和 topicA-DC2 的消息,以在两个数据中心掌握主题 topicA。