Event Streams 스키마 레지스트리 사용

스키마 레지스트리는 스키마를 관리하고 유효성을 검증하기 위한 중앙 집중식 저장소를 제공합니다. 스키마 레지스트리의 스키마는 이벤트를 생성하는 프로그램이 해당 이벤트를 이용하는 다른 프로그램에 제공하는 명시적 계약을 제공합니다.

스키마 개요

Apache Kafka는 데이터를 처리할 수 있으나 메시지에 있는 정보를 유효성 검증하지 않습니다. 그러나 데이터를 효율적으로 처리하려면 종종 특정한 형식으로 된 명확한 정보가 포함되어야 합니다. 스키마를 사용하면 생성자와 이용자 모두 올바른 구조를 사용할 수 있도록 보장함으로써 메시지에 있는 데이터의 구조를 정의할 수 있습니다.

스키마는 생성자가 사전 정의된 구조를 따르는 데이터를 작성할 수 있도록 하며, 각 필드의 유형과 함께 필요한 필드를 정의합니다. 그러면 이용자가 이 정의를 사용하여 해당 데이터를 구문 분석하고 올바르게 해석할 수 있습니다. Event Streams 엔터프라이즈 플랜에서는 스키마를 지원하고 스키마를 사용 및 관리하기 위한 스키마 레지스트리를 포함합니다.

일반적으로 토픽에 대한 모든 메시지가 동일한 스키마를 사용합니다. 메시지의 키와 값을 스키마별로 각각 설명할 수 있습니다.

스키마 개요 다이어그램.
스키마 개요
의 키 및 값 쌍에 대한 구조를 정의하는 데 도움이 되는 방법을 표시하는 다이어그램

스키마 레지스트리

스키마는 Event Streams 스키마 레지스트리에 저장됩니다. 스키마의 버전화된 히스토리를 저장하는 것 외에도, 스키마를 검색하기 위한 인터페이스를 제공합니다. 각 엔터프라이즈 플랜 Event Streams 인스턴스에는 고유한 스키마 레지스트리가 있습니다. 최대 1000개의 스키마를 엔터프라이즈 인스턴스에 저장할 수 있습니다.

생산자와 소비자는 스키마 레지스트리에 저장된 지정된 스키마에 대해 데이터를 검증합니다( Kafka 브로커를 거치는 것 외에도). 스키마는 이러한 방법을 통해 메시지로 전송될 필요가 없습니다. 이는 메시지의 크기가 좀 더 작을 수 있음을 의미합니다.

스키마 레지스트리 아키텍처 다이어그램.
)에서 스키마를 검색하고 있습니다. 스키마 레지스트리 아키텍처

Apache Avro 데이터 형식

스키마는 Apache Kafka에서 일반적으로 사용되는 오픈 소스 데이터 직렬화 기술인 Apache Avro 를 사용하여 정의됩니다. 압축 바이너리 형식 또는 더 많은 상세 출력(그러나 사람이 읽을 수 있는 JSON 형식)을 사용하여 더욱 효율적인 데이터 인코딩 형식을 제공합니다.

Event Streams 스키마 레지스트리는 Apache Avro 데이터 형식을 사용합니다. 메시지가 Avro 형식으로 전송되면 메시지에는 사용되는 스키마에 맞는 데이터 및 고유 ID가 포함됩니다. ID는 메시지에 사용될 레지스트리의 스키마를 지정합니다.

Avro는 기본 유형(null, boolean, int, long, float, double, bytes 및 string) 및 복합 유형(record, enum, array, map, union 및 fixed)을 포함한 다양한 데이터 유형을 지원합니다.

Avro 형식 다이어그램.
Avro 메시지 형식으로 전송된 메시지의 표시를 표시하는 다이어그램

직렬화 및 직렬화 해제

프로듀싱 애플리케이션은 특정 스키마에 부합하는 메시지를 생성하기 위해 시리얼라이저를 사용합니다. 앞에 설명된 대로, 메시지에는 스키마 ID와 함께 Avro 형식을 된 데이터가 포함됩니다.

소모적인 응용 프로그램은 동일한 스키마를 사용하여 직렬화된 메시지를 소모하기 위해 역직렬화기를 사용합니다. 소비자가 Avro 형식으로 전송된 메시지를 읽으면, 역직렬화기는 메시지에서 스키마의 식별자를 찾아 스키마 레지스트리에서 스키마를 가져와 데이터를 역직렬화합니다.

이 프로세스는 메시지의 데이터가 필요한 구조를 따르도록 하는 효율적인 방법을 제공합니다.

Event Streams 스키마 레지스트리는 Kafka AVRO 시리얼라이저와 디시리얼라이저를 지원합니다.

직렬화 및 역직렬화 다이어그램.
시리얼라이저 및 디시리얼라이저에 맞는 위치의 표시를 표시하는 다이어그램

호환성 및 버전 다이어그램.
호환성 및 버전

버전 및 호환성

스키마를 추가할 때마다, 그리고 동일한 스키마의 후속 버전을 추가할 때마다, Event Streams 는 형식을 자동으로 검증하고 문제가 있는 경우 스키마를 거부할 수 있습니다. 변경되는 요구사항을 수용하도록 시간 경과에 따라 스키마를 발전시킬 수 있습니다. 기존 스키마의 새로운 버전을 생성하면 스키마 레지스트리가 새로운 버전이 기존 버전과 호환되도록 보장합니다. 즉, 기존 버전을 사용하는 생산자와 소비자가 새로운 버전에 의해 방해받지 않습니다.

스키마의 시맨틱에 영향을 주지 않는 방식으로만 스키마가 다른 중복 스키마를 작성하지 않도록 스키마를 비교합니다. 일부 경우에 스키마 내에서 JSON 특성의 순서 지정은 스키마가 데이터 인코딩 및 디코딩에 사용되는 방법에 중요할 수 있지만, 다른 경우에는 관련되지 않을 수 있습니다.

