我们有两个不同的数据中心dc1和dc2。dc1为有源,dc2为无源。现在我们已经在dc1中安装了apachekafka,并创建了主题、编写了生产者和消费者,并且能够将数据从源正确地推送到接收器。现在我们有以下要求。
我们需要保持dc2的Flume也与dc1同步。这意味着生产者推送到主题a的数据需要被两个消费者消费。已经工作的第一个耗电元件来自dc1本身,另一个耗电元件必须来自dc2。
我们想到了这样的解决办法
在dc2中创建另一个用户组,该用户组侦听dc1中的同一主题。我们不确定它将如何工作,以及如何让dc2消费者群体收听dc1主题。正确的处理方法是什么?明天dc2可能会变为主动,dc1可能会变为被动,以处理dr。我们阅读了mirrormaker工具,但不确定如何使用它,这是解决问题陈述的正确解决方案。
1条答案
按热度按时间lhcgjxsq1#
我想关键问题是
dc2是完整的灾难恢复解决方案吗?(我的意思是,如果dc1Kafka失败,dc2是否应该拥有继续运行所需的所有数据和资源?
选项1(preferred):如果答案是肯定的,我将为dc1和dc2设置两个不同的kafka集群。并使用mirrormaker工具将主题从dc1消费到dc2。
考虑到您在kafka中可能有包含“中间”数据的主题,如果您在两个dc中并行运行相同的进程,那么如果您在mirror maker中复制它们,则该主题中可能有重复的数据。
在恢复dc1的过程中要非常小心。可能最简单的方法是在dc2起主导作用时将dc1作为被动拷贝,然后使用mirrormaker将数据复制到dc1。
选项2(更复杂):如果答案是否定的,而且您非常有纪律/流程非常严格,并且定期/自动审核您的基础结构,然后您可以使用机架感知复制(设置broker.rack=dc1或dc2)设置kafka代理,集群将在第二个dc中向代理发送副本,但您在dc2中的kafka安装将完全不是“被动的”。
注意:您必须为每个主题设置至少两个副本(为了避免错误,请将default.replication.factor=[您拥有的不同DC的数量]放在kafka broker配置中-但请注意,这可以被覆盖)。
如果你有Kafka在不同的dc,我也会分配Kafka经纪人ID,反映每个经纪人“生活”的dc。例如,对于dc2,我将用数字“200”开始为代理编号,而对于dc1,代理应以“100”开始编号。