Почему мой потребительский опрос Kafka так быстро? - PullRequest
3 голосов
/ 06 июля 2019

Мой потребитель Kafka опрашивает быстрее, чем я ожидал. Есть ли какой-нибудь конфиг, который я могу изменить, чтобы он все время ждал в fetch.max.wait.ms?

Я установил fetch.max.wait.ms на некоторое количество секунд (5). Я установил fetch.min.bytes на большое количество байтов (99 988 800).

Я прочитал документацию (но, возможно, что-то пропустил):

https://kafka.apache.org/documentation/

  • fetch.min.bytes

  • Минимальный объем данных, которые сервер должен вернуть для запроса на выборку. Если данных недостаточно, запрос будет ждать накопления такого количества данных, прежде чем ответить на запрос. Значение по умолчанию, равное 1 байту, означает, что запросы на выборку отвечают, как только один байт данных становится доступным или время запроса на выборку истекает в ожидании поступления данных. Если задать для этого параметра значение, большее 1, сервер будет ожидать накопления больших объемов данных, что может немного повысить пропускную способность сервера за счет некоторой дополнительной задержки.

  • fetch.max.wait.ms

  • Максимальный период времени, в течение которого сервер будет блокировать перед ответом на запрос выборки, если данных недостаточно для немедленного удовлетворения требованиям, заданным fetch.min.bytes.

fetch.max.wait.ms=5000,
fetch.min.bytes=99988800

Исходя из моих параметров конфигурации и набора данных, я ожидаю, что вызов poll будет всегда блокироваться в течение 5 секунд перед возвратом любых записей.

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

Вот вывод примера прогона:

// send 100 records
// doesn't matter how

// timestamp -> records received
// (date, hour and minute are not shown, just the relevant seconds.millis)

32.475 -> 10
33.392 -> 12
34.116 -> 16
37.477 -> 16
38.395 -> 18
39.118 -> 17
42.479 -> 7
43.397 -> 4

Без задержек было действительно близко к 5 с.

1 Ответ

2 голосов
/ 06 июля 2019

Со свойством fetch.max.wait.ms=5000 вы сказали: «Не ждите более 5 секунд, даже если данных недостаточно для сбора».Вы не указали минимальное количество секунд до начала опроса.Вы можете проверить это поведение, запустив 2 потребителя kafka, и в одном из них вы установите fetch.max.wait.ms=20000, а в другом - значение по умолчанию.Вы увидите, что для потребителя с настройками по умолчанию вы будете получать сообщения почти сразу, а для потребителя с fetch.max.wait.ms=20000 вам придется немного подождать.Я попробовал это на своей машине с настройкой fetch.max.wait.ms=20000, и иногда для получения записи требуется 15 секунд, иногда 10 секунд и т. Д., Но не прошло более 20 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...