【问题标题】:Mirror Maker 2 topic mirroring scenarios for ProducersMirror Maker 2 生产者主题镜像场景
【发布时间】:2020-04-29 18:26:41
【问题描述】:

我对场景中的故障转移有疑问。 假设我们有两个集群 K1 和 K2,并为 TOPIC1 配置了 MM2 复制(最初创建于 K1)。

我们配置了主动-主动复制:

K1->K2.enabled = true
K2->K1.enabled = true
K1->K2.topics = .*
K2->K1.topics = .*

在启动镜像制造商 2 时,我看到主题从集群 K1 复制到 K2,命名格式为 K1.topic_name_here,反之亦然,集群主题从 K2 复制到 K1

我看到K2中没有创建主题TOPIC1,只创建了K1.TOPIC1。我看到这种情况适用于消费者,因为一开始消费者从集群K1 消费TOPIC1。当集群K1 停止服务时,会发生故障转移。消费者从K2开始消费K1.TOPIC1

我的问题如下:

  1. 对于生产者,他们不会在集群 K2 中生产主题K1.TOPIC1,我的问题是生产者如何生产数据。我是否需要在集群 K2 中手动创建主题 TOPIC1,该主题将用于在发生故障转移时生成消息。
  2. 如果上述情况属实,我该如何移回我的主集群 K1。因为,现在集群 K2 中的主题 TOPIC1 已经脱离了 K1 中的主题 TOPIC。在这种情况下我们如何同步消息?

【问题讨论】:

    标签: apache-kafka apache-kafka-mirrormaker


    【解决方案1】:

    解决这个问题的一种方法是引入“本地”和“远程”主题的概念。

    在集群中,“本地”主题是您在此集群中创建的主题。 “远程”主题是由 MirrorMaker2 创建的主题,通常以集群别名为前缀(或后缀),例如 K1.TOPIC1

    然后为了防止“本地”和“远程”主题的分歧,让您的生产者始终生产“本地”主题,并让消费者订阅“本地”和“远程”主题。

    在你的例子中:

    • 生产者始终使用TOPIC1,无论他们连接到K1 还是K2
    • 消费者订阅TOPIC1K1.TOPIC1K2.TOPIC1(也可以使用模式,比如.*TOPIC1

    如果你想保持严格的排序,在切换集群时,你可以让你的消费者先耗尽远程主题,然后再从本地主题消费。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多