Мой потребитель 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 с.