Anu*_*rma 3 apache-kafka kafka-consumer-api kafka-producer-api
我有一个主题,假设名称为“测试”。假设有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)
Run Code Online (Sandbox Code Playgroud)
总的来说,您的方法可能看起来像这样,尽管我也质疑这种复制数据的方法,并且宁愿重新考虑设计更改。
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();
Run Code Online (Sandbox Code Playgroud)
编辑(在 OP 发表评论后,对用例有更多背景):
从您的评论中,我了解到您想要并行读取数据并执行两个不同的步骤。我宁愿建议将数据仅在主题中存储一次(即在任何分区中),而不是将相同的消息写入同一主题中的两个不同分区。在消费者方面,您可以确保您的 2 个消费者具有不同的 ConsumerGroup (配置:)group.id。如果他们有两个不同的 ConsumerGroup,他们将能够并行处理数据。如果消息已被消费,Kafka 不会丢弃该消息,因此它可以被任意多个不同的(!)ConsumerGroup 消费。Kafka 中的数据仅根据主题级别配置的保留时间或大小进行删除,并且独立于生产者/消费者。
| 归档时间: |
|
| 查看次数: |
6720 次 |
| 最近记录: |