为了账号安全,请及时绑定邮箱和手机立即绑定

在 go 中使用 Kafka Avro 消息

在 go 中使用 Kafka Avro 消息

Go
拉莫斯之舞 2022-04-20 17:43:21
我正在尝试以 avro 格式使用 Kafka 消息,但我无法在 Go 中将消息从 avro 解码为 json。我正在使用 Confluent 平台(3.0.1)。例如,我生成 avro 消息,例如:kafka-avro-console-producer --broker-list localhost:9092 --topic test --property value.schema='{"type":"record","name":"myrecord","fields":[{"name":"f1","type":"string"}]}'{"f1":"message1"}{"f1":"message2"}现在我使用 go Kafka 库消费消息:sarama。纯文本消息工作正常。Avro 消息必须被解码。我发现了不同的库:github.com/linkedin/goavro、github.com/elodina/go-avro但是解码后我得到一个没有值的json(两个库):{"f1":""}戈夫罗:avroSchema := `{"type":"record","name":"myrecord","fields":[{"name":"f1","type":"string"}]}`codec, err := goavro.NewCodec(avroSchema)if err != nil {    log.Fatal(err)}bb := bytes.NewBuffer(msg.Value)decoded, err := codec.Decode(bb)log.Println(fmt.Sprintf("%s", decoded))继续前进:schema := avro.MustParseSchema(avroSchema)reader := avro.NewGenericDatumReader()reader.SetSchema(schema)decoder := avro.NewBinaryDecoder(msg.Value)decodedRecord := avro.NewGenericRecord(schema)log.Println(decodedRecord.String())msg = sarama.ConsumerMessage
查看完整描述

2 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

刚刚发现(通过比较二进制 avro 消息)我必须删除消息字节数组的前 5 个元素 - 现在一切正常:)

message = msg.Value[5:]

也许有人可以解释为什么


查看完整回答
反对 回复 2022-04-20
?
忽然笑

TA贡献1806条经验 获得超5个赞

仅当您使用 Confluent 模式注册表时才真正有用。



查看完整回答
反对 回复 2022-04-20
  • 2 回答
  • 0 关注
  • 232 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信