2016-06-28 2 views
1

분명히하기 위해 이벤트 소싱을위한 데이터 저장소로 카프카를 사용하려고하지 않고 단순히 이벤트를 복제하려고합니다.카프카에서 이벤트 소싱 스키마 시행

카프카의 Confluent Schema Registry은 생산자가 주제로 보낸 메시지의 스키마를 검증 할 수 있다는 점에서 매우 흥미로운 것 같습니다. 그러나, 내가 이해하는 바에 따르면 각 항목은 컨테이너 파일과 같이 주제별로 하나의 스키마로 취급됩니다.

이 제한 File 같은 하나의 집계에 대한 여러 메시지 스키마를해야합니다 이벤트 소스 스트림 작동하지 않습니다 : FileCreated, FileMoved, FileCopied, FileDeleted. 이들 각각을 별도의 주제에 넣으면 복잡하고 오류가 발생하기 쉽습니다.

같은 주제에 대해 여러 스키마를 지원하는 Schema Registry와 같은 도구가 있습니까?

명확히하기 위해 업데이트, 각 메시지는 위의 다른 스키마있을 것입니다.

FileCreated :

{ 
    type: "record", 
    name: "FileCreated", 
    fields: [ 
    { name: "id", type: "string" }, 
    { name: "name", type: "string" }, 
    { name: "path", type: "string" }, 
    { name: "size", type: "string" }, 
    { name: "mimeType", type": "string" }, 
    { name: "user", type: "string" }, 
    { name: "date", type: "long" } 
    ] 
} 

FileMoved :

{ 
    type: "record", 
    name: "FileMoved", 
    fields: [ 
    { name: "id", type: "string" }, 
    { name: "from", type: "string" }, 
    { name: "to", type: "string" }, 
    { name: "date", type: "long" }, 
    { naem: "user", type: "string" } 
    ] 
} 

FileDeleted : 예를 들어

{ 
    type: "record", 
    name: "FileDeleted", 
    fields: [ 
    { name: "id", type: "string" }, 
    { name: "date", type: "long" }, 
    { name: "user", type: "string" } 
    ] 
} 
+0

같은 질문은 avro 스키마의 json에서 "oneOf"를 지정하는 방법이 있습니까? – aasthetic

답변

3

Confluent Schema Registry 동일한 주제에 대한 사실 지원을 여러 스키마에 않습니다.

그렇지만 다른 유형의 데이터에 대해 동일한 주제를 사용하지 않는 것이 가장 좋습니다. 예를 들어 일반적으로 페이지 뷰 이벤트와 사용자 프로필 업데이트를 같은 주제에 쓰면 안됩니다.

동일한 주제에 대해 여러 스키마를 사용하는 일반적인 예는 스키마 진화를 허용하는 것입니다. 사용자 프로필 (예 : 사용자 이름 및 연령대)에 대한 기본 스키마로 시작하여 이후에 사용자 프로필 (사용자 이름, 나이, 지역, 기본 언어, 마지막 방문 날짜, 시간 등)에 대한 본격적인 스키마로 향상됩니다. ..).

는 여부에 상관없이 당신은 동일한 주제에 FileCreated, FileMoved, FileCopied, FileDeleted 당신에게 달려있다 저장할. 두 경우 모두 Confluent Schema Registry에서는 해당 스키마 (see docs)를 관리 할 수 ​​있습니다.

보다 구체적인 문서 포인터 :

  • Register a new schema. 동일한 주제 아래에 새/여러 스키마를 등록하려면 해당 API 호출을 통해 등록해야합니다. 새 스키마를 등록하는 경우 (즉, 초기 스키마가 이미 주체에 등록 된 경우) Avro 호환성 설정에 따라 실패 할 수 있습니다 (다음 항목 참조).
  • Defining Avro compatibility settings for schemas (전 세계 또는 동일한 주제/주제에 대해 등록 된 스키마의 경우) 예 : GET /config/(string: subject)은 주체에 대한 (Avro 스키마) 호환성 수준을 반환합니다.

인용 :

스키마가 구성된 호환성 수준 당 (임의있는 경우) 이전에 등록되어있는 스키마와 호환되어야한다. 구성된 호환성 수준은 GET /config/(string: subject)을 발급하여 얻을 수 있습니다. null이 돌려 주어지면, GET /config.

또한 valid (Avro schema) compatibility settingsNONE, FULL, FORWARD, BACKWARD입니다. 따라서 동일한 Kafka 주제에서 완전히 다른 데이터 유형을 저장하고 싶다면 해당 주제/주제에 대한 Avro 스키마 호환성을 NONE으로 설정하고 (b) 관련 Avro 스키마를 등록해야합니다. 해당 주제/주제 아래의 각 데이터 유형별.

+0

이 기능이 지원되는 문서의 특정 링크를 제공 할 수 있습니까? [빠른 시작] (http://docs.confluent.io/3.0.0/quickstart.html#quickstart)을 읽는 것만으로 7 단계에서 첫 번째 스키마와 호환되지 않는 두 번째 스키마가 거부되는 방법을 보여줍니다. 동일한 주제에 대해 여러 스키마를 등록 할 수있는 특정 API 또는 구성 설정이 있습니까? –

+0

@ MarkJMiller : 내 대답을 수정했습니다. 희망이 도움이됩니다. 설명해 주셔서 감사합니다. –

+0

Schema Registry가 이벤트 소싱 시나리오에서 스키마 적용을 허용하면 좋을 것입니다. 특히 이것은 Kafka 워드 프로세서가 호출 한 [특정 사용 사례] (https://kafka.apache.org/documentation.html#uses_eventsourcing)이므로 좋을 것입니다. . 이러한 시나리오에서는 버전 호환성을 강화하는 것이 좋습니다. –

관련 문제