1

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

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

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

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

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

我的问题如下:

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

1 回答 1

2

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

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

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

在您的示例中:

  • 生产者总是使用TOPIC1它们是否连接到K1K2
  • 消费者订阅TOPIC1, K1.TOPIC1, K2.TOPIC1(你也可以使用模式,比如.*TOPIC1

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

于 2020-05-01T08:50:48.023 回答