如何在kafka-avro-console-producer中配置RecordNameStrategy指定Schema主体
错误根因
报错是因为kafka-avro-console-producer默认使用TopicNameStrategy作为命名策略,会按照<topic名称>-value的规则去Schema Registry查找对应subject,和你实际使用的RecordNameStrategy不匹配,因此找不到对应subject抛出40401错误。
你之前配置不生效的原因是误用了服务端配置参数:value.subject.name.strategy.default是Schema Registry服务端的全局默认策略配置,不属于客户端生产者的可识别配置,因此添加后不会生效。
正确配置方案
配置RecordNameStrategy策略
将配置参数替换为客户端支持的value.subject.name.strategy即可,完整命令如下:
kafka-avro-console-producer \ --broker-list <broker-list> \ --topic <topic> \ --property schema.registry.url=http://localhost:8081 \ --property value.schema.id=419 \ --property auto.register=false \ --property value.subject.name.strategy=io.confluent.kafka.serializers.subject.RecordNameStrategy
使用RecordNameStrategy时,生产者会自动以Avro Schema定义的全限定记录名作为subject名查询,只要对应subject已在Schema Registry中存在且schema id匹配419,即可正常运行。
如果消息key也使用了自定义命名策略,对应配置键为key.subject.name.strategy。
手动指定subject名称
如果你不需要依赖命名策略自动生成,想要直接指定要使用的subject名称,可以额外添加如下参数:
--property value.subject.name=<实际的subject名称>
内容的提问来源于stack exchange,提问作者Fares
相关产品推荐
相关产品推荐

