将pojos转换为confluent.io中的通用记录,以通过KafkaProducer发送

时间:2016-01-05 18:24:49

标签: java apache-kafka avro kafka-producer-api

我是Kafka和avro的新手并试图使用汇合包。我们已经将现有的POJO用于​​JPA,并且我希望能够简单地生成我的POJO的实例,而无需手动将每个值反映到通用记录中。我似乎想念文档中是如何完成的。

这些示例使用通用记录并逐个设置每个值,如下所示:

String key = "key1";
String userSchema = "{\"type\":\"record\"," +
                    "\"name\":\"myrecord\"," +
                    "\"fields\":[{\"name\":\"f1\",\"type\":\"string\"}]}";
Schema.Parser parser = new Schema.Parser();
Schema schema = parser.parse(userSchema);
GenericRecord avroRecord = new GenericData.Record(schema);
avroRecord.put("f1", "value1");

record = new ProducerRecord<Object, Object>("topic1", key, avroRecord);
try {
  producer.send(record);
} catch(SerializationException e) {
  // may need to do something with it
}

有几个从类中获取模式的示例,我发现注释可以根据需要更改该模式。现在我如何获取POJO的实例并将其直接发送到序列化程序并让库完成从类中匹配模式然后将值复制到通用记录中的工作?我错了吗?我最终想做的是这样的事情:

String key = "key1";
Schema schema = ReflectData.get().getSchema(myObject.getClass());
GenericRecord avroRecord = ReflectData.get().getRecord(myObject, schema);

record = new ProducerRecord<Object, Object>("topic1", key, avroRecord);
try {
  producer.send(record);
} catch(SerializationException e) {
  // may need to do something with it
}

谢谢!

1 个答案:

答案 0 :(得分:1)

在这个例子中我创建了自己的序列化程序:

setVisible(true)