Рекомендации по обработке исключения Timeout для Kafka Producer? - PullRequest
0 голосов
/ 20 февраля 2019

Я часто получаю исключения по таймауту по разным причинам у моего продюсера Kafka.В настоящее время я использую все значения по умолчанию для конфигурации производителя.

Я видел следующие исключения тайм-аута:

org.apache.kafka.common.errors.TimeoutException: не удалось обновить метаданныечерез 60000 мс.

org.apache.kafka.common.errors.TimeoutException: срок действия 1 записей для темы-1-0: 30001 мс прошел с момента последнего добавления

У меня есть следующие вопросы:

  1. Каковы основные причины возникновения этих исключений тайм-аута?

    1. Временная проблема сети
    2. Проблема с сервером?если да, то что за проблема с сервером?
  2. каковы общие рекомендации по обработке исключения Timeout?

    1. Установите конфигурацию 'retries' такчто API-интерфейс Kafka выполняет повторные попытки?
    2. Увеличить 'request.timeout.ms' или 'max.block.ms'?
    3. Перехватить исключительную ситуацию и повторить отправку сообщения прикладным уровнем, но это кажетсятрудно с асинхронной отправкой, поскольку сообщения будут отправляться не по порядку?
  3. Являются ли исключения по тайм-ауту повторяемыми исключениями и безопасно ли их повторять?

Я использую Kafka v2.1.0 и Java 11.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

«Каковы основные причины этих исключений по тайм-ауту?»

  1. Наиболее распространенная причина, которую я видел ранее, была связана с информацией о устаревших метаданных: один брокер вышел из строя и темаразделы на этом брокере были переданы другим брокерам.Однако информация метаданных темы не была обновлена ​​должным образом, и клиент все еще пытается связаться с отказавшим посредником, чтобы получить информацию метаданных или опубликовать сообщение.Это вызывает исключение тайм-аута.

  2. Проблемы с подключением к сети.Это можно легко диагностировать с помощью telnet broker_host borker_port

  3. Брокер перегружен.Это может произойти, если посредник перегружен или загружен слишком много тематических разделов.

Для обработки исключений тайм-аута общая практика:

  1. Исключить проблемы со стороны брокера.убедитесь, что тематические разделы полностью реплицированы, а посредники не перегружены

  2. Исправлены проблемы с разрешением имени хоста или сетевым подключением, если есть какие-либо

  3. Параметры настройки, такие как request.timeout.ms, delivery.timeout.ms и т. Д. Мой предыдущий опыт заключался в том, что в большинстве случаев значение по умолчанию работает нормально.

0 голосов
/ 20 февраля 2019

Значения конфигурации Kafka по умолчанию, как для производителей, так и для брокеров, достаточно консервативны, поэтому при обычных обстоятельствах вы не должны сталкиваться с какими-либо таймаутами.Эти проблемы обычно указывают на нестабильную сеть с потерями между производителем и брокерами.

Исключение, которое вы получаете, Failed to update metadata, обычно означает, что один из брокеров недоступен для производителя, и в результате он не может получить метаданные.

Для вашего второговопрос, Кафка автоматически попытается отправить сообщения, которые не были полностью подтверждены брокерами.Вам решать, хотите ли вы поймать и повторить попытку, когда у вас есть тайм-аут на стороне приложения, но если вы используете тайм-ауты более 1 минуты, повторная попытка, вероятно, не будет иметь большого значения.Вам все равно придется выяснить основные проблемы сети / достижимости с брокерами.

По моему опыту, обычно проблемы с сетью:

  • Порт 9092 заблокированбрандмауэр, либо на стороне производителя, либо на стороне брокера, либо где-то посередине (попробуйте nc -z broker-ip 9092 с сервера, на котором работает производитель)
  • Разрешение DNS нарушено, поэтому даже если порт открыт,производитель не может разрешить IP-адрес.
...