我试图通过融合的go client将一些消息推送到kafka,但是要注意的是消息需要以avro格式推送。在java springboot应用程序中可以轻松实现同样的目的。
我有种预感,好像这完全可以通过融合的go客户实现。尽管我可以选择通过融合的REST代理推送这些消息,但这将意味着性能会降低3-4倍,这是我抵制的。
我尝试过goAvro将消息转换为avro。虽然我在制作时没有出现任何错误,但是数据部分没有以avro格式存储。
avroCodec, err := goavro.NewCodec(schemaString)
if err != nil {
log.Panic(err.Error())
}
appointmentByte,_ := json.Marshal(appointment)
native, _, _ := avroCodec.NativeFromTextual(appointmentByte)
binaryValue, _ := avroCodec.BinaryFromNative(nil, native)
var recordValue []byte
schemaIDBytes := make([]byte, 4)
binary.BigEndian.PutUint32(schemaIDBytes, uint32(id))
recordValue = append(recordValue, byte(0))
recordValue = append(recordValue, schemaIDBytes...)
recordValue = append(recordValue, binaryValue...)
log.Print(recordValue)
key, _ := uuid.NewUUID()
fmt.Print(key.String())
p.Produce(&kafka.Message{
TopicPartition: kafka.TopicPartition{
Topic: &topic, Partition: kafka.PartitionAny},
Key: []byte(key.String()), Value: recordValue}, nil)
答案 0 :(得分:0)
您可以在Github上搜索问题的解决方案。它目前不是项目的一部分,但正在
https://github.com/confluentinc/confluent-kafka-go/issues/69