【问题标题】:Can single Kafka producer produce messages to multiple topics and how?单个 Kafka 生产者能否为多个主题生成消息?如何生成?
【发布时间】:2016-12-29 19:53:17
【问题描述】:

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

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

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

【问题讨论】:

  • 是的,请参阅kafka.apache.org/documentation.html#producerapi 的文档。
  • @miguno 我在提供的链接中几乎看不到任何关于该问题的内容。这只是关于依赖:(
  • 在上面的文档(简短部分)中,有一个指向Java docs of KafkaProducer<K,V> 的直接链接,请参见“javadocs. 中给出了如何使用生产者的示例”。该页面有一个代码示例,显示了在发送消息时如何定义目标主题。对不起,如果我不够清楚。

标签: apache-kafka kafka-producer-api


【解决方案1】:

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

【讨论】:

  • FWIW,Producer API 的最新 Kafka 文档位于 kafka.apache.org/documentation.html#producerapi(上面的链接适用于旧 0.8.1 版本的 Kafka。
  • producerapi 部分在哪里具体说明了该方法?
  • producerapi 部分说:“javadocs. 中给出了如何使用 producer 的示例。”。该页面有一个代码示例,展示了如何在发送消息时定义目标主题。
  • 事实上这样做会使制作者的写作过程变慢。有人检查过撰写多个主题的制作人的表现吗?
  • @RadioLog,那么我们可以为多个主题生成消息吗?它们都具有不同的 jaas.conf(keytab 和 pricipal)?请在这里查看我的问题:stackoverflow.com/q/58313628/948268
【解决方案2】:

如果我对您的理解正确,您更倾向于使用相同的生产者实例来发送关于多个主题的相同/多条消息。

不确定 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));
        }

【讨论】:

    猜你喜欢
    • 2021-10-11
    • 2023-02-21
    • 1970-01-01
    • 2014-01-04
    • 2018-01-08
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多