我在不同的DC上设置了2个kafka v0.10.1.0集群,并计划使用mirror-maker来保持一个作为源,另一个作为目标,我不确定如何在我的源代码时确保高可用性/主群集关闭(源kafka群集关闭的完整DC)我是否需要让我的应用程序切换到目标kafka生成消息以及源kafka返回时会发生什么?如何将其与可能丢失的消息同步恢复?
谢谢
从阅读你的问题我不认为,MirrorMaker将是一个适合你的需求的工具,我担心.
基本上,MirrorMaker只是一个消费者和生产者联系在一起,将消息从一个集群复制到另一个集群.它不是一个将两个Kafka集群绑定在一个主动 - 主动配置中的工具,这听起来很像你正在寻找的东西.
但要按顺序回答您的问题:
我是否需要切换应用程序以向目标kafka发送消息?
是的,目前没有故障转移功能,您需要在生产者中实现逻辑,以便在x个失败的消息之后尝试目标集群,或者在y分钟或类似的情况下没有发送消息.
当源kafka回来时会发生什么?
几乎没有你自己没有实现的东西:) MirrorMaker将开始再次将数据从源集群复制到目标集群,但由于您的生产者现在切换到目标集群,因此源集群没有获取任何数据,因此他们会闲着 除非您定期检查源是否重新联机并让它们切换回来,否则您的生产者将继续生产到目标群集中.
如何将其与可能丢失的消息同步?
当您的源群集重新联机并假设上面提到的所有内容都已发生时,您有效地切换了您的群集,具体取决于您是否希望将源作为主群集写入或者很乐意在发生这种情况时反转角色,您有两个我可以提出的选项:
反转mirrormaker的方向并手动设置使用者组的偏移量,以便它在源群集死亡的位置拾取
停止生成新数据一段时间,将丢失的数据恢复到源群集,切换回生产者并重新启动所有内容.
这两个选项都要求你弄清楚,手动群集上手动丢失了哪些数据,我认为没有办法解决这个问题.
最重要的是,这对于MirrorMaker来说并不是一件容易的事情,如果资源消失,你是否真的想要将生产者转移到目标集群可能是值得的.
您还可以查看Confluent的Replicator,它可能更适合您的需求并且是他们公司产品的一部分.信息有点稀疏,让我知道你是否对它感兴趣我可以向能够告诉你更多相关信息的人介绍(或者当然只是发送邮件给Confluent,这将会找到合适的人选以及).