#apache-kafka #apache-kafka-streams
Вопрос:
У меня есть вариант использования для трансляции определенного типа сообщений на все разделы. Я исследовал пользовательский разделитель, но он не поддерживает широковещательную передачу на все разделы. Я использую пользовательский разделитель для пересылки сообщений другого типа определенному разделителю.
- Я хочу знать, есть ли какой-либо способ со стороны кафки поддерживать трансляцию на все разделы?
- Идеи, касающиеся пользовательских решений, также приветствуются:- Одним из способов является наличие отдельного экземпляра производителя kafka, который будет отправлять сообщения всем разделам по отдельности, но если количество разделов больше и количество широковещательных сообщений больше, это может стать узким местом или может привести к задержке. Используя потоки кафки или продюсера кафки.
Producer<String, String> producer = new KafkaProducer<>(props);
for (int partition = 0; part < totalNoOfPartitions; partition )
producer.send(new ProducerRecord<String, String>("Test", partition, "Hello", "World!"));
producer.close();
Я понимаю, что дублирование данных может быть проблемой здесь, но давайте здесь проигнорируем этот фактор. Нас устраивают дубликаты данных в кластере кафка.
Пожалуйста, помогите, если есть лучший способ, чем то, что предложено в этом посте.
Комментарии:
1. Можете ли вы лучше объяснить свой вариант использования? В частности, как вы воспринимаете сообщения?
2. @OneCricketeer Мы работаем в финансовой сфере. Существуют определенные события, необходимые для всех потребителей, например, когда объявляются дивиденды по какой-либо акции, это событие является чем-то общим для всех потребителей. Каждый потребитель подписывается на один раздел и обрабатывает определенную книгу. Пользовательский разделитель публикует события, относящиеся к этой книге, в этом разделе. Короче говоря, пользовательский разделитель-это разделитель с учетом книг. Я надеюсь, что этого объяснения будет достаточно. Дайте мне знать, если вам понадобится дополнительная информация.
3. Поскольку потребители могут назначать себя для выбора разделов, тогда какой смысл публиковать все разделы? Обратите внимание, что поведение по умолчанию для одной группы потребителей не позволит нескольким потребителям читать из любого раздела. Кроме того, код, который вы показали, является единственным способом создания для всех разделов сразу. (API потока также не поможет в этом)
4. @OneCricketeer хорошо, спасибо, что развеял сомнения
5. @OneCricketeer Я пробовал, и это работает. Я настраиваю ровно один параметр доставки для своего приложения, будет ли он гарантировать ровно один раз, даже если я вызову
forward()
метод для каждого раздела.