Обнаружение недоступности кластера Kafka (3 брокера) - PullRequest
0 голосов
/ 14 октября 2019

У меня есть кластер Apache Kafka с 3-мя брокерами, и я хотел бы определить, когда кластер больше не доступен, чтобы переключить клиентское соединение на второй реплицируемый кластер (как описано здесь: Как использовать из двухразные кластеры в Kafka? ).

Все темы в кластере имеют коэффициент репликации 3, поэтому все данные должны быть доступны в кластере, если один из узлов выходит из строя.

В этом случае кластер можно считать непригодным, если 2 брокера находятся в автономном режиме. Я использую пакет nuget Confluent.Kafka (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 брокера не работают?

Спасибо!

...