Kafka 완전 정복 : 클러스터 구축부터 MSA 환경 활용까지/기본,심화 개념, 아키텍처와 생태계

Ch05. Confluent Schema Registry 개념 및 이해 - Confluent Schema Registry

webmaster 2023. 5. 7. 22:49
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