#apache-kafka
#apache-kafka
Вопрос:
Есть ли способ доставить событие каждому подписчику темы независимо от группы потребителей? подумайте о сценарии «Обновить локальный кеш»
Комментарии:
1. Конечно, простое нажатие на тему сделало бы это, поскольку все группы потребителей получили бы это? Вы пытаетесь использовать несколько схем на одну и ту же тему, это основная проблема?
2. не только все группы потребителей, но и все потребители, подписавшиеся на группу потребителей (все машины / процессы)
3. Вы думали об использовании redis для этого? Я не могу сразу придумать способ добиться этого.
4. Я сделал да, конечно, дело в том, что я не хочу включать зависимость redis ТОЛЬКО по этой причине…
5. Единственное решение, которое я могу придумать, — это создать вторую группу потребителей, в которой также есть имя компьютера, а затем отфильтровывать события, чтобы вы не обрабатывали их несколько раз. Т.Е. MainConsumer group выполняет все обычные действия kafka и т. Д., А Затем второй Main{MACHINENAME}, который отфильтровывает все остальные сообщения. Таким образом, вы обязательно получите событие кэша на всех машинах. Вы также можете использовать это для других управляющих событий, если вы добавите имя компьютера в полезную нагрузку события.
Ответ №1:
Что касается Kafka, вы не можете подписаться на тему без группы потребителей.
Из коробки это не шаблон потребителя Kafka; нет способа заставить всех потребителей в группе читать все сообщения из всех разделов. Клиентов-потребителей не может быть больше, чем разделов (что затрудняет «разветвление»), и только одно сообщение отправляется любому одному потребителю до того, как будет зафиксировано смещение сообщения, и вся группа потребителей ищет эти смещения для использования более поздних событий.
Вам понадобится слой над потребителем, чтобы отделить себя от ограничений группы потребителей.
Например, при использовании интерактивных запросов вы должны использовать тему и создавать хранилище состояний из поступающих данных, эффективно создавая распределенный кэш. При этом вы можете использовать уровень RPC (упомянутый в этих документах), который позволяет внешним приложениям по выбранному вами протоколу (например, HTTP) позже запрашивать и опрашивать эти данные. Из приложения, которое опрашивает данные, у вас будет возможность пересылать «события уведомлений» любым способом по вашему выбору.
Что касается фреймворка, который уже предоставляет большую часть этого готового, проверьте потоки Azkarra (у меня нет аффилированности)
Или вы можете использовать альтернативные решения, такие как Kafka Connect, и вместо этого записывать данные в Slack, Telegram и т. Д. «Доски объявлений», Где многие люди явно подписываются на эти уведомления о каналах.