单个Kafka制作人可以为多个主题制作消息吗?

时间:2016-08-23 06:05:47

标签: apache-kafka kafka-producer-api

我正在探索Kafka,目前我正在使用一个producer和一个主题来生成消息,并由一个Consumer使用。非常简单。

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

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

2 个答案:

答案 0 :(得分:4)

我自己没试过,但我想你可以。由于生产者和发送记录的代码是(从这里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)写入多个主题。

答案 1 :(得分:-1)

如果我对您的理解正确,那么您会更希望使用同一生产者实例在多个主题上发送相同/多个消息。

不确定Java,但是在这里您可以使用Kafka .NET Client在C#(。NET)中进行操作 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));
        }