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


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

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

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

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

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

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

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

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

Убедитесь, что параметру 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 uncompressed, gzip В настоящее время поддерживается только сжатие gzip.

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

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

Свойство Рекомендуемые значения Допустимый диапазон Примечания.
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-код бездействия > 240 000 мс.
metadata.max.age.ms ~ 180000 < 240000 Можно снизить, чтобы быстрее получать сведения об изменениях метаданных.

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

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

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

Свойство Рекомендуемые значения Допустимый диапазон Примечания.
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 + max.request.size, ваши запросы могут быть слишком большими. См. приведенные ранее конфигурации Java.

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

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