Исключения по квоте и тайм-ауту для производителя Kafka - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь придумать конфигурацию, которая обеспечивала бы установку квоты производителя на основе средней скорости байта производителя. Я сделал тест с кластером из 3 узлов. Тем не менее, topi c был создан с 1 разделом и 1 коэффициентом репликации, чтобы можно было измеритьrate_byte_rate только для 1 брокера (брокера-лидера).

Для идентификатора клиента test_producer_quota установлено значение 20480.

Я использовал kafka-provider-perf-test для проверки пропускной способности и газа.

kafka-producer-perf-test --producer-props bootstrap.servers=SSL://kafka-broker1:6667 \
client.id=test_producer_quota \
--topic quota_test \
--producer.config /myfolder/client.properties \
--record.size 2048  --num-records 4000 --throughput -1

Я ожидал, что клиент производителя узнает о газе и в конечном итоге сгладит запросы, отправленные на маклер. Вместо этого я заметил, что есть альтернативный импульс 98 rec / se c и 21 rec / se c на период более 30 секунд. В течение этого времени средняя задержка медленно продолжала увеличиваться и, наконец, когда она достигает 120000 мс, я начинаю видеть исключение тайм-аута, как показано ниже

org. apache .kafka.common.errors.TimeoutException: Истекает 7 записей для quota_test-0: 120000 мс прошло с момента создания пакета.

Что может быть причиной этой проблемы?

  1. Производитель истекает время ожидания, когда задержка достигает 120 секунд (по умолчанию value of delivery.timeout.ms)
  2. Почему производитель не узнает о дросселе и квоте, не замедляет или не откатывает Какие другие конфигурации производителя могли бы помочь решить эту проблему тайм-аута?

1 Ответ

0 голосов
/ 14 марта 2020

(2048 * 4000) / 20480 = 400 (sec)

Это означает, что, если ваш производитель пытается отправить 4000 записей на полной скорости (что имеет место, поскольку вы устанавливаете пропускную способность на -1), то он может пакетировать их и поместить их в очереди .. может быть, через одну или две секунды (в зависимости от вашего процессора).

Затем, благодаря настройкам квот (20480), вы можете быть уверены, что брокер не завершит работу 'обработка этих 4000 записей занимает не менее 399 или 398 секунд.

The broker does not return an error when a client exceeds its quota, but instead attempts to slow the client down. The broker computes the amount of delay needed to bring a client under its quota and delays the response for that amount of time. 

Если для вашего request.timeout.ms установлено значение 120 seconds, вы получите исключение timeoutException.

...