正确的架构来消费来自apache kafka中另一个数据中心的消息

时间:2016-11-11 08:33:23

标签: apache-kafka

我们有2个不同的数据中心DC1和DC2。 DC1处于活动状态,DC2处于被动状态。 现在我们已经在DC1中安装了Apache Kafka并创建了主题,编写了生产者和消费者,并且能够正确地将数据从源推送到接收器。 现在我们有以下要求。

  • 我们需要保持DC2的接收器与DC1同步。这意味着生产者推送到主题A的数据需要由两个消费者使用。已经工作的第一个消费者来自DC1本身,另一个消费者必须来自DC2。

我们考虑过想出这样的解决方案

在DC2中创建另一个用户组,用于侦听DC1中的同一主题。 我们不确定它是如何工作的,以及我们如何让DC2消费者群体听取DC1主题。 处理它的正确方法是什么,明天可能DC2可以变为活动状态,DC1可以被动地处理DR。 我们在MirrorMaker工具上阅读但不确定如何使用它,这是解决我们问题陈述的正确解决方案。

1 个答案:

答案 0 :(得分:0)

我想这里的关键问题是

是DC2完整的灾难恢复解决方案吗?( 我的意思是,如果DC1 kafka失败,DC2是否应该拥有继续运行所需的所有数据和资源?)

选项1(预先强制):如果答案是肯定,我会为DC1和DC2设置两个不同的kafka群集。并使用MirrorMaker工具将DC1中的主题消耗为DC2。

考虑到您可能在kafka中有“中间”数据的主题,如果您在两个DC中并行运行相同的进程,那么如果您复制,则可以在该主题中复制数据他们在Mirror Maker。

要非常小心恢复DC1的过程。可能最简单的方法是在DC2取得领先时将DC1作为被动副本,然后使用MirrorMaker将数据复制到DC1。

选项2(更复杂):如果答案是否定的,并且您非常严格/有非常严格的流程并且您定期/自动审核您的基础设施那么您可以设置具有机架感知功能的kafka经纪人复制(设置broker.rack = DC1或DC2)并且群集将向第二个DC中的代理发送副本< - 但是在DC2中的kafka安装根本不会是“被动的”。

请注意:您必须为每个主题设置至少两个副本(以避免错误将default.replication.factor = [您拥有的不同DC的数量]放在您的kafka代理配置中 - 但要注意这可以被覆盖)。

如果您在不同的DC中有kafka,我还会分配Kafka经纪人ID,以反映每个经纪人“生活”的DC。例如,对于DC2,我会开始编号为“200”的经纪人,而DC1经纪人应该以“100”开头。