예를 들어, 레코드 스키마의 name 특성은 인코딩 및 디코딩 프로세스의 일부로 사용되지 않으므로 레코드 JSON 오브젝트 내의 임의의 위치에 배치할 수 있습니다. 이러한 모든 변형은 동일한 스키마로 간주됩니다.

레코드 스키마의 JSON에 있는 fields 특성은 순서 지정이 중요한 경우입니다. Avro 스펙에서는 레코드의 필드가 인코드 및 디코드 조작에 사용되는 스키마에 표시되는 순서대로 인코드 및 디코드되어야 합니다.

예를 들어, 다음의 세 가지 스키마를 생각해 보십시오.

스키마 1

{
  "type": "record",
  "name": "book",
  "fields": [
    {
      "name": "title",
      "type": "string"
    },
    {
      "name": "author",
      "type": "string"
    }
  ]
}

스키마 2

{
  "type": "record",
  "name": "book",
  "fields": [
    {
      "name": "author",
      "type": "string"
    },
    {
      "name": "title",
      "type": "string"
    }
  ]
}

스키마 3

{
  "type": "record",
  "name": "book",
  "fields": [
    {
      "type": "string"
      "name": "author",
    },
    {
      "type": "string"
      "name": "title",
    }
  ]
}

스키마 1및 스키마 2는 구별되는 스키마이며 레지스트리는 이를 별도의 스키마로 저장합니다. authortitle 필드를 다른 순서로 나열하기 때문에 서로 교환하여 사용할 수 없습니다. 스키마 1로 인코딩된 데이터는 디코딩 프로세스에서 스키마 2를 사용한 경우 올바르게 디코딩되지 않습니다.

SerDes 를 사용하여 Schema 1, Schema 2및 Schema 3의 순서로 새 스키마를 작성하면 두 개의 새 스키마가 작성됩니다. 스키마 1과 스키마 2는 다르지만 스키마 3은 스키마 2와 동일합니다.

REST API를 사용하여 스키마를 작성할 때 스키마는 모든 속성 순서 지정 및 설명 필드를 포함하여 텍스트가 동일한 경우에만 일치하는 것으로 간주됩니다. 이는 스키마 3이 다른 스키마가 되기를 원하는 경우를 허용하기 위한 것입니다.

스키마 레지스트리 사용

기본적으로 스키마 레지스트리는 Event Streams 엔터프라이즈 플랜 및 서비스 인스턴스에 사용 가능합니다. 스키마 레지스트리는 기타 Event Streams 플랜에 사용할 수 없습니다.

스키마 레지스트리에 액세스

스키마 레지스트리에 액세스하려면 스키마 레지스트리의 인증 키( URL )가 필요합니다. 이 인증 키는 서비스의 서비스 자격 증명 내에 있습니다. UI에서 이러한 자격 증명을 보려면 서비스 인스턴스를 클릭하고 왼쪽 탐색 창에서 서비스 자격 증명을 선택한 다음, 표에 나열된 서비스 자격 증명 옆에 있는 자격 증명 보기 링크를 클릭합니다

서비스 신임 정보 다이어그램.
Kafka 신임 정보 블록에 액세스하기 위한 필수 신임 정보 필드의 표시를 표시하는 다이어그램

kafka_http_url 의 가치는 스키마 레지스트리의 핵심 속성( URL )이기도 합니다.

인증

스키마 레지스트리에 액세스하려면 레지스트리를 인증하는 데 사용할 수 있는 신임 정보 세트도 필요합니다. API키를 사용한 기본 인증 또는 베어러 토큰 인증의 두 가지 옵션이 있습니다.

이 문서의 예제는 API키의 사용을 표시하지만 두 옵션 중 하나를 사용할 수 있습니다.

API키로 인증

서비스 신임 정보에는 스키마 레지스트리를 사용하여 인증하기 위한 신임 정보로 사용할 수 있는 apikey 가 있습니다.

Event Streams 인스턴스에 최소한 "리더" 역할 액세스를 허용하는 정책이 있는 서비스 ID를 제공하여 서비스 ID에서 부여된 API 키를 사용하여 인증할 수도 있습니다. 여러 명의 다른 사용자 또는 팀에 액세스 권한을 제공하는 경우에는 이 방법이 좀 더 유연하고 좋은 선택입니다. 자세한 내용은 Event Streams 리소스에 대한 액세스 관리 도움말 주제를 참조하십시오.

API 키는 HTTP 의 기본 인증 헤더의 비밀번호 부분으로 제공됩니다. 헤더의 사용자 이름 부분은 단어 "token" 입니다.

사용할 curl 명령은 다음과 같습니다. 여기서 $APIKEY는 API키로 대체됩니다.

curl -u token:$APIKEY ...

베어러 토큰으로 인증

시스템 ID나 사용자를 위한 무기명 토큰을 자격 증명으로 사용할 수도 있습니다. 이는 API키를 노출할 가능성이 적고 베어러 토큰이 일정 시간 후에 자동으로 만료되므로 일반적으로 더 안전한 접근 방식입니다.

토큰을 얻으려면 IBM Cloud CLI ibmcloud iam oauth-tokens 명령을 사용하여 토큰을 생성하십시오. HTTP 헤더에 이 토큰을 "Authorization: Bearer $TOKEN" 형식으로 포함하십시오. 여기서 $TOKEN은 베어러 토큰입니다

curl -H "Authorization: Bearer $TOKEN" ...

다른 스키마 레지스트리에서 데이터 가져오기

다른 스키마 레지스트리에서 내보낸 스키마 레지스트리로 데이터를 가져올 수 있습니다. 데이터를 가져올 때 각 아티팩트 버전과 연관된 글로벌 ID가 유지됩니다. 이는 동일한 스키마 글로벌 ID값을 사용하여 Kafka 에 이미 저장된 데이터를 계속 사용할 수 있음을 의미합니다.

