JangBaGeum.gif

[kafka] Schema Registry 호환성 본문

Backend/Kafka

[kafka] Schema Registry 호환성

장바금 2024. 5. 27. 23:02

 

이전글

 

[Kafka] 스키마 레지스트리 (Schema Registry)

최신 팀 내에서 EDA(Event Driven Architecture) 바람이 불면서 인프라 개선을 위한 마이그레이션 작업 중 이벤트 브로커로 Kafka를 도입하게 되었다. Kafka를 중앙에 두고 양측의 이벤트 발행자와 소비자

jangbageum.tistory.com

 


하나의 스키마는 여러 버전으로 관리가 가능하여 의존성이 있는 Producer와 Consumer에게는 스키마에 대한 호환성이 지켜줘야 되니다.

이러한 점 때문에 스키마 레지스트리는 호환성 정책을 통해 스키마 버전 업데이트, 스키마 검증 등 스키마 변화에 대해서 대응이 가능하도록 되어있다.

 

호환성 관리

스키마는 수정될 때마다 스키마 레지스트리에서는 새로운 ID를 발급한다.

스키마가 수정되고 새로운 ID가 발급되었을 시 Producer와 Consumer는 사용하고 있는 스키마의 버전이 최신 버전이 아닐 시 새로운 수정된 형태의 메시지를 어떻게 처리해야 할지는 미리 설정된 호환성 정책에 따라 결정한다.

대표적인 호환성 타입은 아래 표와 같다.

호환성 타입 스키마 resolution 선 적용
BACKWARD 컨슈머에서 새 버전 스키마를 사용하지만 과거 버전 스키마도 호환 가능 CONSUMER
FORWARD 컨슈머에서 과거 버전 스키마를 사용하지만 새 버전 스키마도 호환 가능 PRODUCER
FULL BACKWARD와 FORWARD 모두 호환 가능 CONSUMER or PRODUCER
NONE 호환성 검사를 하지 않음 none
BACKWARD_TRANSITIVE 컨슈머에서 새 버전 스키마를 사용하지만 “모든” 과거 버전 스키마도 호환 가능 CONSUMER
FORWARD_TRANSITIVE 컨슈머에서 과거 버전 스키마를 사용하지만 이후 “모든” 새 버전 스키마도 호환 가능 PRODUCER
FULL_TRANSITIVE 모든 버전에 대해 호환성이 있음 CONSUMER or PRODUCER

 

*_TRANSITIVE : 일반적인 버전 호환성은 한 버전 차이에 대한 호환성 내용이지만, TRANSITIVE의 경우 모든 버전에 대한 호환성을 다룸

 

하위 호환성 예시 (BACKWARD)

https://www.slideshare.net/slideshow/schema-registry-101-with-bill-bejeck-kafka-summit-london-2022/251713563

  • Consumer에 변경 스키마 선적용 관점
  • 삭제 필드는 무시
    • Field_A는 무시
  • 새로 추가된 필드는 기본 값을 사용
    • 새로운 필드 추가 시 기본값이 할당되어 있어야 하위 호환성을 만족
    • newField는 기본 값 할당

상위 호환성 예시 (FORWARD)

https://www.slideshare.net/slideshow/schema-registry-101-with-bill-bejeck-kafka-summit-london-2022/251713563

  • Producer에 변경 스키마 선적용 관점
  • 필드 삭제의 경우 기본 값을 사용
    • 필드 삭제 시 기본 값이 있는 필드를 삭제해야 상위 호환성에 만족
    • 삭제 필드인 newField_A는 기본 값 사용
  • 새로 추가된 필드는 무시된다.
    • 새로 추가된 AnotherNewField는 무시

 

 

'Backend > Kafka' 카테고리의 다른 글

[Kafka] 스키마 레지스트리 (Schema Registry)  (0) 2024.05.25