如何在单个 kafka 主题的所有分区中写入相同的消息?

how to write same message in all partitions of a single kafka topic?

我有一个主题假设名称为“测试”。假设它有 4 个分区 P1、P2、P3、P4。 现在,我正在发送一条消息,假设来自 Kafka Producer 的 M1。我希望消息 M1 写入所有分区 P1、P2、P3、P4。可能吗? 如果是,那我该怎么做? (我是新手,我正在使用 Kafka-Node 来做这件事。)

根据关于 ProducerRecord 的文档,您可以指定 ProducerRecord 的分区。这样您就可以将相同的消息写入同一主题的多个分区。 api 在 Java 中看起来像这样:

ProducerRecord(String topic, Integer partition, K key, V value)

总体而言,您的方法可能是这样的,尽管我也质疑这种复制数据的方法,并且宁愿re-consider 进行设计更改。

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 将不会丢弃该消息,因此它可以被尽可能多的不同(!)ConsumerGroups 消费,只要你喜欢。 Kafka 中的数据仅根据在主题级别配置的保留时间或大小进行删除,并且与 Producer/Consumer.

无关