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 .proto file or when using java_multiple_files = true.
  • In Java and Kotlin, the package is used as the Java package, unless you explicitly provide an option java_package in your .proto file.

✅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 RegistryConfigure Clients to Schema RegistryDeploy in ProductionDeployment ArchitecturesUse Schema Registry to Migrate Schemas in Confluent PlatformProtobuf Schema Serializer and Deserializer for Schema Registry on Confluent PlatformProtocol Buffers