Event Streams CLI는 다음 예제에서와 같이 Apicurio 레지스트리의 가져오기 및 내보내기 형식을 사용하여 데이터 가져오기를 지원합니다.

ibmcloud es schema-import import.zip

Confluent 스키마 레지스트리에서 데이터를 내보내는 Apicurio 레지스트리 exportConfluent 유틸리티를 사용하여 가져올 데이터를 생성할 수 있습니다. Event Streams 버전으로 테스트되었습니다 2.6.x 이 유틸리티의.

Event Streams 스키마 레지스트리에 이미 가져오는 아티팩트 버전과 동일한 글로벌 ID의 항목이 있는 경우, 가져오기 조작이 실패하고 계속하려면 아티팩트 버전을 제거하도록 프롬프트가 표시됩니다.

스키마 레지스트리 REST 엔드포인트

REST API는 네 가지 기본 기능을 제공합니다.

  1. 스키마 작성, 읽기 및 삭제
  2. 스키마의 개별 버전의 작성, 읽기 및 삭제
  3. 레지스트리에 대한 글로벌 호환성 규칙 읽기 및 업데이트
  4. 개별 스키마에 적용되는 호환성 규칙 작성, 읽기, 업데이트 및 삭제

스키마 버전을 변경하는 조치(예: 아티팩트 작성, 업데이트 또는 삭제, 아티팩트 버전 및 규칙)의 경우 활동 트래커 이벤트는 조치를 보고하도록 생성됩니다. 자세한 정보는 Activity Tracker 이벤트를 참조하십시오.

오류

오류 조건이 발생하면 스키마 레지스트리는 오류 범위( non-2XX )와 상태 코드( HTTP )를 반환합니다. 응답 본문에는 다음과 같은 형식의 JSON 객체가 포함되어 있습니다

{
    "error_code":404,
    "message":"No artifact with id 'my-schema' might be found."
}

오류 JSON 오브젝트의 특성은 다음과 같습니다.

특성 이름 설명
error_code 응답의 HTTP 상태 코드입니다.
메시지 문제점의 원인에 대한 설명입니다.
인시던트 이 필드는 스키마 레지스트리 문제 때문에 오류가 발생하는 경우에만 포함됩니다. 이 값은 레지스트리에서 캡처된 정보를 진단하는 요청을 상관시키기 위해 IBM 서비스에서 사용될 수 있습니다.

스키마 상태 설정

이 엔드포인트는 레지스트리의 스키마 상태를 ENABLED 또는 DISABLED 로 설정하는 데 사용됩니다. 스키마의 상태는 /artifacts/{schema-id}/state 엔드포인트에 PUT 요청을 발행하여 설정할 수 있습니다 (여기서 {schema-id} 는 스키마의 ID임). 요청이 성공하면 빈 응답과 상태 코드 204(내용 없음)가 반환됩니다.

curl 요청 예:

curl -u token:$APIKEY –X PUT $URL/artifacts/my-schema/state -d '{"state": "DISABLED"}'

스키마 상태를 설정하려면 다음이 필요합니다.

  • 관리자 역할은 수정된 스키마와 일치하는 스키마 리소스에 대한 액세스 권한을 갖습니다.

스키마 버전 상태 설정

이 엔드포인트는 레지스트리의 스키마 버전 상태를 ENABLED 또는 DISABLED 로 설정하는 데 사용됩니다. 스키마 버전의 상태는 /artifacts/{schema-id}/versions/{version}/state 엔드포인트에 PUT 요청을 발행하여 설정할 수 있습니다 (여기서 {schema-id} 는 스키마의 ID이고 {version} 은 스키마 버전의 버전 번호임). 요청이 성공하면 빈 응답과 상태 코드 204(내용 없음)가 반환됩니다.

curl 요청 예:

curl -u token:$APIKEY –X PUT $URL/artifacts/my-schema/versions/1/state -d '{"state": "DISABLED"}'

스키마 버전 상태를 설정하려면 다음이 필요합니다.

  • 관리자 역할은 수정 중인 스키마와 일치하는 스키마 리소스에 대한 액세스 권한을 갖습니다.

스키마 작성

이 엔드포인트는 레지스트리에서 스키마를 저장하는 데 사용됩니다. 스키마 데이터는 POST 요청의 본문으로 전송됩니다. ‘X-Registry-ArtifactId' 요청 헤더를 사용하면 스키마에 대한 ID를 포함할 수 있습니다. 이 헤더가 요청에 없으면 ID가 생성됩니다. 컨텐츠 유형 헤더는 “application/json”으로 설정되어야 합니다.

curl 요청 예:

curl -u token:$APIKEY -H 'Content-Type: application/json' -H 'X-Registry-ArtifactId: my-schema' $URL/artifacts -d '{"type":"record","name":"Citizen","fields":[{"name": "firstName","type":"string"},{"name":"lastName","type":"string"},{"name":"age","type":"int"},{"name":"phoneNumber","type":"string"}]}'

리소스 예:

{"id":"my-schema","type":"AVRO","version":1,"createdBy":"","createdOn":1579267788258,"modifiedBy":"","modifiedOn":1579267788258,"globalId":75}

스키마를 작성하려면 최소 다음과 같은 역할 액세스 권한이 필요합니다.

  • Event Streams 클러스터 리소스 유형에 대한 독자 역할 액세스 권한
  • 작성자 역할은 생성된 스키마와 일치하는 스키마 리소스에 대한 액세스 권한을 갖습니다.

조치를 보고하기 위한 활동 추적 프로그램 이벤트가 생성됩니다. 자세한 정보는 Activity Tracker 이벤트를 참조하십시오.

목록 스키마

