Поделиться через


Рекомендуемые конфигурации для клиентов Apache Kafka

Ниже приведены конфигурации, рекомендуемые для работы с Центрами событий Azure из клиентских приложений Apache Kafka.

Свойства конфигурации клиента Java

Конфигурации производителя и потребителей

Свойство Рекомендуемые значения Допустимый диапазон Примечания.
metadata.max.age.ms Около 180000 < 240000 Можно снизить, чтобы быстрее получать сведения об изменениях метаданных.
connections.max.idle.ms 180000 < 240000 Azure закрывает входящие подключения TCP, бездействующие более 240000 мс, что может привести к отправке пакетов с истекшим сроком действия (из-за времени ожидания отправки).

Конфигурации только для производителя

Конфигурации производителя можно найти здесь.

Свойство Рекомендуемые значения Допустимый диапазон Примечания.
max.request.size 1000 000 < 1046528 Служба будет закрывать подключения при отправлении запросов, размер которых превышает 1046528 байт. Это значение необходимо изменить, оно приведет к проблемам в сценариях с высокой пропускной способностью.
retries > 0 Возможно, значение delivery.timeout.ms потребуется увеличить, см. документацию.
request.timeout.ms 30000 — 60 000 > 20000 По умолчанию система присвоит параметру Центров событий минимальное значение в 20000 мс. При принятии запросов с более низкими значениями времени ожидания надлежащее поведение клиента не гарантируется.

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

metadata.max.idle.ms 180000 > 5000 Определяет срок кэширования метаданных производителем для неактивной темы. Если время, прошедшее с момента последнего выпуска темы, превышает период неактивности ее метаданных, они будут забыты, а при следующей попытке доступа к ним будет отправлен запрос на получение метаданных.
linger.ms > 0 В сценариях с высокой пропускной способностью значение задержки должно равняться самому высокому допустимому значению, чтобы можно было пользоваться пакетной обработкой.
delivery.timeout.ms Задается в соответствии с формулой (request.timeout.ms + linger.ms) * retries.
compression.type none Сжатие в настоящее время не поддерживается.

Конфигурации только для потребителя

Конфигурации потребителя можно найти здесь.

Свойство Рекомендуемые значения Допустимый диапазон Примечания.
heartbeat.interval.ms 3000 Значение по умолчанию — 3000, его не следует менять.
session.timeout.ms 30 000 6000 — 300 000 Начните с 30000. Увеличьте значение, если из-за пропущенных пульсов часто производится повторная балансировка.

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

max.poll.interval.ms 300000 (по умолчанию) >session.timeout.ms Используется для превышения времени ожидания повторной балансировки, поэтому это значение не должно быть слишком низким. Это значение должно превышать значение session.timeout.ms.

Свойства конфигурации librdkafka

Основной файл конфигурации librdkafka (ссылка) содержит расширенные описания для описанных далее свойств.

Конфигурации производителя и потребителей

Свойство Рекомендуемые значения Допустимый диапазон Примечания.
socket.keepalive.enable true Необходимо, если подключение должно быть неактивно. Azure закроет входящее TCP-соединение, если оно неактивно более 240000 мс.
metadata.max.age.ms ~ 180000 < 240000 Можно снизить, чтобы быстрее получать сведения об изменениях метаданных.

Конфигурации только для производителя

Свойство Рекомендуемые значения Допустимый диапазон Примечания.
retries > 0 Значение по умолчанию — 2147483647.
request.timeout.ms 30000 — 60 000 > 20000 По умолчанию система присвоит параметру Центров событий минимальное значение в 20000 мс. Значение librdkafka по умолчанию — 5000, что может создать проблему. При принятии запросов с более низкими значениями времени ожидания надлежащее поведение клиента не гарантируется.
partitioner consistent_random См. документацию по librdkafka. consistent_random— рекомендуемое значение, используемое по умолчанию. В большинстве случаев пустые ключи и ключи со значением NULL обрабатываются безупречно.
compression.codec none Сжатие в настоящее время не поддерживается.

Конфигурации только для потребителя

Свойство Рекомендуемые значения Допустимый диапазон Примечания.
heartbeat.interval.ms 3000 Значение по умолчанию — 3000, его не следует менять.
session.timeout.ms 30 000 6000 — 300 000 Начните с 30000. Увеличьте значение, если из-за пропущенных пульсов часто производится повторная балансировка.
max.poll.interval.ms 300000 (по умолчанию) >session.timeout.ms Используется для превышения времени ожидания повторной балансировки, поэтому это значение не должно быть слишком низким. Это значение должно превышать значение session.timeout.ms.

Дополнительные заметки

Ознакомьтесь со следующей таблицей распространенных сценариев ошибок, связанных с конфигурацией.

Симптомы Проблема Решение
Сбои фиксации смещения из-за повторной балансировки Потребитель слишком долго ждет опроса методом poll() между звонками, и служба удаляет его из группы. У вас есть несколько вариантов:
  • Увеличьте время ожидания обработки опроса (max.poll.interval.ms)
  • Уменьшите размер пакета сообщений, чтобы ускорить обработку
  • Улучшите распараллеливание обработки, чтобы избежать блокирования метода consumer.poll()
Практичнее всего использовать сочетание этих трех факторов.
Сетевые исключения при высокой пропускной способности Вы используете клиент Java, а максимальный размер запросов задан по умолчанию (default max.request.size)? Ваши запросы могут быть слишком большими. См. приведенные выше конфигурации Java.

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

Сведения об ограничениях во всех службах Azure см. в статье Подписка Azure, границы, квоты и ограничения службы.