我目前无法在kstream应用程序中反序列化avro原语密钥
使用avro模式(在模式注册表中注册)编码的键,
当我使用kafkaavro控制台使用者时,我可以看到密钥被正确地反序列化
但不可能在kstream应用程序中运行
密钥的avro模式是一个原语:
{"type":"string"}
我已经跟踪了confluent的文档
final Serde<V> valueSpecificAvroSerde = new SpecificAvroSerde<>();
final Map<String, String> serdeConfig = Collections.singletonMap(SCHEMA_REGISTRY_URL_CONFIG, schemaRegistryUrl);
valueSpecificAvroSerde.configure(serdeConfig, false);
final Serdes.StringSerde keySpecificAvroSerde = new Serdes.StringSerde();
keySpecificAvroSerde.configure(serdeConfig, true);
Consumed<String, totoAvro> inputConf = Consumed.with(keySpecificAvroSerde, valueSpecificAvroSerde);
final KStream<String, totoAvro> mystream = builder.stream("name topic", inputConf);
mystream.peek((key, value) -> logger.info("topic KEY :" + key))
对于值来说,它工作得很好,但是键将是一个字符串,其中包含来自schema注册表的字节,而不仅仅是“revel”键
https://docs.confluent.io/current/schema-registry/serializer-formatter.html#wire-格式
所以字符串键是/§/./11016015201,但我想要卷轴值:1016015201
如果我打印字符串中的字节,它是[0x00 0x00 0x02 0x31 0x14 0x31 0x30 0x31 0x36 0x30 0x31 0x35 0x32 0x30 0x31]
1条答案
按热度按时间vngu2lb81#
更新
它现在起作用了:https://stackoverflow.com/a/51957801/6227500
原始答案
该功能当前在架构注册表项目中不可用。
但是通过实现一个定制的serde你可以管理这个案子,
thiyaga rajan提出了一个可行的实施方案
avro基元类型的serde类