/artifacts 엔드포인트에 GET 요청을 보내면 레지스트리에 저장된 모든 스키마의 ID 목록을 생성할 수 있습니다. jsonformat 매개변수를 사용하여 응답을 형식화할 수 있습니다 ( stringobject 형식만 지원됨). 문자열 형식은 기본값이며 아티팩트 ID (문자열) 의 배열을 리턴합니다. 이 옵션이 설정되면 사용 가능한 아티팩트만 배열에 포함됩니다. 오브젝트 형식은 배열의 각 항목이 레지스트리의 아티팩트에 해당하는 배열을 포함하는 JSON 오브젝트를 리턴합니다. 이 옵션이 설정되면 사용 및 사용 안함으로 설정된 아티팩트가 모두 리턴됩니다.

curl 요청 예:

curl -u token:$APIKEY $URL/artifacts

or

curl -u token:$APIKEY $URL/artifacts?jsonformat=string

or

curl -u token:$APIKEY $URL/artifacts?jsonformat=object

jsonformat이 문자열이거나 제공되지 않은 경우의 응답 예 (기본값은 문자열):

["my-schema-2","my-schema-4"]

jsonformat이 오브젝트인 경우 응답 예:

{"artifacts":[{"id":"my-schema","state":"DISABLED"},{"id":"my-schema-2","state":"ENABLED"},{"id":"my-schema-3","state":"DISABLED"},{"id":"my-schema-4","state":"ENABLED"}],"count":4}

스키마를 나열하려면 최소 다음과 같은 역할 액세스 권한이 필요합니다.

  • Event Streams 클러스터 리소스 유형에 대한 독자 역할 액세스 권한

스키마의 상태 및 삭제

스키마 삭제는 2단계프로세스입니다. 삭제의 첫 번째 단계는 레지스트리에서 스키마를 보존하지만 일부 조작에서는 스키마를 숨깁니다. 두 번째 단계는 스키마를 영구적으로 제거하지만 첫 번째 단계 이후에만 적용할 수 있습니다. 2단계삭제 프로세스는 아티팩트 레벨 및 버전 레벨에서도 적용됩니다.

두 단계의 삭제는 아티팩트 및 버전 (첫 번째 단계) 모두와 연관된 사용 또는 사용 안함 상태를 갖고 자원 및 버전 (두 번째 단계) 에 대한 API를 삭제하여 수행됩니다.

사용 안함으로 설정된 아티팩트 또는 버전은 아티팩트 또는 버전을 나열하는 오퍼레이션에 의해 리턴되는 '상태' 특성을 사용하거나 아티팩트 또는 버전의 세부사항을 가져와서 발견할 수 있습니다. 사용 안함으로 설정된 스키마는 엔터프라이즈 인스턴스당 1000개스키마의 스키마 할당량에 포함됩니다.

스키마 삭제

스키마는 /artifacts/{schema-id} 엔드포인트에 DELETE 요청을 보내면 레지스트리에서 삭제됩니다(여기서 {schema-id} 는 스키마의 ID입니다). 성공하면 비어 있는 요청과 204의 상태 코드(컨텐츠 없음)가 리턴됩니다.

curl 요청 예:

curl -u token:$APIKEY -X DELETE $URL/artifacts/my-schema

스키마를 삭제하려면 최소 다음과 같은 역할 액세스 권한이 필요합니다.

  • Event Streams 클러스터 리소스 유형에 대한 독자 역할 액세스 권한
  • 관리자 역할은 삭제된 스키마와 일치하는 스키마 리소스에 대한 액세스 권한을 가집니다.

조치를 보고하기 위한 활동 추적 프로그램 이벤트가 생성됩니다. 자세한 정보는 Activity Tracker 이벤트를 참조하십시오.

스키마의 새 버전 작성

스키마의 새로운 버전을 생성하려면, /artifacts/{schema-id}/versions 엔드포인트에 POST 요청을 하십시오(여기서 {schema-id} 는 스키마의 ID입니다). 요청의 본문에는 스키마의 새 버전이 포함되어야 합니다.

요청이 성공적으로 완료되면, 새로운 스키마가 스키마의 최신 버전으로 생성되고, 적절한 버전 번호가 부여되며, 상태 코드 200(OK)이 포함된 응답과 새로운 버전을 설명하는 메타데이터(버전 번호 포함)가 포함된 페이로드가 반환됩니다.

curl 요청 예:

curl -u token:$APIKEY -H 'Content-Type: application/json' $URL/artifacts/my-schema/versions -d '{"type":"record","name":"Citizen","fields":[{"name": "firstName","type":"string"},{"name":"lastName","type":"string"},{"name":"age","type":"int"},{"name":"phoneNumber","type":"string"}]}'

리소스 예:

{"id":"my-schema","type":"AVRO","version":2,"createdBy":"","createdOn": 1579267978382,"modifiedBy":"","modifiedOn":1579267978382,"globalId":83}

스키마의 새 버전을 작성하려면 최소 다음과 같은 역할 액세스 권한이 필요합니다.

  • Event Streams 클러스터 리소스 유형에 대한 독자 역할 액세스 권한
  • 작성자 역할은 새 버전을 가져오는 스키마와 일치하는 스키마 리소스에 대한 액세스 권한을 갖습니다.

조치를 보고하기 위한 활동 추적 프로그램 이벤트가 생성됩니다. 자세한 정보는 Activity Tracker 이벤트를 참조하십시오.

스키마의 최신 버전 가져오기

특정 스키마의 최신 버전을 검색하려면 /artifacts/{schema-id} 엔드포인트에 GET 요청을 하십시오(여기서 {schema-id} 는 스키마의 ID입니다). 성공하면 스키마의 최신 버전이 응답의 페이로드에서 리턴됩니다.

curl 요청 예:

curl -u token:$APIKEY $URL/artifacts/my-schema

리소스 예:

{"type":"record","name":"Citizen","fields":[{"name": "firstName","type":"string"},{"name":"lastName","type":"string"},{"name":"age","type":"int"},{"name":"phoneNumber","type":"string"}]}

