Schema Registry 기본 사용법 간단 정리
Schema Registry 기본 사용법을 간단하게 정리한다. ( 지속 업데이트 예정 )
Schema Registry 배포
Confluent Schema Registry는 소스 코드만 오픈소스로 공개하고 공식 이미지는 제공되지 않는다.
그래서 bitnami에서 제공하는 Docker 이미지를 사용했고, 실제 배포는 bitnami helm chart로 진행했다.
참고 : bitnami/schema-registry - Docker Hub
kafka-ui에서는 클러스터마다 schema registry를 별도로 설정해야 한다.
kafka-ui helm chart values.yaml 예시
yamlApplicationConfig:
kafka:
clusters:
- name: dev-kafka-cluster
bootstrapServers: dev-kafka-cluster-kafka-bootstrap.common.svc:9092
schemaRegistry: http://dev-schema-registry.common.svc:8081
- name: prod-kafka-cluster
bootstrapServers: ...
schemaRegistry: ...
kafka _schemas 토픽을 통해 schema가 관리되는 것을 확인할 수 있다.
Schema 등록
Schema는 Subject를 기준으로 등록된다.
구조 예시 ( TopicNameStrategy )
Subject: "user-events-value"
├─ Schema v1: {"type": "record", "fields": [{"name": "id", "type": "int"}]}
├─ Schema v2: {"type": "record", "fields": [{"name": "id", "type": "int"}, {"name": "name", "type": "string"}]}
SubjectNameStrategy라고 subject 이름을 결정하는 전략들이 있는데 아래 내용을 참고하면 도움이 된다.
Confluent Schema Registry 도입기! - by Yogiyo
Schema Registry는 새로운 버전 등록 시 호환성을 검사해준다. 타입에 대해서는 아래 링크를 참고하면 된다.
Confluent schema registry의 schema 호환성
Schema Type
등록 가능한 Schema Type은 AVRO, PROTOBUF, JSON이다.
JSON
JSON Schema는 https://json-schema.org/draft-07/schema#를 따른다고 한다.
AI로 생성해 본 예시이다. schema-registry-json-example.json - GitHub Gist
URL로 schema를 조회할 수 있다. 예시 : http://dev-schema-registry.common.svc:8081/subjects/user-events-value/versions/latest
{
'subject': 'user-events-value',
'version': 1,
'id': 3,
'schemaType': 'JSON',
'schema': '{ ... }'
}
AVRO
AVRO는 JSON보다 데이터 크기가 작고, 직렬화/역직렬화 성능이 뛰어나다. 또한 Schema Registry와 쉽게 연동할 수 있어,
스키마 변화에 유연하게 대응할 수 있는 장점이 있다.
참고 : 4. Schema Registry와 함께 안전하게
Kafka Connect를 사용할 경우 자동으로 스키마 변환이 된다고 하는데, 추후 Connect를 사용할 때 직접 확인해볼 예정이다.
PROTOBUF
기본적으로 PROTOBUF는 Schema Registry의 .proto 정보를 런타임에서 바로 사용할 수 없다.
참고 : Databricks에서는 가능한 것으로 보인다. Use protobuf with Confluent Schema Registry - Databricks
protoc로 컴파일한 뒤 생성된 descriptor 파일을 불러와서 사용해야 한다. pyspark에서는 from_protobuf 함수와 함께 사용할 수 있다.
참고 : Kafka + Protobuf + Spark Stream Processing without Schema Registry - in Medium
References
: