2016-10-31 9 views
0

Wir verwenden Apache Kafka (nicht konfluente Kafka) 0.10. Wir möchten AVRO Schema mit kafka einrichten. Ich habe avro Schema wie folgt.Apache Kafka mit zentralisiertem Avro-Schema

{ 
    "namespace": "Rule", 
    "type": "record", 
    "name": "RuleMessage", 
    "fields": [ 
    { 
     "name": "station", 
     "type": "string" 
    }, 
    { 
     "name": "model", 
     "type": "string" 
    } 
} 

Serialisierung Nachricht wie

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(); 
    } 

Dies funktioniert wie erwartet.

Aber möchte ein Avro-Schema auf der Themenebene einrichten, so dass das Thema Nachrichten zurückweist, wenn die Nachricht nicht das Avro-Schema erfüllt.

Gibt es sowieso, könnte ich dies mit Apache Kafka 0.10 tun.

Dank

Antwort

2

Sie Schema Registry Confluent ist (seine Open-Source-und Apache-Lizenz) mit Apache Kafka 0.10.0 verwenden können, ein Schema mit einem Thema zu verknüpfen. Es kommt mit Avro Serializern/DeSerializern, die die Avro-Schemas automatisch in der von Ihnen gewünschten Weise validieren.

Bitte beachten Sie, dass es nicht so etwas wie "Confluent Kafka" gibt - es wäre eine Markenverletzung, es zu haben. Confluent packt einfach Apache Kafka in seine Distribution, aber da sich die Schema-Registrierung auf github befindet, können Sie das verwenden, ohne Confluent zu verwenden, wenn Sie dies wünschen.