스키마의 최신 버전을 가져오려면 최소 다음과 같은 역할 액세스 권한이 필요합니다.

  • Event Streams 클러스터 리소스 유형에 대한 독자 역할 액세스 권한
  • 리더 역할은 검색된 스키마와 일치하는 스키마 리소스에 액세스할 수 있습니다.

스키마의 특정 버전 가져오기

특정 버전의 스키마를 검색하려면 /artifacts/{schema-id}/versions/{version} 엔드포인트에 GET 요청을 하십시오(여기서 {schema-id} 는 스키마의 ID이고, {version} 는 검색하려는 특정 버전의 버전 번호입니다). 성공하면 스키마의 지정된 버전이 응답의 페이로드에서 리턴됩니다.

curl 요청 예

curl -u token:$APIKEY $URL/artifacts/my-schema/versions/3

리소스 예:

{"type":"record","name":"Citizen","fields":[{"name": "firstName","type":"string"},{"name":"lastName","type":"string"},{"name":"age","type":"int"},{"name":"phoneNumber","type":"string"}]}

스키마의 최신 버전을 가져오려면 최소 다음과 같은 역할 액세스 권한이 필요합니다.

  • Event Streams 클러스터 리소스 유형에 대한 독자 역할 액세스 권한
  • 리더 역할은 검색된 스키마와 일치하는 스키마 리소스에 액세스할 수 있습니다.

스키마의 모든 버전 나열

레지스트리에 현재 저장되어 있는 스키마의 모든 버전을 나열하려면 /artifacts/{schema-id}/versions 엔드포인트에 GET 요청을 하십시오(여기서 {schema-id} 는 스키마의 ID입니다). 성공하면 스키마의 모든 현재 버전 번호 목록은 응답의 페이로드에서 리턴됩니다. jsonformat 매개변수를 사용하여 응답을 형식화할 수 있습니다 ( numberobject 형식만 지원됨). 'number' (기본값) 를 지정하는 경우 응답은 아티팩트의 사용 가능한 버전에 해당하는 숫자 값의 배열입니다 (사용 불가능한 버전은 생략됨). 현재 엔드포인트가 생성하는 형식과 동일합니다. '오브젝트' 를 지정하는 경우 응답은 아티팩트의 버전을 나타내는 JSON 오브젝트의 배열을 포함하는 JSON 오브젝트입니다. 사용 및 사용 안함으로 설정된 버전 모두 어레이에 포함되어 있습니다.

curl 요청 예:

curl -u token:$APIKEY $URL/artifacts/my-schema/versions

or

curl -u token:$APIKEY $URL/artifacts/my-schema/versions?jsonformat=number

or

curl -u token:$APIKEY $URL/artifacts/my-schema/versions?jsonformat=object

jsonformat이 숫자이거나 제공되지 않은 경우의 응답 예 (기본값은 숫자):

[1,3,4,6,7]

jsonformat이 오브젝트인 경우 응답 예:

{"versions":[{"id":1,"state":"ENABLED"},{"id":2,"state":"DISABLED"},{"id":3,"state":"ENABLED"},{"id":4,"state":"ENABLED"},{"id":5,"state":"DISABLED"},{"id":6,"state":"ENABLED"},{"id":7,"state":"ENABLED"}],"count":7}

스키마의 사용 가능한 버전 목록을 가져오려면 최소 다음과 같은 역할 액세스 권한이 필요합니다.

  • Event Streams 클러스터 리소스 유형에 대한 독자 역할 액세스 권한
  • 리더 역할은 검색된 스키마와 일치하는 스키마 리소스에 액세스할 수 있습니다.

스키마의 버전 삭제

스키마 버전은 /artifacts/{schema-id}/versions/{version} 엔드포인트에 DELETE 요청을 보내 레지스트리에서 삭제됩니다(여기서 {schema-id} 는 스키마의 ID이고, {version} 는 스키마 버전의 버전 번호입니다). 성공하면 비어 있는 요청과 204의 상태 코드(컨텐츠 없음)가 리턴됩니다. 스키마의 유일한 남은 버전을 삭제하면 스키마도 삭제됩니다.

curl 요청 예:

curl -u token:$APIKEY -X DELETE $URL/artifacts/my-schema/versions/3

스키마 버전을 삭제하려면 최소 다음과 같은 역할 액세스 권한이 필요합니다.

  • Event Streams 클러스터 리소스 유형에 대한 독자 역할 액세스 권한
  • 관리자 역할은 삭제된 스키마와 일치하는 스키마 리소스에 대한 액세스 권한을 가집니다.

조치를 보고하기 위한 활동 추적 프로그램 이벤트가 생성됩니다. 자세한 정보는 Activity Tracker 이벤트를 참조하십시오.

스키마 버전의 특정 글로벌 고유 ID 가져오기

스키마 버전의 특정 글로벌 고유 ID를 검색하려면 /artifacts/{artifactId}/versions/{version}/meta 엔드포인트에 GET 요청을 하십시오(여기서 {artifactId} 는 아티팩트의 ID이고, {version} 는 검색하려는 특정 버전의 버전 번호입니다). 성공하면 스키마 버전의 특정 글로벌 고유 ID가 응답의 페이로드에 리턴됩니다.

curl 요청 예:

curl -u token:$APIKEY $URL/artifacts/9030f450-45fb-4750-bb37-771ad49ee0e8/versions/1/meta

리소스 예:

{"id":"9030f450-45fb-4750-bb37-771ad49ee0e8","type":"AVRO","version":1,"createdOn":1682340169202,"modifiedOn":1682340169202,"globalId":1}

스키마 버전의 글로벌 고유 ID를 가져오려면 최소한 다음 유형의 액세스가 모두 필요합니다.

  • Event Streams 클러스터 리소스 유형에 대한 독자 역할 액세스 권한
  • 리더 역할은 검색된 스키마와 일치하는 스키마 리소스에 액세스할 수 있습니다.

