我有两个不同的kafka集群位于不同的数据中心 - DC1和DC2。如何组织两个DC之间的kafka生产者故障转移?如果主要kafka群集(DC1)变得不可用,我希望生产者切换到故障转移kafka群集(DC2)并继续发布到它?一旦可用,生产者也应该能够切换回主群集。任何好的模式,现有的库,方法,代码示例?
答案 0 :(得分:1)
您的制作人发布的Kafka主题的每个分区都有一个单独的领导者,通常分布在群集中的多个代理中,因此生产者可以同时连接到许多“主要”代理。如果其中任何一个失败,则另一个同步副本(ISR)将被选为领导者并自动接管。您无需在客户端应用程序中执行任何操作即可重新连接到新的领导者,重试任何失败的请求,然后继续。
如果这是针对多数据中心(MDC)故障转移的话,那么事情会变得更加复杂,具体取决于客户端应用程序是否死亡,或者它们是否继续运行并且仅需要其群集连接来进行故障转移。多个Kafka集群不会保留偏移量,因此生产者更简单时,消费者需要在故障转移时调用GetOffsetsForTimes()。
要详细了解MDC故障转移模式和最佳实践,请参阅此处的MDC白皮书:https://www.confluent.io/white-paper/disaster-recovery-for-multi-datacenter-apache-kafka-deployments/
由于您只询问了生产者,您的应用程序可以检测主群集是否已关闭(比如是否进行了一定次数的重试),然后它可以从次要群集连接到另一个代理列表,而不是尝试重新连接。或者,您可以将代理列表主机的DNS名称重定向为指向辅助群集。