728x90
Schema(Data Structure)
데이터를 만들어내는 Producer와 데이터를 사용하는 Consumer 간의 계약으로 사용

- 스키마가 없으면 시간이 지남에 따라, 제어된 방식으로 데이터 구조를 발전시킬 수단이 없게 됨
- 데이터 구조는 항상 비즈니스에 따라서 진화하는데, 이것을 Schema Evolution(스키마 진화)라고 함
Schema Evolution
비즈니스가 변경되거나 더 많은 애플리케이션이 동일한 데이터를 활용하기를 원함에 따라 기존 데이터 구조가 진화할 필요성 발생

AVRO(Data Serialization System)
Data를 Serialization을 제공하는 시스템
- Avro는 Apache Open Source Software 프로젝트
- Java를 포함한 많은 프로그래밍 언어에서 지원
- 데이터 구조 형식 제공(데이터 포멧 / 데이터 스키마 형식으로 제공)
- Avro 데이터는 바이너리이므로 데이터를 효율적으로 저장
장점
- 압축, 고성능, Binary 포맷
- Java를 포함한 많은 프로그래밍 언어에서 지원
- Avro 데이터가 파일에 저장되면 해당 스키마가 함께 저장되므로 나중에 모든 프로그램에서 역직렬화 하여 파일 처리 가능
- Avro 스키마는 JSON으로 정의되므로, 이미 JSON 라이브러리가 있는 언어에서 구현이 용이(Schema Evolution 을 쉽게 지원)
- 데이터의 타입을 알수 있다.
- Confluent Schema Registry에서 사용 가능
단점
- Binary 형태로 Serialization되기 때문에 데이터를 쉽게 보고 해석하기 어려움(디버깅, 개발시 불편함)
Schema Evolution(Compatibility)

- 스키마는 버전이 증가하므로 버전이 올라갔을 때, 하위 버전을 정보를 읽을 수 있는지을 여부에 따라 결정이 된다.
- Backward Compatiblilty: 필드가 삭제되거나, 기본 값이 있는 필드가 추가된 경우 새로운 스키마를 사용해서 이전 데이터를 읽는 것이 가능하다.
- 이전 버전과의 호환성을 유지
- Forward Compatibility: 필드가 삭제되거나, 기본 값이 있는 필드가 추가된 경우 이전 스키마를 사용하여 새로운 데이터를 읽는 것이 가능한 것을 의미
- 최신 버전과의 호환성을 유지
- Full Compatibility: 필드가 삭제되거나, 기본 값이 있는 필드가 추가된 경우 양방향 스키마를 사용하여 이전, 새로운 데이터를 읽는 것이 가능한 것을 의미
Schema 설계 시 고려할 점
- 삭제될 가능성이 있는 필드이면 default value 를 반드시 지정
- 추가되는 필드라면 default value 를 지정
- 필드의 이름을 변경하지 않음
Confluent Schema Registry(스키마 저장소)
Confluent Schema Registry는 스키마의 중앙 집중식 관리를 제공
- 모든 스키마의 버전 기록을 저장
- Avro 스키마 저장 및 검색을 위한 RESTful 인터페이스 제공
- 스키마를 확인하고 데이터가 스키마와 일치하지 않으면 예외를 throw
- 호환성 설정(Backward, Forward, Full)에 따라 스키마 진화(Schema Evolution) 가능
각 메시지와 함께 Avro 스키마를 보내는 것은 비효율적
- 대신 Avro 스키마를 나타내는 Global Unique ID가 각 메시지와 함께 전송
- 효율적으로 네트워크와 전송 데이터를 사용할 수 있다.
Schema Registry는 특별한 Kafka Topic에 스키마 정보를 저장
- “_schemas” Topic
- kafkastore.topic 파라미터로 변경 가능
Schema 등록 및 Data Flow

- 프로듀서가 Local Cache를 확인해서 없으면, Concluent Schema Registry에 등록한다.
- Concluent Schema Registry가 Local Cache를 확인해 값이 없으면, id로 Schema를 전달해 준다.
- 실제 스키마를 전달하지 않기 때문에 Concluent Schema Registry를 계속 리다이렉트 하는것이 아니라 Concluent Schema Registry 요청을 필요할떄만 요청을 하고 이를 받아오는 것이 핵심이다.
728x90
'Kafka 완전 정복 : 클러스터 구축부터 MSA 환경 활용까지 > 기본,심화 개념, 아키텍처와 생태계' 카테고리의 다른 글
| Ch05. Kafka Streams와 ksqlDB 개념 및 이해 - Kafka Streams, ksqlDB (0) | 2023.05.07 |
|---|---|
| Ch04. Apache Kafka Connect 개념 및 이해 - Single Message Transform(SMT), Converter (0) | 2023.05.07 |
| Ch04. Apache Kafka Connect 개념 및 이해 - Apache Kafka Connect (0) | 2023.05.07 |
| Ch03. Apache Kafka 구성 및 관리 - Kafka Cluster Expansion, Shrink (0) | 2023.05.03 |
| Ch03. Apache Kafka 구성 및 관리 - Log Retention, Cleanup Policy (0) | 2023.05.03 |