Kafka10.1 heartbeat.interval.ms, session.timeout.ms и max.poll.interval.ms

Я использую kafka 0.10.1.1 и путаю со следующими 3 свойствами.

heartbeat.interval.ms
session.timeout.ms
max.poll.interval.ms

heartbeat.interval.ms. Это было добавлено в 0.10.1, и он будет отправлять биение между опросами. session.timeout.ms. Это должно начать балансировку, если нет запроса на кафку, и он получает reset в каждом опросе. max.poll.interval.ms. Это по опросу.

Но когда кафка начинает балансировать? Зачем нам эти 3? Каковы значения по умолчанию для всех из них?

Спасибо

Ответ 1

Предполагая, что мы говорим о Kafka 0.10.1.0 или выше, где каждый экземпляр пользователя использует два потока для работы. Один из них - пользовательский поток, из которого вызывается poll; другая - сердечная нить, которая специально заботится о сердечных вещах.

session.timeout.ms - для потока сердечных сокращений. Если координатор не получил какого-либо биения от потребителя до истечения этого промежутка времени, он помечает потребителя как неудачный и запускает новый раунд перебалансировки.

max.poll.interval.ms для пользовательского потока. Если логика обработки сообщений слишком тяжелая, чтобы стоить больше, чем этот временной интервал, координатор явно оставляет потребителя покинуть группу, а также запускает новый раунд балансировки.

heartbeat.interval.ms используется, чтобы другие здоровые потребители знали о перебалансировке намного быстрее. Если координатор инициирует перебалансировку, другие потребители будут знать об этом, получая ответ от пульса с заключением REBALANCE_IN_PROGRESS. Быстрее посылается запрос на пульс, быстрее потребитель знает, что ему нужно присоединиться к группе.

Рекомендуемые значения:
session.timeout.ms: относительно низкое значение, например, 10 секунд.
max.poll.interval.ms: на основе ваших требований к обработке
heartbeat.interval.ms: относительно низкое значение, лучше 1/3 из session.timeout.ms

Ответ 2

просто сделайте их более понятными, поток сердцебиения (наряду с пользовательским потоком, который вызывает функцию Poll в том же процессе) будет отправлять сердцебиение координатору каждый раз "heartbeat.interval.ms", и координатор помечает потребителя в пользовательском потоке как мертв, если он превышает "session.timeout.ms" или "max.poll.interval.ms".

Ответ 3

session.timeout.ms тесно связан с heartbeat.interval.ms.

heartbeat.interval.ms контролирует, как часто метод poll() KafkaConsumer будет отправлять пульс координатору группы, тогда как session.timeout.ms контролирует, как долго потребитель может отправляться без отправки пульса.

Поэтому эти два свойства обычно модифицируются вместе. heatbeat.interval.ms должен быть меньше, чем session.timeout.ms, и обычно устанавливается на одну треть от значения времени ожидания. Так что если session.timeout.ms равен 3 секундам, heartbeat.interval.ms должен быть равен 1 секунде.

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