Хотя может существовать контекст, который сделает подход действительным, как написано, я немного сомневаюсь в вашем подходе.
Лучший способ обеспечить минимальное время простоя - позволить брокерам и zookeeper kafka делать то, что у них хорошо получается, управлять своей рабочей нагрузкой (разделами) среди своих потребителей, в том числе переназначать разделы, когда потребитель выходит из строя.
Ваш лучший путь, вероятно, будет использовать события OnPartitionsRevoked и OnpartitionsAssigned для обработки любой логики, необходимой для создания нового раздела (более подробную информацию об этих событиях см. В ссылке JRs).
Я опишу недавний вариант использования, который у меня был, в надежде, что он уместен для вашего варианта использования.Недавно у меня было 5 потребителей, которым требовался кэш-память в 50 миллионов объектов.Без разделения у каждого потребителя был свой кэш, в результате чего получалось 250 миллионов объектов.Чтобы уменьшить это число до первоначальных 50 миллионов, мы могли бы использовать событие onpartitionsrevoked для очистки кеша и onassigned для повторного заполнения кеша соответствующим кешем для назначенных разделов.
Если не использовать эти два обработчика, если вы действительно хотите вручную назначить свои разделы, вам придется выполнить всю оркестровку самостоятельно:
- Что-то для мониторинга, еслиодин из других потребителей не работает
- Что-то, что может забрать раздел мертвого потребителя и обработать его
- Организовать связь между потребителями, чтобы общаться, когда мертвый потребитель снова оживает, чтобы он мог начать работатьснова.
Как вы, вероятно, можете сказать из списка, вы попадете в реальный мир боли, если вы заставите себя пойти по этому пути, и вы, вероятно, не сделаете работу лучше, чемKafka Brokers - есть целый бизнес, все внимание которого сосредоточено на разработке и поддержке kafka, поэтому вам не придется справляться со всей этой сложностью.