具有集中式Avro架构的Apache Kafka

时间:2016-10-31 21:22:26

标签: apache-kafka avro

我们使用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做到这一点。

由于

1 个答案:

答案 0 :(得分:3)

您可以使用Confluent的Schema Registry(其开源和Apache许可)与Apache Kafka 0.10.0将架构与主题相关联。它与Avro Serializers / DeSerializers一起到达,可以完全按照您的要求自动验证Avro架构。

请注意,这不是“Confluent Kafka” - 拥有它会违反商标。为方便起见,Confluent简单地将Apache Kafka打包到其发行版中,但由于Schema Registry位于github上,如果您愿意,可以不使用Confluent包装来使用它。