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

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

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

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

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

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

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

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

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

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

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

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

Неизвестное исключение сервера (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 против Event Hubs Kafka. В большинстве случаев интерфейс Kafka для Центров событий Azure использует те же значения по умолчанию, свойства, коды ошибок и общее поведение, что и Apache Kafka. Случаи, когда эти два явно отличаются (или когда Event Hubs накладывает ограничение, которого нет у Kafka), перечислены здесь:

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

Следующие шаги

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