распределение разделов для потребителей - PullRequest
0 голосов
/ 25 февраля 2020

Есть ли способ заставить kafka всегда потреблять еду в одном разделе.
Даже если потребитель падает, что приводит к перебалансировке - мы должны каким-то образом убедиться, что потребитель не обслуживает больше, чем один раздел.
Это необходимо для того, чтобы избежать сложности в агрегации нашего бизнеса и логах отказоустойчивости c - при попытке удовлетворить динамическое / непредсказуемое количество разделов.

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Вы можете посмотреть на реализацию пользовательского ConsumerPartitionAssignor и использовать его для своих потребителей - это позволяет вам явно контролировать назначения разделов, все еще используя функции управления группами.

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

При этом я не уверен, что рекомендую этот подход, если вам нужно быть глубоко связанным с внутренними компонентами, вы можете не правильно использовать Кафку. Может быть, потребуется немного времени, чтобы пересмотреть ваш подход:)

Кафка также имеет CooperativeStickyAssignor в последних версиях, который снимает много «укусов» с перебалансировок, принимая во внимание, что это также может помочь смягчить ваши боль ..

0 голосов
/ 25 февраля 2020

Я не думаю, что вы можете справиться с этим, используя способ подписки с автоматическим c ребалансированием внутри группы потребителей. Я вижу разные проблемы. Если у вас есть topi c с X-разделами, вам нужно, чтобы X-потребители в одних и тех же группах потребителей получали каждый раздел по одному разделу. Во время запуска может случиться так, что при запуске других потребителей один из них получает более одного раздела. Также может случиться, что когда один или несколько потребителей взломают sh, один из оставшихся в живых получит больше разделов, а мертвые восстановятся. У вас нет гарантии на одного потребителя - один раздел в каждый момент. По этой причине единственный способ go состоит в том, чтобы использовать назначение вместо подписки (http://kafka.apache.org/24/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#assign - java .util.Collection- ). Обратите внимание, что таким образом вы должны указать раздел, и у вас не будет работать функция автоматической перебалансировки "из коробки".

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