具有集中式 Avro 架构的 Apache Kafka
Apache Kafka with centralized Avro schema
我们使用 Apache Kafka(不是 confluent 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 模式,这样如果消息不符合 avro 模式,主题将拒绝消息。
无论如何,我可以用 Apache Kafka 0.10 做到这一点。
谢谢
您可以将 Confluent 的模式注册表(其开源和 Apache 许可)与 Apache Kafka 0.10.0 一起使用,将模式与主题相关联。它与 Avro Serializers/DeSerializers 一起提供,可以按照您要求的方式自动验证 Avro 模式。
请注意,这不是 "Confluent Kafka" 这样的东西 - 拥有它会构成商标侵权。为方便起见,Confluent 只是将 Apache Kafka 打包到其发行版中,但由于 Schema Registry 位于 github,如果您愿意,可以在不使用 Confluent 打包的情况下使用它。
我们使用 Apache Kafka(不是 confluent 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 模式,这样如果消息不符合 avro 模式,主题将拒绝消息。
无论如何,我可以用 Apache Kafka 0.10 做到这一点。
谢谢
您可以将 Confluent 的模式注册表(其开源和 Apache 许可)与 Apache Kafka 0.10.0 一起使用,将模式与主题相关联。它与 Avro Serializers/DeSerializers 一起提供,可以按照您要求的方式自动验证 Avro 模式。
请注意,这不是 "Confluent Kafka" 这样的东西 - 拥有它会构成商标侵权。为方便起见,Confluent 只是将 Apache Kafka 打包到其发行版中,但由于 Schema Registry 位于 github,如果您愿意,可以在不使用 Confluent 打包的情况下使用它。