Ответ
Полный отказ всех брокеров Kafka приводит к полной остановке обработки сообщений. Это катастрофический сценарий, так как брокеры хранят все данные и координируют работу кластера.
Последствия:
- Для продюсеров: Отправка сообщений становится невозможной. Будут возникать ошибки
LeaderNotAvailableилиNotControllerException. В зависимости от конфигурацииacks(особенно приacks=all) неподтверждённые сообщения будут потеряны. - Для консьюмеров: Чтение данных прекращается. Оффсеты не обновляются, но после восстановления кластера чтение продолжится с последнего закоммиченного оффсета.
- Для кластера: Управляющий контроллер (избираемый через ZooKeeper) становится недоступен. Восстановление возможно только после возврата в строй хотя бы части брокеров, при условии работоспособности ZooKeeper.
Пример обработки ошибки в продюсере (Java):
try {
producer.send(new ProducerRecord<>("my-topic", "key", "value")).get();
} catch (ExecutionException e) {
if (e.getCause() instanceof NotControllerException) {
// Логика повторной попытки (retry) или аварийного переключения
logger.error("Контроллер кластера недоступен", e);
}
}
Рекомендации для отказоустойчивости:
- Используйте минимум 3 брокера в продакшн-окружении.
- Настройте
unclean.leader.election.enable=falseдля предотвращения потери данных при выборах лидера. - Внимательно мониторьте статус ISR (In-Sync Replicas) для каждого топика.
- Разверните отказоустойчивый ансамбль ZooKeeper (обычно 3 или 5 узлов).