Apache Kafka를 기반으로 데이터 스트리밍 플랫폼에서 스키마 관리를 위한 중앙 집중화된 서비스
즉, 메시지의 구조(스키마)를 중앙에서 관리하고, 데이터의 일관성과 호환성을 보장하는 독립적인 애플리케이션
카프카의 topic은 정해진 규정이 없기 때문에 어떤 형태의 메세지라고 Pub/Sub 할 수 있다. 그렇기 때문에 카프카는 2가지 특징을 갖게 되는데,
그렇기 때문에 발생하는 문제가 2가지가 있다.
즉, 브로커는 메세지를 한번 저장하고 나면 이후에 수정할 수 없다.
요컨데, 도중에 한 프로듀서가 스키마를 변경해서 새로운 형태의 메세지를 발행했을때, 각 컨슈머는 해당 부분에 알 수 있는 방법이 없다.
이러한 문제를 방지 하기 위해 스키마의 변경을 중앙에서 체계적으로 관리하고 스트림에서 호환성을 보장하기 위해서 등장하게 되었다.
기존 데이터 스트림에 새로운 필드를 추가하거나 수정하는 등의 스키마를 변경할 때, 업데이트된 스키마를 등록하고 호환성 여부를 확인하기 때문에 안전하게 스키마를 진화시킬 수 있다.
즉, 스키마 변경시, 기존 스키마와의 호환성을 검사하여 데이터 오류 처리를 방지한다.
위의 기능들 중에 가장 중요한 것은 스키마 검증 기능이다. 운영자가 스키마를 등록하여 사용할 수 있지만, 스키마를 버전별로 호환성을 강제함으로써 개발 규칙을 세우기 때문이다.
| 호환성 타입 | 허용되는 변경 사항 | 비교 대상 스키마 | 먼저 업그레이드해야 할 대상 | 설명 |
|---|---|---|---|---|
BACKWARD | - 필드 삭제 - 선택적 필드 추가 | 직전 버전만 비교 | Consumer(소비자) | 새 Producer가 보낸 메시지를 예전 Consumer가 문제없이 읽을 수 있는지 확인합니다. 주로 Consumer 먼저 업그레이드해야 할 때 사용한다. |
FORWARD | - 필드 추가 - 선택적 필드 삭제 | 직전 버전만 비교 | Producer(생산자) | 예전 Producer가 보낸 메시지를 새 Consumer가 읽을 수 있는지 확인합니다. Producer 먼저 업그레이드할 때 적합하다. |
FULL | - 선택적 필드 추가 및 삭제 | 직전 버전만 비교 | 순서 상관없음 | BACKWARD와 FORWARD를 모두 만족해야 합니다. 즉, 양방향 호환성을 가진다. |
NONE | - 모든 변경 허용 | 호환성 검사 없음 | 상황에 따라 다름 | 스키마 변경에 대한 제한이 전혀 없습니다. 실험적이거나 일시적인 상황에서만 사용해야 한다 |