2016-10-31 3 views
0

Apache kafka (합리적인 카프카가 아님) 0.10을 사용합니다. kafka로 AVRO 스키마를 설정하고 싶습니다. 다음과 같이 avro 스키마가 있습니다.중앙 집중식 Avro 스키마가있는 Apache Kafka

{ 
    "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을 사용하여이 작업을 수행 할 수 있습니다.

감사

답변

2

당신은 주제와 스키마를 연결하는 아파치 카프카 0.10.0로 (라이센스의 오픈 소스 아파치) 플루의 스키마 레지스트리를 사용할 수 있습니다. Avro Serializers/DeSerializers가 도착하면 요청한 방식대로 Avro 스키마를 자동으로 확인합니다.

"Confluent Kafka"와 같은 것은 존재하지 않으므로 상표권 침해가 될 수 있습니다. Confluent는 편리하게 아파치 카프카를 배포하기 만하면되지만, 스키마 레지스트리가 github에 있기 때문에 원하는 경우 Confluent 패키징을 사용하지 않고도 사용할 수 있습니다.