글로벌 규칙 업데이트

글로벌 호환성 규칙은 /rules/ {rule-type} 엔드포인트에 PUT 요청을 보내 업데이트할 수 있습니다(여기서 {rule-type} 는 업데이트할 글로벌 규칙의 유형을 식별합니다 - 현재 지원되는 유형은 COMPATIBILITY뿐입니다). 요청 본문에 새로운 규칙 구성을 포함시켜야 합니다. 요청에 성공하면 새로 업데이트 규칙 구성은 200(확인)의 상태 코드와 함께 응답의 페이로드에서 리턴됩니다.

요청 본문에 전송되는 JSON 문서에는 다음 속성이 있어야 합니다

특성 이름 설명
유형 항상 COMPATIBILITY 값으로 설정되어야 합니다.
Config NONE, BACKWARD, BACKWARD_TRANSITIVE, FORWARD, FORWARD_TRANSITIVE, FULL 또는 FULL_TRANSITIVE 값 중 하나로 설정되어야 합니다(이 값의 각 세부사항은 호환성 규칙의 절 참조).

curl 요청 예:

curl -u token:$APIKEY -X PUT $URL/rules/COMPATIBILITY -d '{"type":"COMPATIBILITY","config":"BACKWARD"}'

리소스 예:

{"type":"COMPATIBILITY","config":"BACKWARD"}

글로벌 규칙 구성을 업데이트하려면 최소 다음과 같은 역할 액세스 권한이 필요합니다.

  • Event Streams 클러스터 리소스 유형에 대한 관리자 역할 액세스 권한

조치를 보고하기 위한 활동 추적 프로그램 이벤트가 생성됩니다. 자세한 정보는 Activity Tracker 이벤트를 참조하십시오.

글로벌 규칙의 현재 값 가져오기

전역 규칙의 현재 값은 /rules/ {rule-type} 엔드포인트에 대한 GET 요청을 실행하여 검색할 수 있습니다(여기서 {rule-type} 는 검색할 전역 규칙의 유형입니다 - 현재 지원되는 유형은 COMPATIBILITY뿐입니다). 요청에 성공하면 현재 규칙 구성은 200(확인)의 상태 코드와 함께 응답의 페이로드에서 리턴됩니다.

curl 요청 예:

curl -u token:$APIKEY $URL/rules/COMPATIBILITY

리소스 예:

{"type":"COMPATIBILITY","config":"BACKWARD"}

글로벌 규칙 구성을 가져오려면 최소 다음과 같은 역할 액세스 권한이 필요합니다.

  • Event Streams 클러스터 리소스 유형에 대한 독자 역할 액세스 권한

스키마당 규칙 작성

규칙은 특정 스키마에 적용될 수 있으며, /artifacts/{schema-id}/rules 엔드포인트(여기서 {schema-id} 는 스키마의 ID임)에 POST 요청을 보내어 설정된 전역 규칙을 재정의할 수 있습니다. 요청 본문에 포함된 새 규칙의 유형과 값(현재 지원되는 유형은 COMPATIBILITY뿐임). 성공하면 비어 있는 요청과 204의 상태 코드(컨텐츠 없음)가 리턴됩니다.

curl 요청 예:

curl -u token:$APIKEY $URL/artifacts/my-schema/rules -d '{"type":"COMPATIBILITY","config":"FORWARD"}'

스키마당 규칙을 작성하려면 최소 다음과 같은 역할 액세스 권한이 필요합니다.

  • Event Streams 클러스터 리소스 유형에 대한 독자 역할 액세스 권한
  • 관리자 역할 규칙이 적용되는 스키마 리소스에 대한 액세스 권한.

조치를 보고하기 위한 활동 추적 프로그램 이벤트가 생성됩니다. 자세한 정보는 Activity Tracker 이벤트를 참조하십시오.

스키마당 규칙 가져오기

특정 스키마에 적용되는 규칙 유형의 현재 값을 검색하려면 /artifacts/{schema-id}/rules/{rule-type} 엔드포인트로 GET 요청을 합니다(여기서 {schema-id} 는 스키마의 ID이고, {rule-type} 는 검색할 전역 규칙 유형입니다. 현재 지원되는 유형은 COMPATIBILITY뿐입니다). 요청에 성공하면 현재 규칙 값은 200(확인)의 상태 코드와 함께 응답의 페이로드에서 리턴됩니다.

curl 요청 예:

curl -u token:$APIKEY $URL/artifacts/my-schema/rules/COMPATIBILITY

리소스 예:

{"type":"COMPATIBILITY","config":"FORWARD"}

스키마당 규칙을 가져오려면 최소 다음과 같은 역할 액세스 권한이 필요합니다.

  • Event Streams 클러스터 리소스 유형에 대한 독자 역할 액세스 권한
  • 규칙이 적용되는 스키마 리소스에 대한 독자 역할 액세스 권한

스키마당 규칙 업데이트

특정 스키마에 적용되는 규칙은 /artifacts/{schema-id}/rules/{rule-type} 엔드포인트에 PUT 요청을 함으로써 수정됩니다(여기서 {schema-id} 는 스키마의 ID이고, {rule-type} 는 검색할 글로벌 규칙의 유형입니다 - 현재 지원되는 유일한 유형은 COMPATIBILITY입니다). 요청에 성공하면 새로 업데이트 규칙 구성은 200(확인)의 상태 코드와 함께 응답의 페이로드에서 리턴됩니다.

curl 요청 예:

curl -u token:$APIKEY -X PUT $URL/artifacts/my-schema/rules/COMPATIBILITY -d '{"type":"COMPATIBILITY","config":"BACKWARD"}'

리소스 예:

{"type":"COMPATIBILITY","config":"BACKWARD"}

