是否有办法将kafka消息广播到所有分区?



我有向所有分区广播特定类型消息的用例。我研究了自定义分区器,但它不支持向所有分区广播。我使用自定义分区器将其他类型的消息转发到特定的分区器。

  1. 我想知道kafka方面是否有任何方法支持广播到所有分区?
  2. 也欢迎围绕定制解决方案的想法:-其中一种方法是使用单独的kafka生产者实例单独向所有分区发送消息,但是如果分区数量较多,广播消息数量较多,那么这可能会成为瓶颈或可能有延迟开销。使用kafka流或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();

我理解这里可能会关注重复数据,但我们在这里忽略这个因素。我们对kafka集群上的重复数据很好。如果有比这篇文章建议的更好的方法,请帮助。

在旧版本的Kafka中,这是不容易做到的。您需要"复制"。在你的Kafka Streams应用程序中手动地发送消息,并使用自定义分区器将每个副本发送到不同的分区。

在即将到来的Kafka 3.4版本中,将内置支持通过KIP-837向多个分区多播/广播消息。StreamPartitioner接口现在有一个新方法Optional<Set<Integer>> partitions(String topic, K key, V value, int numPartitions),它允许您返回一组您希望写入单个记录的分区(而不是旧接口中的单个分区)。

最新更新