具有集中式 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 打包的情况下使用它。