我正在探索Kafka
,目前我正在使用一个producer
和一个主题来生成消息,并由一个Consumer
使用。非常简单。
我正在阅读Kafka页面,new Producer API is thread-safe
和共享单个实例将提高性能。
这是否意味着我可以使用单个Producer将消息发布到多个主题?
答案 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));
}