单个 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));
}
我正在探索 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));
}