Что происходит в Apache Kafka, если все брокеры становятся недоступны?

«Что происходит в Apache Kafka, если все брокеры становятся недоступны?» — вопрос из категории Брокеры сообщений, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Полный отказ всех брокеров 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 узлов).