如何从同一生产者向不同的 Kafka 主题和模式注册表生成消息

Posted

技术标签:

【中文标题】如何从同一生产者向不同的 Kafka 主题和模式注册表生成消息【英文标题】:How to produce messages to different Kafka topics and schema registries from the same producer 【发布时间】:2021-12-14 01:37:35 【问题描述】:

我正在尝试从我的 Java 应用程序中的同一生产者向不同的 kafka 主题生成消息。

这就是我创建生产者并向主题发送消息的方式。

@Bean
public Producer producer() 
    Properties config = sdpProperties();
    config.setProperty("schema.registry.url", "");
    config.setProperty("client.id", "1");   ...
    return new Producer(config);

producer.send(topic1, genericRecord, datasetId1);
producer.send(topic2, genericRecord, datasetId2);

但是,这两个不同的主题有不同的 schema.registry.url。通过研究,我发现您可以在配置中设置多个注册表 url,但是当我尝试遵循这一点时,它只会针对第二个 url 进行验证。发送到 topic2 的消息正确生成,但发送到 topic1 的消息不正确。两个主题的消息仅针对 url2 进行验证,而不是针对 url1 验证主题 1 和针对 url2 验证主题 2。

 config.setProperty("schema.registry.url", "ur1,url2");

如何使用同一个生产者向这两个不同的主题发送消息,即使它们具有不同的 schema.registry.urls?我是不是设置错了这个配置?

【问题讨论】:

【参考方案1】:

Ideally, you shouldn't have multiple registries.

但是,如果您了解该决定背后的架构设计,那么您必须创建两个具有不同注册表 url 的唯一生产者。逗号分隔是针对一个“注册表集群”的负载平衡,而不是多个唯一注册表的循环

【讨论】:

啊,我不知道,但是拥有多个制作人不是效率低下吗? 如果他们有不同的属性,那么没有其他选择 在同一个应用程序中创建不同生产者的最佳方法是什么? 在 Spring 中,创建一个新的 KafkaTemplate 对象,该对象采用不同的工厂和配置映射 有没有办法只创建两个新的生产者 bean?

以上是关于如何从同一生产者向不同的 Kafka 主题和模式注册表生成消息的主要内容,如果未能解决你的问题,请参考以下文章

如何忽略从同一主题读取和写入不同事件类型的 Kafka Streams 应用程序中的某些类型的消息

kafka主题分区的数量和数据中不同键的数量

Kafka下的生产消费者模式与订阅发布模式

kafka面试题

如何在spring cloud stream和kafka中从同一主题发送和接收

消息的主题和队列