2017-02-06 69 views
0

我必须在两个具有相同主题和配置的不同数据中心(DC)中设置两个kafka群集。原因在于两个数据中心之间的连接性很差,我们无法创建全球数据中心。在同步中保留两个kafka群集的最佳方法

我们正在让制作人和消费者发布并标注每个区议会的主题。

问题是我需要保持两个群集同步。 可以这样说:所有消息都写入第一个DC应该最终被复制到第二个,并且在其他地方。

我正在评估kafka MirrorMaker工具,它通过消耗第一条消息并将消息传递给第二条消息来创建镜像。但是也需要将数据从第二个复制到第一个,因为写入数据在两个群集中都是允许的。

我不认为卡夫卡MirrorMaker工具适合我们的情况。 是否有任何建议?

在此先感谢。

+0

请参阅https://www.confluent.io/blog/enterprise-streaming-multi-datacenter-replication-apache-kafka/这可能是一个帮助。 – amethystic

+0

感谢@amethystic您的建议,但它不是真的我们的情况。 我的情况是,我们有一个应用程序在两个不同的DC中运行,并由两个Kafka集群支持。两者都在活动模式(不是主从模式)意味着如果一个DC中的实例消耗的消息将被复制到另一个DC,但不会被同一实例类型处理。你有什么想法吗?我遇到问题,我们如何识别在一个区域内发生的信息,而不会在另一个区域内处理。 – Joey

回答

2

根据您的具体要求,您可以将MirrorMaker用于您的用例。

一种选择是只有两个单独的主题,我们称它们为群集1上的topic1和群集2上的topic2。所有生成的线程写入“本地”主题,然后使用mirrormaker将此主题复制到远程簇。

对于您的消费者,您只需订阅任何与您最接近的群集的两个主题,这样您将获得写在任一群集上的所有记录。 我已经创建了一个例证是希望帮助:

enter image description here

或者,你可以在两个群集创建聚集主题和使用MirrorMaker数据复制到这个话题,这将让你有一个主题中的所有数据供消费。 这样您就可以在同一个群集上复制数据,但您可以通过降低输入主题上的保留设置来处理此问题。 再次,希望下面的图片有助于解释我的想法: enter image description here 为了实现此目的,您需要配置MirrorMaker以将主题复制到具有不同名称的主题中,这不是标准的事情如果你想进一步调查这个选项,我已经写了一个小的blog post如何做到这一点。

+0

谢谢@sönke-liebau您的阐述性解释。它在两个DC之间复制时遇到了问题。 但是,我们正在部署在多个地区的应用程序。我怎么能知道一个由DC1中的实例处理的消息在DC2中将不会被处理为相同的实例类型,假设所有的服务都是无状态的。 非常感谢您的帮助。 – Joey

+0

Hi @Van,为了确保我正确理解你,你想要做的是处理所有消息(保留上面的示例 - “Sales_All”主题)在两个DC中分布,同时确保没有消息被处理两次? –

+0

是的,这是我的意图 – Joey

相关问题