单个 Kafka 生产者可以向多个主题生产消息吗?如何生产?

Can single Kafka producer produce messages to multiple topics and how?

我正在探索 Kafka,目前我正在使用一个 producer 和一个主题来生成消息,它被一个 Consumer 使用。很简单。

我正在阅读 Kafka 页面,new Producer API is thread-safe 和共享单个实例将提高性能。

这是否意味着我可以使用单个 Producer 向多个主题发布消息?

我自己从未尝试过,但我想你可以。由于生产者和发送记录的代码是(从这里https://kafka.apache.org/090/javadoc/index.html?org/apache/kafka/clients/producer/KafkaProducer.html):

Producer<String, String> producer = new KafkaProducer<>(props);
 for(int i = 0; i < 100; i++)
     producer.send(new ProducerRecord<String, String>("my-topic", Integer.toString(i), Integer.toString(i)));

所以,我想,如果您只是在 ProducerRecord 中写不同的主题,那应该是可能的。

此外,这里http://kafka.apache.org/081/documentation.html#producerapi明确表示可以使用一种方法send(List<KeyedMessage<K,V>> messages)写入多个主题。

如果我没理解错的话,您更希望使用同一个生产者实例发送关于多个主题的 same/multiple 消息。

不确定 java,但您可以在 C#(.NET) 中使用 Kafka .NET Client DependentProducerBuilder

   using (var producer = new ProducerBuilder<string, string>(config).Build())
        using (var producer2 = new DependentProducerBuilder<Null, int>(producer.Handle).Build())
        {
            producer.ProduceAsync("first-topic", new Message<string, string> { Key = "my-key-value", Value = "my-value" });

            producer2.ProduceAsync("second-topic", new Message<Null, int> { Value = 42 });

            producer2.ProduceAsync("first-topic", new Message<Null, int> { Value = 107 });

            producer.Flush(TimeSpan.FromSeconds(10));
        }