Я пытался отправить несколько сообщений в kafka через confluent go client, но загвоздка в том, что сообщения нужно отправлять в формате avro. То же самое может быть легко достигнуто в приложении java springboot.
У меня есть подозрение, что все это возможно через confluent go client. Хотя у меня есть альтернатива отправке этих сообщений через слитный прокси-сервер для отдыха, но это будет означать 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)
json.Marshal(appointment)
создает json, а не Avro... Откуда вы берете ID? - person OneCricketeer   schedule 30.01.2020