我有一个部署,我们使用 kafka 从服务发送消息。但是我们需要在所有区域都拥有 Kafka 大师。因此,一旦消息被推送到 1 个数据中心,就应该在其他数据中心同步。当它再次在其他数据中心完成时,它应该被同步回来。Mirror Maker 可以提供从 1 到其他的同步,但我如何实现双向同步?
2 回答
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。
如果您查看此博客文章(特别是“层和聚合”),一个解决方案是拥有“本地”和“聚合”主题,您可以使用 MM 从本地主题读取远程聚合主题