스키마당 규칙을 업데이트하려면 최소 다음과 같은 역할 액세스 권한이 필요합니다.

  • Event Streams 클러스터 리소스 유형에 대한 독자 역할 액세스 권한
  • 규칙이 적용되는 스키마 리소스에 대한 관리자 역할 액세스 권한

조치를 보고하기 위한 활동 추적 프로그램 이벤트가 생성됩니다. 자세한 정보는 Activity Tracker 이벤트를 참조하십시오.

스키마당 규칙 삭제

특정 스키마에 적용된 규칙은 /artifacts/{schema-id}/rules/{rule-type} 엔드포인트에 DELETE 요청을 보내 삭제할 수 있습니다(여기서 {schema-id} 는 스키마의 ID이고, {rule-type} 는 검색할 글로벌 규칙의 유형입니다. 현재 지원되는 유형은 COMPATIBILITY뿐입니다). 요청에 성공하면 비어 있는 요청과 204의 상태 코드(컨텐츠 없음)가 리턴됩니다.

curl 요청 예:

curl -u token:$APIKEY -X DELETE $URL/artifacts/my-schema/rules/COMPATIBILITY

스키마당 규칙을 삭제하려면 최소 다음과 같은 역할 액세스 권한이 필요합니다.

  • Event Streams 클러스터 리소스 유형에 대한 독자 역할 액세스 권한
  • 규칙이 적용되는 스키마 리소스에 대한 관리자 역할 액세스 권한

조치를 보고하기 위한 활동 추적 프로그램 이벤트가 생성됩니다. 자세한 정보는 Activity Tracker 이벤트를 참조하십시오.

스키마의 새 버전에 호환성 규칙 적용

스키마 레지스트리는 스키마의 새로운 버전을 만들 때 호환성 규칙을 적용할 수 있도록 지원합니다. 필요한 호환성 규칙을 따르지 않는 새 스키마 버전을 작성하기 위한 요청을 수행하는 경우 레지스트리가 요청을 거부합니다. 다음 규칙이 지원됩니다.

호환성 규칙 테스트 대상 설명
NONE 해당사항 없음 새 스키마 버전이 작성되는 경우 호환성 검사가 수행되지 않습니다.
BACKWARD 스키마의 최신 버전 스키마의 새 버전은 기존 스키마 버전에 존재하는 필드를 생략할 수 있습니다.
BACKWARD_TRANSITIVE 스키마의 모든 버전 스키마의 새 버전은 기존 스키마 버전에 존재하지 않는 선택적인 필드를 추가할 수 있습니다.
FORWARD 스키마의 최신 버전 스키마의 새 버전은 기존 스키마 버전에 존재하지 않는 필드를 추가할 수 있습니다.
FORWARD_TRANSITIVE 스키마의 모든 버전 스키마의 새 버전은 기존 스키마 버전에 존재하는 선택적인 필드를 생략할 수 있습니다.
FULL 스키마의 최신 버전 스키마의 새 버전은 기존 스키마 버전에 존재하지 않는 선택적인 필드를 추가할 수 있습니다.
FULL_TRANSITIVE 스키마의 모든 버전 스키마의 새 버전은 기존 스키마 버전에 존재하는 선택적인 필드를 생략할 수 있습니다.

이 규칙은 다음 두 범위에서 적용될 수 있습니다.

  1. 글로벌 범위에서 적용됩니다. 이는 새 스키마 버전을 작성할 때 사용되는 기본값입니다.
  2. 스키마당 레벨에서 적용됩니다. 스키마당 레벨 규칙이 정의되면 특정 스키마에 대한 글로벌 기본값을 대체합니다.

기본적으로 레지스트리에는 NONE의 글로벌 호환성 규칙 설정이 있습니다. 스키마별 레벨 규칙을 정의해야 합니다. 그렇지 않으면 스키마가 기본적으로 전역 설정을 사용합니다.

전체 API 설명

예제와 함께 REST API에 대한 설명은 Event Streams schema-registry-rest를 참조하십시오.

Event Streams 의 스키마 레지스트리 REST API YAML 파일 에서 API의 전체 사양을 다운로드할 수 있습니다. Swagger 파일을 보려면 Swagger 편집기 같은 Swagger 도구를 사용하십시오.

SDK를 사용하여 스키마 레지스트리에 액세스하는 방법에 대한 자세한 정보는 Event Streams 스키마 레지스트리 REST API를 참조하십시오.

Terraform의 Event Streams 리소스 및 데이터 소스에 대한 정보는 리소스 및 데이터 소스를 참조하십시오.

타사 제품과 함께 스키마 레지스트리 사용하기 SerDes

스키마 레지스트리는 다음의 제3자 SerDes:

  • Confluent SerDes

스키마 레지스트리를 사용하도록 Confluent SerDes를 구성하려면 Kafka 클라이언트 구성에서 다음과 같은 두 가지 특성을 지정해야 합니다.

특성 이름
SCHEMA_REGISTRY_URL_CONFIG 이를 스키마 레지스트리의 URL(기본 인증) 및 /confluent 경로로 설정하십시오. 예를 들어, 사용할 API 키가 $APIKEY 이고 서비스 인증 탭kafka_http_url 필드에 있는 호스트가 $HOST 인 경우, 값은 다음과 같은 형식을 갖습니다. https://token:{$APIKEY}@{$HOST}/{confluent}
BASIC_AUTH_CREDENTIALS_SOURCE URL로 설정하십시오. 스키마 레지스트리 URL에 제공된 신임 정보를 사용하여 HTTP 기본 인증을 사용하도록 SerDes에 지시합니다.

선택적으로 다음 특성을 제공하여 스키마 선택사항(주제 이름 지정 전략)을 제어할 수도 있습니다.

