【发布时间】:2020-01-10 11:25:32
【问题描述】:
我有一个部署,我们使用 kafka 从服务发送消息。但是我们需要在所有区域都拥有 Kafka 大师。因此,一旦消息被推送到 1 个数据中心,就应该在其他数据中心同步。当它再次在其他数据中心完成时,它应该被同步回来。 Mirror Maker 可以提供从 1 到其他的同步,但是如何实现双向同步呢?
【问题讨论】:
标签: apache-kafka confluent-platform
我有一个部署,我们使用 kafka 从服务发送消息。但是我们需要在所有区域都拥有 Kafka 大师。因此,一旦消息被推送到 1 个数据中心,就应该在其他数据中心同步。当它再次在其他数据中心完成时,它应该被同步回来。 Mirror Maker 可以提供从 1 到其他的同步,但是如何实现双向同步呢?
【问题讨论】:
标签: apache-kafka confluent-platform
Kafka 中不提供 Master-Master 类型的复制,Kafka MirrorMaker 只能在一个方向进行镜像。
为什么?
Kafka MirrorMaker 基本上是生产者和消费者将事件从一个 DC 传输到另一个 DC 的组合,在此过程中,镜像主题的偏移量将与源集群中的偏移量不同。现在,如果我们想要双向,则必须跟踪一端产生的消息,如果不对所有消费者和生产者进行太多调整,这很难(不值得)。
无法在 Kafka 中运行 make mirrormaker 来进行 master-master 类型的复制,它只会以循环结束。
如果您想满足您的要求,您可能必须保留数据中心的特定主题并将它们聚合到一个主主题中。
假设您想从 DC1 和 DC2 向 topicA 生成消息。
在 DC1 中有 topicA-DC1,在 DC2 中有 topicA-DC2。并且在 DC1 和 DC2 中都有主主题 topicA。
您的 mirromaker 应该拥有来自 topicA-DC1 和 topicA-DC2 的聚合消息,以在两个数据中心中主控主题 topicA。
【讨论】:
我怀疑 MirrorMaker 是单向的原因是为了避免将同一事件从站点 A 读取到站点 B 再从 B 同步回 A 的“循环”。
如果您查看this blog post(特别是“层和聚合”),一个解决方案是拥有“本地”和“聚合”主题,您可以使用 MM 从本地主题读取远程聚合主题
【讨论】: