DEV BLOG

[Kafka] Confluent schema registry의 schema 호환성

|

###궁금증

Schema version이 달라지면 어떻게 호환성이 관리될까?

시간이 지나면 초기 개발과 달리 스키마에 필드를 추가하거나 삭제를 해야할 일이 발생할 수 있다.


그렇다면 버전이 업이 되고 producer와 consumer에서는 어떤 버전을 처리하고 어떤 순서로 먼저 반영을 하는 것이 좋을까?


호환성 유형

Confluent Schema Registry 기본 호환성 유형은 BACKWARD

Compatibility Type Changes allowed Check against which schemas Upgrade first
BACKWARD fields 삭제 가능
optional fields 추가 가능
마지막 버전 Consumers
BACKWARD_TRANSITIVE fields 삭제 가능
optional fields 추가 가능
모든 이전 버전 Consumers
FORWARD fields 추가 가능
optional fields 삭제 가능
마지막 버전 Producers
FORWARD_TRANSITIVE fields 추가 가능
optional fields 삭제 가능
모든 이전 버전 Producers
FULL optional fields 추가 가능
optional fields 삭제 가능
마지막 버전 순서 상관 없음
FULL_TRANSITIVE optional fields 추가 가능
optional fields 삭제 가능
모든 이전 버전 순서 상관 없음
NONE 모든 변경 사항이 가능함 호환성 검사 비활성화 Depends

해당 스키마의 호환성 유형이 BACKWARD이라면 새 스키마를 사용하는 Consumer가 마지막 스키마로 생성 된 데이터를 읽을 수 있다.

먼저 모든 Consumer를 업데이트된 버전을 consume할 수 있게 처리를 한 후 그 다음에 업데이트된 버전으로 produce할 수 있도록 producer를 처리하는 순서로 진행한다.

하지만 이경우엔 필드 삭제나, optional 필드를 추가하는 경우만 호환성을 유지할 수 있다.


Reference