我有一个将特定类型的消息广播到所有分区的用例。我探索了自定义分区程序,但它不支持广播到所有分区。我正在使用自定义分区程序将其他类型的消息转发到特定分区程序。
1.我想知道Kafka那边有没有办法支持对所有分区的广播?
1.关于自定义解决方案的想法也是受欢迎的:-方法之一是有单独的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集群上的重复数据罚款。请帮助,如果有比这篇文章中提出的更好的方法。
1条答案
按热度按时间5lhxktic1#
在旧版本的Kafka中,这并不容易做到。您需要在Kafka Streams应用程序中手动“复制”消息,并使用自定义分区程序将每个副本发送到不同的分区。
在即将发布的Kafka 3.4版本中,将内置支持通过KIP-837向多个分区多播/广播消息。
StreamPartitioner
接口现在有一个新的方法Optional<Set<Integer>> partitions(String topic, K key, V value, int numPartitions)
,允许您返回一组要写入单个记录的分区(而不是旧接口中的单个分区)。