Kafka-streams задерживает восстановление баланса из-за постепенного отключения потребителей - PullRequest
0 голосов
/ 28 января 2019

Это продолжение предыдущего вопроса, который я послал относительно высокой задержки в наших потоках Кафки;( Kafka Streams перебалансирует пики задержки в службах kafka-streams с высокой пропускной способностью ).

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

После дальнейшего исследования мы обнаружили, что по крайней мере для небольших групп потребителей перебалансировка занимает менее 500 мс.Итак, мы подумали, откуда взялась эта огромная задержка при удалении одного потребителя (> 10 с)?

Мы поняли, что это время между изящным выходом потребителя и наступлением перебаланса.

Предыдущие тесты были выполнены с настройками по умолчанию в приложениях Kafka и Kafka Streams.Мы изменили конфигурации на:

properties.put("max.poll.records", 50); // defaults to 1000 in kafkastreams
properties.put("auto.offset.reset", "latest"); // defaults to latest
properties.put("heartbeat.interval.ms", 1000);
properties.put("session.timeout.ms", 6000);
properties.put("group.initial.rebalance.delay.ms", 0);
properties.put("max.poll.interval.ms", 6000);

И в результате время начала перебалансировки сократилось до чуть более 5 секунд.

Мы также протестировали, чтобы убить потребителя- изящно "убей -9" это;В результате время запуска перебалансировки точно такое же.

Итак, у нас есть несколько вопросов: - Мы ожидали, что, когда потребитель корректно останавливается, перебалансировка запускается сразу, если это будет ожидаемое поведение?почему это не происходит в наших тестах?- Как мы можем сократить время между грациозным выходом потребителя и срабатыванием перебалансировки?каковы компромиссы?больше ненужных перебалансировок?

Для большего контекста наша версия Kafka - 1.1.0, после просмотра библиотек, найденных, например, kafka / kafka_2.11-1.1.0-cp1.jar, мы установили платформу Confluent 4.1.0.,На потребительской стороне мы используем Kafka-streams 2.1.0.

Спасибо!

1 Ответ

0 голосов
/ 01 февраля 2019

Kafka Streams не отправляет «запрос на выход из группы», когда экземпляр корректно завершается - это специально.Цель состоит в том, чтобы избежать дорогостоящих перебалансировок, если экземпляр отклонен (например, если кто-то обновляет приложение или если он запускается в среде Kubernetes и POD быстро перезапускается автоматически).

Для этого: непубличная конфигурация используется.Вы можете переписать конфигурацию через

props.put("internal.leave.group.on.close", true); // Streams' default is `false`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...