如何解决如何在单个kafka主题的所有分区中写入相同的消息?
我有一个主题,假设名称为“ Test”。假设它有4个分区P1,P2,P3,P4。 现在,我正在发送一条消息,假设来自Kafka Producer的M1。我希望消息M1写入所有分区P1,P2,P3,P4。可能吗? 如果是,那我该怎么做? (我对此并不陌生,我正在使用Kafka-Node来做到这一点。)
解决方法
根据ProducerRecord上的文档,您可以指定ProducerRecord
的分区。这样,您可以将同一条消息写入同一主题的多个分区。 Java中的API如下所示:
ProducerRecord(String topic,Integer partition,K key,V value)
您的总体方法可能看起来像这样,尽管我也质疑这种复制数据的方法,而宁愿重新考虑设计变更。
Producer<String,String> producer = new KafkaProducer<>(props);
for (int part = 0; part < 4; part++)
producer.send(new ProducerRecord<String,String>("Test",part,"Hello","World!"));
producer.close();
编辑(来自OP的评论,其中包含用例的更多背景知识)
根据您的评论,我了解到您想并行读取数据并执行两个不同的步骤。与其将同一条消息写入同一主题内的两个不同分区,我不建议在主题中(即在任何分区中)仅将数据存储一次。在使用者方面,您可以确保您的2个使用者具有不同的ConsumerGroup(配置:group.id
)。如果他们有两个不同的ConsumerGroup,他们将能够并行处理数据。如果已使用该消息,Kafka将不会删除该消息,因此可以根据需要由任意多个(!)ConsumerGroup来使用它。卡夫卡中的数据只会根据在主题级别配置的保留时间或大小来删除,并且与生产者/消费者无关。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。