이전글
하나의 스키마는 여러 버전으로 관리가 가능하여 의존성이 있는 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)
- Consumer에 변경 스키마 선적용 관점
- 삭제 필드는 무시
- Field_A는 무시
- 새로 추가된 필드는 기본 값을 사용
- 새로운 필드 추가 시 기본값이 할당되어 있어야 하위 호환성을 만족
- newField는 기본 값 할당
상위 호환성 예시 (FORWARD)
- Producer에 변경 스키마 선적용 관점
- 필드 삭제의 경우 기본 값을 사용
- 필드 삭제 시 기본 값이 있는 필드를 삭제해야 상위 호환성에 만족
- 삭제 필드인 newField_A는 기본 값 사용
- 새로 추가된 필드는 무시된다.
- 새로 추가된 AnotherNewField는 무시
'Backend > Kafka' 카테고리의 다른 글
[Kafka] 스키마 레지스트리 (Schema Registry) (0) | 2024.05.25 |
---|