Руководство по устранению неполадок Apache Kafka для Центров событий

В этой статье содержатся советы по устранению проблем, с которыми можно столкнуться при использовании Центров событий для Apache Kafka.

Исключение "Сервер занят"

Вы можете получить исключение "Сервер занят" из-за регулирования количества запросов в Kafka. При использовании клиентов AMQP Центры событий немедленно возвращают исключение Сервер занят при регулировании службы. Это эквивалентно сообщению "Повторите попытку позже". В Kafka перед завершением сообщений есть задержка. Длительность задержки возвращается в миллисекундах как throttle_time_ms в ответе на запрос создания/получения. В большинстве случаев эти отложенные запросы не регистрируются в качестве исключений "Сервер занят" на панелях мониторинга Центров событий. Вместо этого значение throttle_time_ms в ответе следует рассматривать как указание на то, что пропускная способность превысила подготовленную квоту.

При чрезмерном трафике служба ведет себя следующим образом.

  • Если задержка запроса на создание превышает время ожидания запроса (request.timeout.ms), Центры событий возвращают код ошибки нарушения политики .
  • Если задержка запроса на получение превышает время ожидания запроса, Центры событий регистрируют запрос как регулируемый и отвечают пустым набором записей без кода ошибки.

Выделенные кластеры не имеют механизмов регулирования. Вы можете использовать все ресурсы кластера.

Отсутствие полученных записей

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

  • Убедитесь, что параметру request.timeout.ms присвоено рекомендованное значение 60000 или выше, а значение параметра session.timeout.ms — не меньше рекомендуемого значения 30000. Если эти параметры слишком низкие, время ожидания потребителя может быть превышено, что приведет к перераспределению (в результате превышение времени ожидания будет возникать чаще, что приведет к более частому перераспределению и т. д.)
  • Если конфигурация соответствует рекомендуемым значениям, но вы по-прежнему наблюдаете постоянное перераспределение, вы можете сообщить о проблеме (обязательно включите в запрос всю конфигурацию, чтобы мы могли помочь в отладке).

Проблема с версией формата сжатия или сообщения

Kafka поддерживает сжатие, а Центры событий для Kafka в настоящее время его не поддерживают. Ошибки, в которых упоминается версия формата сообщения (например, The message format version on the broker does not support the request.), возникают, когда клиент пытается отправить сжатые сообщения Kafka нашим брокерам.

Если сжатие данных необходимо, то проблему можно обойти следующим образом: выполните сжатие данных перед их отправкой брокерам и распакуйте их после получения. Для службы текст сообщения — это просто массив байтов, поэтому сжатие и распаковка на стороне клиента не будут вызывать никаких проблем.

Неизвестное исключение сервера (UnknownServerException)

Вы можете получить исключение UnknownServerException от клиентских библиотек Kafka, как показано в следующем примере:

org.apache.kafka.common.errors.UnknownServerException: The server experienced an unexpected error when processing the request

Отправьте запрос в службу поддержки Майкрософт. При отладке проблемы будут полезны ведение журнала на уровне отладки и метки времени исключений в формате UTC.

Другие проблемы

Если при использовании Kafka в Центрах событий возникают проблемы, проверьте следующие элементы.

  • Блокировка трафика брандмауэром. Убедитесь, что брандмауэр не блокирует порт 9093.
  • Исключение TopicAuthorizationException. Наиболее распространенные причины этого исключения:
    • Опечатка в строке подключения в файле конфигурации.
    • Попытка использовать Центры событий для Kafka в пространстве имен базового уровня. Функциональные возможности Центров событий для Kafka не поддерживаются на уровне "Базовый".
  • Несоответствие версий Kafka. Центры событий для экосистем Kafka поддерживают Kafka версии 1.0 или выше. Некоторые приложения, использующие Kafka версии 0.10 или выше, могут периодически работать из-за обратной совместимости протокола Kafka, но мы настоятельно рекомендуем не использовать старые версии API. Kafka версии 0.9 или ниже не поддерживает требуемые протоколы SASL и не может подключаться к Центрам событий.
  • Странные кодировки в заголовках AMQP при использовании с Kafka. При отправке событий в центр событий через AMQP все заголовки полезных данных AMQP сериализуются в кодировку AMQP. Потребители Kafka не десериализуют заголовки из AMQP. Для считывания значений заголовков декодируйте заголовки AMQP вручную. Кроме того, вы можете избежать использования заголовков AMQP, зная, что будете работать с протоколом Kafka. Дополнительные сведения см. в этой статье об ошибке на GitHub.
  • Проверка подлинности SASL. Обеспечение взаимодействия вашей платформы с протоколом проверки подлинности SASL, необходимым для Центров событий, может оказаться более сложной задачей, чем кажется. Узнайте, можете ли вы устранить неполадки конфигурации с помощью ресурсов вашей платформы на основе проверки подлинности SASL.

Ограничения

Apache Kafka и Kafka с Центрами событий. В большинстве случаев интерфейс Kafka для Центров событий Azure использует те же значения по умолчанию, свойства, коды ошибок и общее поведение, что и Apache Kafka. Явные отличия этих двух решений (где, в отличие от Kafka, Центры событий накладывают ограничения) перечислены ниже:

  • Максимальная длина свойства group.id — 256 символов
  • Максимальный размер offset.metadata.max.bytes — 1024 байт
  • Регулирование фиксации смещений — 4 вызова в секунду на секцию с максимальным внутренним размером журнала 1 МБ

Дальнейшие действия

Дополнительные сведения о Центрах событий и Центрах событий для Kafka см. в следующих статьях: