7장. Java 클라이언트의 serializers/deserializers를 사용하여 Kafka 메시지 검증
Service Registry는 Java로 작성된 Kafka 생산자 및 소비자 애플리케이션을 위한 클라이언트 직렬화기/deserializers(SerDes)를 제공합니다. Kafka 생산자 애플리케이션은 serializers를 사용하여 특정 이벤트 스키마를 준수하는 메시지를 인코딩합니다. Kafka 소비자 애플리케이션은 deserializers를 사용하여 특정 스키마 ID를 기반으로 올바른 스키마를 사용하여 메시지를 직렬화했는지 확인합니다. 이렇게 하면 스키마가 일관되게 사용되며 런타임에 데이터 오류를 방지할 수 있습니다.
이 장에서는 생산자 및 소비자 클라이언트 애플리케이션에서 Kafka 클라이언트 SerDes를 사용하는 방법을 설명합니다.
사전 요구 사항
- 1장. 서비스 레지스트리 소개 을 읽었습니다.
- 서비스 레지스트리가 설치되어 있습니다.
Kafka 생산자 및 소비자 클라이언트 애플리케이션을 생성했습니다.
Kafka 클라이언트 애플리케이션에 대한 자세한 내용은 OpenShift에서 AMQ Streams 배포 및 업그레이드를 참조하십시오.
7.1. Kafka 클라이언트 애플리케이션 및 서비스 레지스트리 링크 복사링크가 클립보드에 복사되었습니다!
서비스 레지스트리는 클라이언트 애플리케이션 구성에서 스키마 관리를 분리합니다. 클라이언트 코드에서 URL을 지정하여 Java 클라이언트 애플리케이션에서 서비스 레지스트리의 스키마를 사용하도록 설정할 수 있습니다.
서비스 레지스트리에 스키마를 저장하여 클라이언트 애플리케이션에서 참조되는 메시지를 직렬화 및 역직렬화하여 전송 및 수신하는 메시지가 해당 스키마와 호환되는지 확인할 수 있습니다. Kafka 클라이언트 애플리케이션은 런타임 시 서비스 레지스트리에서 스키마를 내보내거나 가져올 수 있습니다.
예를 들어 스키마가 진화하여 서비스 레지스트리에서 규칙을 정의하여 스키마 변경이 유효하고 애플리케이션에서 사용하는 이전 버전이 중단되지 않도록 할 수 있습니다. 서비스 레지스트리는 수정된 스키마를 이전 스키마 버전과 비교하여 호환성을 확인합니다.
서비스 레지스트리 스키마 기술
Service Registry에서는 다음과 같은 스키마 기술에 대한 스키마 레지스트리 지원을 제공합니다.
- Avro
- protobuf
- JSON Schema
이러한 스키마 기술은 Service Registry에서 제공하는 Kafka 클라이언트 serializer/deserializer(SerDes) 서비스를 통해 클라이언트 애플리케이션에서 사용할 수 있습니다. 서비스 레지스트리에서 제공하는 SerDes 클래스의 완성 및 사용은 다를 수 있습니다. 다음 섹션에서는 각 스키마 유형에 대한 세부 정보를 제공합니다.
생산자 스키마 구성
생산자 클라이언트 애플리케이션은 직렬화기를 사용하여 특정 브로커 항목에 보낸 메시지를 올바른 데이터 형식으로 배치합니다.
생산자가 직렬화에 서비스 레지스트리를 사용할 수 있도록 하려면 다음을 수행합니다.
- 서비스 레지스트리(아직 존재하지 않는 경우)에 스키마를 정의하고 등록 합니다.
다음을 사용하여 프로듀서 클라이언트 코드를 구성합니다.
- 서비스 레지스트리의 URL
- 메시지와 함께 사용할 Service Registry serializer
- Kafka 메시지를 서비스 레지스트리의 스키마 아티팩트에 매핑하는 전략
- 서비스 레지스트리에서 직렬화에 사용되는 스키마를 검색하거나 등록하는 전략
스키마를 등록한 후 Kafka 및 Service Registry를 시작할 때 스키마에 액세스하여 프로듀서에서 Kafka 브로커 주제로 전송된 메시지의 포맷을 지정할 수 있습니다. 또는 구성에 따라 생산자는 처음 사용할 때 스키마를 자동으로 등록할 수 있습니다.
스키마가 이미 존재하는 경우 서비스 레지스트리에 정의된 호환성 규칙을 기반으로 레지스트리 REST API를 사용하여 새 버전을 생성할 수 있습니다. 버전은 스키마가 진화할 때 호환성 검사에 사용됩니다. 그룹 ID, 아티팩트 ID 및 버전은 스키마를 식별하는 고유한 10.0.0.1을 나타냅니다.
소비자 스키마 구성
소비자 클라이언트 애플리케이션은 deserializer를 사용하여 특정 브로커 주제에서 올바른 데이터 형식으로 사용하는 메시지를 가져옵니다.
소비자가 deserialization에 서비스 레지스트리를 사용할 수 있도록 하려면 다음을 수행합니다.
- 서비스 레지스트리를 사용하여 스키마를 정의하고 등록합니다 (아직 존재하지 않는 경우)
- 서비스 레지스트리의 URL
- 메시지와 함께 사용할 서비스 레지스트리 역직자
- deserialization을 위해 입력 데이터 스트림
글로벌 ID를 사용하여 스키마 검색
기본적으로 스키마는 사용 중인 메시지에 지정된 전역 ID를 사용하여 deserializer에 의해 서비스 레지스트리에서 검색됩니다. 스키마 글로벌 ID는 생산자 애플리케이션의 구성에 따라 메시지 헤더 또는 메시지 페이로드에 있을 수 있습니다.
메시지 페이로드에서 글로벌 ID를 찾을 때 데이터의 형식은 매직 바이트로 시작되어 소비자에게 신호로 사용되는, 글로벌 ID 및 메시지 데이터를 정상적으로 사용합니다. 예를 들면 다음과 같습니다.
...
# ...
[MAGIC_BYTE]
[GLOBAL_ID]
[MESSAGE DATA]
그런 다음 Kafka 및 Service Registry를 시작하면 스키마에 액세스하여 Kafka 브로커 주제에서 수신한 메시지를 포맷할 수 있습니다.
콘텐츠 ID를 사용하여 스키마 검색
또는 아티팩트 콘텐츠의 고유 ID인 콘텐츠 ID를 기반으로 서비스 레지스트리에서 스키마를 검색하도록 구성할 수 있습니다. 글로벌 ID는 아티팩트 버전의 고유 ID입니다.
콘텐츠 ID는 버전을 고유하게 식별하는 것이 아니라 버전 콘텐츠만 고유하게 식별합니다. 여러 버전이 정확히 동일한 콘텐츠를 공유하는 경우 해당 버전에는 다른 글로벌 ID가 있지만 동일한 콘텐츠 ID가 있습니다. Confluent Schema Registry는 기본적으로 콘텐츠 ID를 사용합니다.