Confluent Cloud ‐ Manage Schema Registry and Govern Data Streams - dnwls16071/Backend_Summary GitHub Wiki
📚 Schema Registry⭐
- Schema Registry는 메시지 데이터에 대한 스키마 관리 및 검증, 네트워크를 통한 데이터 직렬화/역직렬화를 위한 중앙 집중식 저장소를 제공한다.
- Schema Registry는 데이터 관리를 위한 핵심 구성 요소로 데이터 품질, 표준 준수, 데이터 계보에 대한 가시성, 감사 기능, 효율적인 애플리케이션 개발 프로토콜 및 시스템 성능을 보장하는 데 도움이 된다.
- 여기서 스키마(Schema)는 메시지 데이터 구조를 정의하는 역할을 수행한다.
- 스키마는 허용되는 데이터 유형과 형식 및 관계를 정의한다. 스키마는 데이터 레코드의 구조, 개별 필드의 데이터 유형, 필드 간의 관계 및 데이터에 적용되는 모든 제약 조건이나 규칙을 설명하는 역할을 한다.
📚 About Schema Registry
- Schema Registry는 Confluent Cloud의 Essentials 및 Advanced Stream Governance 패키지와 자체 관리 Confluent Platform 프리미엄 기능으로 제공되는 스트림 거버넌스의 핵심 구성 요소이다.
- Schema Registry는 데이터 처리 및 직렬화에 사용되는 스키마를 관리하고 검증하기 위한 중앙 집중식 저장소를 제공한다.
- 이벤트 기반 시스템인 Confluent Broker는 Schema Registry를 사용해 프로듀서와 컨슈머 간 Kafka 메시지 데이터와 이벤트를 지능적으로 전송한다.
- Schema Registry는 데이터 검증, 호환성 검사, 버전 관리, 진화 등 여러 이점을 제공한다. 또한 데이터 파이프라인의 개발 및 유지보수를 간소화하고 데이터 호환성 문제, 데이터 손상 및 데이터 손실의 위험을 줄여준다.
- Schema Registry를 사용하면 데이터 형식과 버전에 대한 스키마를 정의하고 레지스트리에 등록할 수 있다. 등록되면 스키마는 다양한 시스템과 애플리케이션에서 공유 및 재사용을 할 수 있다.
- 프로듀서가 데이터를 브로커에게 보내면 해당 데이터의 스키마가 메시지 헤더에 포함되며, Schema Registry는 스키마가 유효하고 해당 주제에 대한 예상 스키마와 호환되도록 보장해준다.
📚 Schema Registry Concepts for Confluent Platform
- 실제 데이터는 Kakfa에, 스키마 정의는 Schema Registry에 별도로 저장한다.
- 메시지 = 스키마 ID + 실제 데이터, 전체 스키마를 매번 전송하지 않고 ID만 포함해 네트워크 오버헤드를 최소화
- 자동화된 직렬화/역직렬화 제공 - 스키마 등록 후 데이터를 직렬화해 프로듀서로 카프카에 전송, 그리고 카프카 토픽으로부터 수신해 스키마 ID로 스키마를 조회해 데이터를 역직렬화
Kafka Topic
- 메시지들의 집합
- 각 메시지는 key-value 쌍
- key 또는 value가 Avro/Json/Protobuf로 직렬화 가능
Schema
- 데이터 포맷의 구조를 정의
Subject
- 스키마가 진화할 수 있는 범위를 정의
- Schema Registry에서 스키마 버전 관리의 단위
📚 Protobuf Schema Serializer and Deserializer for Schema Registry on Confluent Platform⭐
Protobuf serializer
Protobuf deserializer
Create and use schemas(Confluent Cloud Version)
Kafka producer configurations
Kafka consumer configurations
✅Company
- Note: The public import functionality available in Java is most effective when moving an entire
.protofile or when usingjava_multiple_files = true. - In Java and Kotlin, the package is used as the Java package, unless you explicitly provide an option
java_packagein your.protofile.
✅Terraform
- Terraform 명령어
- Apply전 변경사항 확인 명령어 →
terraform plan -var-file="variables/variables-local.tfvars” - Confluent Cloud에 실제로 반영 →
terraform apply -var-file="variables/variables-local.tfvars”
✅Trouble Shooting List
│ Error: Backend initialization required, please run "terraform init"
│
│ Reason: Initial configuration of the requested backend "s3"
│
│ The "backend" is the interface that Terraform uses to store state,
│ perform operations, etc. If this message is showing up, it means that the
│ Terraform configuration you're using is using a custom configuration for
│ the Terraform backend.
│
│ Changes to backend configurations require reinitialization. This allows
│ Terraform to set up the new configuration, copy existing state, etc. Please run
│ "terraform init" with either the "-reconfigure" or "-migrate-state" flags to
│ use the current configuration.
│
│ If the change reason above is incorrect, please verify your configuration
│ hasn't changed and try again. At this point, no changes to your existing
│ configuration or state have been made.
✅Design
- 문자 메시지 서비스와 향후 이관될 메일 서비스를 카프카 기반의 비동기 서비스로 전환
- SMS/LMS/MMS 서비스의 양식이 살짝 달라서 이를 어떻게 처리할 것인지에 대한 고민
- ENUM으로 타입을 구분하고 필드를 선택적으로 취할 수 있는지?
optional: (recommended) An optional field is in one of two possible states:- the field is set, and contains a value that was explicitly set or parsed from the wire. It will be serialized to the wire.
- the field is unset, and will return the default value. It will not be serialized to the wire.
repeated: this field type can be repeated zero or more times in a well-formed message. The order of the repeated values will be preserved.
Reference
❗Configure Schema Registry ❗Configure Clients to Schema Registry ❗Deploy in Production ❗Deployment Architectures ❗Use Schema Registry to Migrate Schemas in Confluent Platform ❗Protobuf Schema Serializer and Deserializer for Schema Registry on Confluent Platform ❗Protocol Buffers