Kafka群集不可用性检测(3个代理)

时间:2019-10-14 09:23:14

标签: c# apache-kafka replication kafka-producer-api confluent-kafka

我有一个带有3个代理的Apache Kafka群集,我想检测一下该群集何时不再可用,以便将客户端连接切换到另一个复制的群集(如此处所述:How to consume from two different clusters in Kafka?)。 / p>

群集中的所有主题的复制因子均为3,因此,如果单个节点发生故障,则群集中的所有数据均应可用。

在这种情况下,如果2个代理处于脱机状态,则集群可以被视为不可用。 我正在使用Confluent.Kafka nuget包(https://www.nuget.org/packages/Confluent.Kafka/)创建一个.NET客户端。但是,同时使用Producer和Consumer客户端功能,只能检测所有代理何时关闭(通过检查Local_AllBrokersDown错误代码)。

一种解决方案是让生产者连续产生主题中的消息,以“监听”集群。使用3的复制因子,我将特定主题的min.insync.replicas设置为2。根据规范,如果生产者使用Ack = All,则在尝试发布消息时应该收到NotEnoughReplicas错误代码。

实际上,当2个代理脱机时,我的客户端应用程序仅连接到剩下的一个不能单独创建集群的代理。如果我在其余的代理上使用KafkaManager,它仍会声明已连接到另一个代理,并且该主题有2个in-sync-replicas。因此,.NET客户端不会收到NotEnoughReplicas错误代码(仅来自其余在线代理的Local_TimedOut错误代码)。可以通过这种方式设计以避免脑裂...

任何人都对如何监视这样一个集群的可用性有个想法-在这种特定情况下,当2个代理关闭时?

谢谢!

0 个答案:

没有答案