특성 이름
VALUE_SUBJECT_NAME_STRATEGY TopicNameStrategy(기본값), RecordNameStrategyTopicRecordNameStrategy이(가) 지원됩니다. 예를 들어, 메시지 값의 스키마가 TopicRecordNameStrategy 를 사용하여 선택되도록 지정하려면 다음과 같은 클라이언트 속성을 사용할 수 있습니다. configs.put ( KafkaAvroSerializerConfig.VALUE_SUBJECT_NAME_STRATEGY, TopicRecordNameStrategy.class.getName( ));
KEY_SUBJECT_NAME_STRATEGY TopicNameStrategy(기본값), RecordNameStrategyTopicRecordNameStrategy이(가) 지원됩니다. 예제는 VALUE_SUBJECT_NAME_STRATEGY를 참조하십시오.

다음 다이어그램은 Confluent SerDes 를 사용하고 Event Streams 서비스에 연결할 수 있는 Kafka 생산자를 생성하는 데 필요한 속성의 예를 보여줍니다

Kafka properties for Confluent Serdes
Kafka properties for Confluent Serdes

SerDes 레지스트리에 없는 스키마를 사용하여 메시지를 보내는 경우, 레지스트리에서 새로운 스키마 또는 스키마 버전을 생성하려고 시도합니다. 이 동작이 필요하지 않은 경우, 애플리케이션에서 스키마 자원에 대한 작성자 권한을 제거하여 비활성화할 수 있습니다. 스키마 레지스트리에 대한 액세스 권한 관리를 참조하십시오.

스키마 검색 및 등록에 대한 normalize 옵션은 지원되지 않습니다.

Confluent 레지스트리 API를 사용하는 도구와 함께 스키마 레지스트리 사용

스키마 레지스트리는 Confluent 스키마 레지스트리의 버전 7.2 에서 제공하는 API의 서브세트를 지원합니다. 이는 Confluent 스키마 레지스트리와 함께 작동하도록 디자인된 도구와의 제한된 호환성을 제공하기 위한 것입니다. 다음 경로를 가진 REST 엔드포인트( HTTP )만 구현됩니다

  • 호환성
  • config
  • 스키마
  • 주제

이 호환성 API를 사용하도록 애플리케이션을 구성하려면 다음 형식으로 스키마 레지스트리 엔드포인트를 지정하십시오.

https://token:{$APIKEY}@{$HOST}/{confluent}

여기서,

  • $APIKEY서비스 신임 정보 탭에서 사용할 API키입니다.
  • $HOST서비스 신임 정보 탭의 kafka_http_url 필드에 있는 호스트입니다.

타사 도구와 스키마 레지스트리 사용하기

스키마 레지스트리는 Confluent SerDes 를 사용하여 스키마의 적합성을 테스트할 수 있는 타사 도구( kafka-avro-console-producer.sh, kafka-avro-console-consumer.sh 등)를 통해 테스트할 수 있습니다.

프로듀서 또는 컨슈머 도구를 실행하려면, Event Streams 엔터프라이즈 인스턴스의 연결 옵션에 공통 속성이 필요합니다.

sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="token" password="apikey";
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
ssl.protocol=TLSv1.2
ssl.enabled.protocols=TLSv1.2
ssl.endpoint.identification.algorithm=HTTPS

Avro 콘솔 생성자 및 이용자

Event Streams와 함께 Kafka Avro 콘솔 생성자 및 이용자 도구를 사용할 수 있습니다. 클라이언트 속성을 제공해야 하며, 스키마 레지스트리에 대한 연결 방법과 자격 증명을 명령줄 --property 인수로 제공해야 합니다. USER_INFO 또는 URL 의 자격 증명 소스를 사용하는 두 가지 연결 방법이 있습니다.

URL 의 자격 증명 소스 방법을 사용하여 실행하려면 다음 코드를 사용하십시오.

    ./kafka-avro-console-[producer|consumer] --broker-list $BOOTSTRAP_ENDPOINTS --topic schema-test --property schema.registry.url=$SCHEMA_REGISTRY_URL --property value.schema='{"type":"record","name":"myrecord","fields":[{"name":"f1","type":"string"}]}' --property basic.auth.credentials.source=URL --producer.config $CONFIG_FILE

예제의 다음 변수들을 자신의 값으로 대체하십시오.

  • 부트스트랩 서버의 목록으로 IBM Cloud 콘솔에 있는 Event Streams 서비스 신임 정보 탭의 값이 있는 BOOTSTRAP_ENDPOINTS.
  • IBM Cloud 콘솔에 있는 Event Streams 서비스 신임 정보 탭의 kafka_http_url 값과 사용자 이름 token 및 apikey와 함께 /confluent 경로(예: https://{token}:{apikey}@{kafka_http_url}/{confluent})를 사용하는 SCHEMA_REGISTRY_URL.
  • CONFIG_FILE - 구성 파일 경로 포함

USER_INFO의 자격 증명 소스 방법을 사용하여 실행하려면 다음 코드를 사용하십시오.

    ./kafka-avro-console-[producer|consumer] --broker-list $BOOTSTRAP_ENDPOINTS --topic schema-test --property schema.registry.url=$SCHEMA_REGISTRY_URL --property value.schema='{"type":"record","name":"myrecord","fields":[{"name":"f1","type":"string"}]}' --property basic.auth.credentials.source=USER_INFO --property basic.auth.user.info=token:apikey --producer.config $CONFIG_FILE

예제의 다음 변수들을 자신의 값으로 대체하십시오.

  • 부트스트랩 서버의 목록으로 IBM Cloud 콘솔에 있는 Event Streams 서비스 신임 정보 탭의 값이 있는 BOOTSTRAP_ENDPOINTS.
  • IBM Cloud 콘솔에 있는 Event Streams 서비스 신임 정보 탭의 kafka_http_url 값과 /confluent 경로(예: https://{kafka_http_url}/{confluent})를 사용하는 SCHEMA_REGISTRY_URL.
  • CONFIG_FILE - 구성 파일 경로 포함