具有高可用性的kafka Multi-Datacenter

时间:2017-02-24 22:13:55

标签: apache-kafka

我在不同的DC上设置了2个kafka v0.10.1.0集群,并计划使用mirror-maker来保持一个作为源,另一个作为目标,我不确定是怎么做的为了确保我的源/主群集关闭时的高可用性(源kafka群集关闭的完整DC)我是否需要让我的应用程序切换以生成到目标kafka的消息以及当源kafka返回时会发生什么?如何将其与可能丢失的消息同步恢复?

由于

1 个答案:

答案 0 :(得分:7)

从阅读你的问题我不认为,MirrorMaker将是一个适合你需要的工具,我担心。

基本上,MirrorMaker只是一个消费者和生产者联系在一起,将消息从一个集群复制到另一个集群。它不是一个将两个Kafka集群绑定在一个主动 - 主动配置中的工具,这听起来很像你正在寻找的。

但要按顺序回答你的问题:

  

我是否需要将应用程序切换为生成消息   目标卡夫卡?

是的,目前没有故障转移功能,您需要在生产者中实现逻辑,以便在x个失败的消息之后尝试目标集群,或者在y分钟内没有发送消息或类似的事件。

  

源kafka回来后会发生什么?

你自己没有实施任何东西:) MirrorMaker将再次开始将数据从源群集复制到目标群集,但由于您的生产者现在切换到目标群集,因此源群集不会获取任何数据,因此它们将一直闲置。 您的生产者将继续生产目标集群,除非您定期检查源是否重新联机并让他们切换回来。

  

如何将其与可能丢失的消息同步恢复?

当您的源群集重新联机并假设我上面提到的所有内容都已发生时,您可以有效地切换群集,具体取决于您是否希望将源作为主群集进行写入或者在发生这种情况时乐于转换角色你有两种选择,我可以从头脑中想出来:

  • 反转mirrormaker的方向并手动设置使用者组的偏移量,以便在源群集死亡的位置拾取
  • 停止生成新数据一段时间,将丢失的数据恢复到源群集,切换回生产者并重新启动所有内容。

这两个选项都要求你弄清楚手动群集上手动丢失了哪些数据,我认为没有办法解决这个问题。

最重要的是,这对MirrorMaker来说并不是一件容易的事情,如果源发生故障,你是否真的想要将生产者转移到目标集群可能值得考虑。

您还可以查看Confluent的Replicator,它可能更适合您的需求并且是他们公司产品的一部分。信息有点稀疏,让我知道你是否对它感兴趣我可以向能够告诉你更多相关信息的人介绍(或者当然只是发送邮件给Confluent,这将会找到合适的人选同样)。