我们使用Apache Kafka(不是融合的kafka)0.10。我们想用kafka设置AVRO架构。 我有以下avro架构。
{
"namespace": "Rule",
"type": "record",
"name": "RuleMessage",
"fields": [
{
"name": "station",
"type": "string"
},
{
"name": "model",
"type": "string"
}
}
序列化消息,如
public byte[] serializeMessage(EventMessage eventMessage) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
BinaryEncoder encoder = EncoderFactory.get().binaryEncoder(out, null);
DatumWriter<EventMessage> writer = new SpecificDatumWriter<EventMessage>(EventMessage.getClassSchema());
writer.write(eventMessage, encoder);
encoder.flush();
out.close();
return out.toByteArray();
}
这是按预期工作的。
但是,想在主题级别设置Avro Schema,以便在邮件不符合avro架构时主题将拒绝邮件。
无论如何,我可以用Apache Kafka 0.10做到这一点。
由于
答案 0 :(得分:3)
您可以使用Confluent的Schema Registry(其开源和Apache许可)与Apache Kafka 0.10.0将架构与主题相关联。它与Avro Serializers / DeSerializers一起到达,可以完全按照您的要求自动验证Avro架构。
请注意,这不是“Confluent Kafka” - 拥有它会违反商标。为方便起见,Confluent简单地将Apache Kafka打包到其发行版中,但由于Schema Registry位于github上,如果您愿意,可以不使用Confluent包装来使用它。