如何从同一生产者向不同的 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 应用程序中的某些类型的消息