使用 Event Streams 綱目登錄

「綱目登錄」提供集中式儲存庫,用於管理及驗證綱目。 「綱目登錄」中的綱目提供明確合約,由產生事件的程式提供給耗用那些事件的其他程式。

綱目概觀

Apache Kafka 可以處理任何資料,但不會驗證訊息中的資訊。 不過,有效率地處理資料通常需要它包括特定格式的特定資訊。 使用綱目,您可以定義訊息中資料的結構,確保生產者和消費者都使用正確的結構。

綱目可協助生產者建立符合預先定義結構的資料,並定義需要與每一個欄位的類型一起存在的欄位。 然後,此定義會協助消費者剖析該資料,並正確地解譯該資料。Event Streams 企業方案支援綱目,並包括用於使用及管理綱目的綱目登錄。

某個主題的所有相關訊息通常都使用相同的綱目。 可以按綱目分別說明訊息的索引鍵和值。

綱目總覽圖。
綱目概觀
的鍵值組結構。

綱目登錄

綱目儲存在 Event Streams 綱目登錄中。 除了儲存已版本化的綱目歷程之外,它還提供用來擷取它們的介面。 每一個企業方案 Event Streams 實例都有自己的綱目登錄。 企業實例中最多可以儲存 1000 個綱目。

生產者和消費者會根據儲存於 Schema Registry(除了透過 Kafka brokers)的指定模式來驗證資料。 因此,不需要在訊息中傳送這些綱目,這表示訊息可以較小。

Schema Registry 架構圖。
綱目登錄架構
擷取綱目

Apache Avro 資料格式

綱目是使用 Apache Avro 來定義,這是一種通常與 Apache Kafka搭配使用的開放程式碼資料序列化技術。 它提供有效率的資料編碼格式,方法是使用精簡二進位格式或是更詳細但人類可讀的 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 訊息格式
傳送的訊息表示法

序列化及解除序列化

生產應用程式使用序列化器來產生符合特定模式的訊息。 如前所述,此訊息包含 Avro 格式的資料與綱目 ID。

然後,消耗應用程式使用反序列化器來消耗使用相同模式序列化的訊息。 當消費者讀取以 Avro 格式傳送的訊息時,反序列化器會在訊息中找到模式的識別碼,並從模式註冊處擷取模式來反序列化資料。

此流程提供了一種有效的方式,可確保訊息中的資料符合所需的結構。

Event Streams Schema Registry 支援 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 欄位。 如果解碼程序使用綱目 2,則無法正確解碼以綱目 1 編碼的資料。

當您使用 SerDes 來依「綱目 1」、「綱目 2」和「綱目 3」順序建立新綱目時,結果會是兩個新綱目。 綱目 1 與綱目 2 不同,但綱目 3 等同於綱目 2。

當您使用 REST API 來建立綱目時,只有在文字相同 (包括所有屬性排序和敘述性欄位) 時,才會將綱目視為相符。 這是為了容許您想要綱目 3 成為不同綱目的情況。

啟用綱目登錄

依預設,會針對 Event Streams 企業方案服務實例啟用綱目登錄。 綱目登錄不適用於其他 Event Streams 方案。

存取綱目登錄

若要存取結構描述註冊中心,您需要結構描述註冊中心的 URL,它位於您服務的服務憑證中。 若要在使用者介面中檢視這些憑證,請按一下您的服務實例,在左側導覽窗格中選擇服務憑證,然後按一下位於表中所列服務憑證之一旁邊的檢視憑證連結:

服務認證圖。
Kafka 認證區塊
的必要認證欄位表示法

kafka_http_url 的值也是 Schema Registry 的 URL。

鑑別

若要存取「綱目登錄」,您還需要一組可用來向登錄進行鑑別的認證。 有兩個選項: 使用 API 金鑰進行基本鑑別,或使用載送記號鑑別。

本文件中的範例顯示使用 API 金鑰,但可以使用任一選項。

使用 API 金鑰進行鑑別

服務認證具有 apikey,您可以用來作為向「綱目登錄」進行鑑別的認證。

您也可以使用服務 ID 賦予的 API 金鑰進行驗證,前提是服務 ID 的政策至少允許其以「讀者」角色存取 Event Streams 範例。 如果您要授與對多個其他人或團隊的存取權,則此方式更具彈性,而且是更好的選擇。 如需詳細資料,請參閱管理 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

您可以使用 Apicurio 登錄 exportConfluent 公用程式來產生要匯入的資料,該公用程式會從 Confluent 綱目登錄匯出資料。 Event Streams已經用版本測試過2.6.x這個實用程式。

如果 Event Streams 綱目登錄已有一個項目與正在匯入的構件版本具有相同的廣域 ID,則匯入作業會失敗,並提示您移除構件版本 (如果您要繼續的話)。

綱目登錄 REST 端點

REST API 提供四個主要功能:

  1. 建立、讀取和刪除綱目。
  2. 建立、讀取和刪除綱目的個別版本。
  3. 讀取和更新登錄的廣域相容性規則。
  4. 建立、讀取、更新和刪除套用至個別綱目的相容性規則。

對於變更綱目版本的動作(例如建立、更新或刪除構件)、構件版本和規則,會產生 Activity Tracker 事件來報告動作。 如需相關資訊,請參閱 Activity Tracker 事件

錯誤

如果遇到錯誤情況,模式註冊處會回傳 non-2XX range HTTP 狀態代碼。 回應的正文包含以下形式的 JSON 物件:

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

錯誤 JSON 物件的內容如下所示:

內容名稱 說明
error_code 回應的 HTTP 狀態碼。
訊息 問題原因的說明。
突發事件 只有在錯誤是綱目登錄發生問題時所導致的,才會包括此欄位。 IBM 服務可以使用此值,將要求與登錄所擷取的診斷資訊產生關聯。

設定綱目狀態

這個端點用來將登錄中的綱目狀態設為 ENABLEDDISABLED。 您可以對 /artifacts/{schema-id}/state 端點發出 PUT 要求來設定綱目的狀態 (其中 {schema-id} 是綱目的 ID)。 如果請求成功,則會傳回一個空的回應,以及狀態代碼 204(無內容)。

curl 要求範例:

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

設定綱目狀態需要:

  • 管理員角色存取與修改的模式相符的模式資源。

設定綱目版本狀態

此端點用來將登錄中綱目版本的狀態設為 ENABLEDDISABLED。 您可以對 /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 事件以報告動作。 如需相關資訊,請參閱 Activity Tracker 事件

列出綱目

您可以透過 /artifacts 端點的 GET 請求,產生儲存於註冊表的所有模式 ID 清單。 您可以使用 jsonformat 參數來格式化回應 (僅支援 stringobject 格式)。 字串格式是預設值,它會傳回構件 ID (字串) 的陣列。 當設定這個選項時,只會將已啟用的構件包含在陣列中。 物件格式會傳回包含陣列的 JSON 物件,其中陣列中的每一個項目都對應於登錄中的構件。 當設定這個選項時,會同時傳回已啟用和已停用的構件。

curl 要求範例:

curl -u token:$APIKEY $URL/artifacts

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

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 叢集資源類型的「讀者」角色存取權。

綱目的狀態及刪除

綱目刪除是兩階段程序。 第一個刪除階段會保留登錄中的綱目,但會在某些作業中隱藏它。 第二個階段會永久移除綱目,但只能在第一個階段之後套用。 兩階段刪除程序適用於構件層次,也適用於版本層次。

這兩個刪除階段是透過同時具有與構件及版本相關聯的已啟用或已停用狀態 (第一階段),以及刪除資源及版本的 API (第二階段) 來完成。

您可以使用列出構件或版本的作業所傳回的「狀況」內容,或取得構件或版本的詳細資料,來探索已停用的構件或版本。 已停用的綱目會計入每個企業實例 1000 個綱目的綱目配額。

刪除綱目

可透過向 /artifacts/{schema-id} 端點(其中 {schema-id} 是模式的 ID)發出 DELETE 請求,從註冊表中刪除模式。 如果成功,則會傳回空的回應和狀態碼 204(無內容)。

curl 要求範例:

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

刪除綱目至少需要兩者:

  • 對 Event Streams 叢集資源類型的「讀者」角色存取權。
  • 管理員角色存取與刪除的模式相符的模式資源。

會產生 Activity Tracker 事件以報告動作。 如需相關資訊,請參閱 Activity Tracker 事件

建立綱目的新版本

若要建立模式的新版本,請向 /artifacts/{schema-id}/versions 端點(其中 {schema-id} 是模式的 ID)發出 POST 請求。 要求的內文必須包含綱目的新版本。

如果請求成功,新模式將被建立為模式的最新版本,並帶有適當的版本號,同時會傳回狀態代碼為 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 事件以報告動作。 如需相關資訊,請參閱 Activity Tracker 事件

取得綱目的最新版本

若要擷取特定模式的最新版本,請向 /artifacts/{schema-id} 端點(其中 {schema-id} 是模式的 ID)發出 GET 請求。 如果成功,則會在回應的有效負載中傳回綱目的最新版本。

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 端點(其中 {schema-id} 是模式的 ID)發出 GET 請求。 如果成功,則會在回應的有效負載中傳回綱目的所有現行版本號碼清單。 您可以使用 jsonformat 參數來格式化回應 (僅支援 numberobject 格式)。 如果您指定 'number' (預設值),則回應是一個數值陣列,對應於構件的已啟用版本 (省略已停用版本)。 它與端點目前產生的格式相同。 如果您指定 'object',則回應是 JSON 物件,其中包含代表構件版本的 JSON 物件陣列。 陣列中同時包含已啟用和已停用的版本。

curl 要求範例:

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

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

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} 端點(其中 {schema-id} 是模式的 ID,{version} 是模式版本的版本號)發出 DELETE 請求,從註冊表中刪除。 如果成功,則會傳回空的回應和狀態碼 204(無內容)。 刪除模式的唯一剩餘版本也會刪除模式。

curl 要求範例:

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

刪除綱目版本至少需要兩者:

  • 對 Event Streams 叢集資源類型的「讀者」角色存取權。
  • 管理員角色存取與刪除的模式相符的模式資源。

會產生 Activity Tracker 事件以報告動作。 如需相關資訊,請參閱 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} 端點(其中 {rule-type} 識別要更新的全局規則類型 - 目前唯一支援的類型是 COMPATIBILITY)發出 PUT 請求來更新,並在請求的正文中提供新的規則設定。 如果要求成功,則會在回應的有效負載中傳回剛更新的規則配置與狀態碼 200 (OK)。

在請求體中傳送的 JSON 文件必須具有下列屬性:

內容名稱 說明
類型 必須一律設為值 COMPATIBILITY。
配置 必須設為下列其中一個值: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 事件以報告動作。 如需相關資訊,請參閱 Activity Tracker 事件

取得廣域規則的現行值

全局規則的目前值可透過向 /rules/ {rule-type} 端點發出 GET 請求來擷取 (其中 {rule-type} 是要擷取的全局規則類型 - 目前唯一支援的類型是 COMPATIBILITY)。 如果要求成功,則會在回應的有效負載中傳回現行規則配置與狀態碼 200 (OK)。

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 事件以報告動作。 如需相關資訊,請參閱 Activity Tracker 事件

取得每一綱目規則

要檢索應用於特定模式的規則類型的目前值,可向 /artifacts/{schema-id}/rules/{rule-type} 端點提出 GET 請求(其中 {schema-id} 是模式的 ID,{rule-type} 是要檢索的全局規則類型 - 目前唯一支援的類型是 COMPATIBILITY)。 如果要求成功,則會在回應的有效負載中傳回現行規則值與狀態碼 200 (OK)。

curl 要求範例:

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

回應範例:

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

取得每一綱目規則至少需要:

  • 對 Event Streams 叢集資源類型的「讀者」角色存取權。
  • 對套用規則的綱目資源的「讀者」角色存取權。

更新每一綱目規則

應用於特定模式的規則可透過向 /artifacts/{schema-id}/rules/{rule-type} 端點(其中 {schema-id} 是模式的 ID,{rule-type} 是要擷取的全局規則類型 - 目前唯一支援的類型是 COMPATIBILITY)發出 PUT 請求來修改。 如果要求成功,則會在回應的有效負載中傳回剛更新的規則配置與狀態碼 200 (OK)。

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 事件以報告動作。 如需相關資訊,請參閱 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 事件以報告動作。 如需相關資訊,請參閱 Activity Tracker 事件

將相容性規則套用至綱目的新版本

當您建立模式的新版本時,模式註冊處支援執行相容性規則。 如果要求建立的新綱目版本不符合必要的相容性規則,則登錄會拒絕要求。 支援的規則如下:

相容性規則 測試對象 說明
不適用 建立新的綱目版本時,不會執行任何相容性檢查。
BACKWARD 綱目的最新版本 綱目的新版本可以省略現有綱目版本中存在的欄位。
BACKWARD_TRANSITIVE 綱目的所有版本 綱目的新版本可以新增現有綱目版本中不存在的選用欄位。
FORWARD 綱目的最新版本 綱目的新版本可以新增現有綱目版本中不存在的欄位。
FORWARD_TRANSITIVE 綱目的所有版本 綱目的新版本可以省略現有綱目版本中存在的選用欄位。
FULL 綱目的最新版本 綱目的新版本可以新增現有綱目版本中不存在的選用欄位。
FULL_TRANSITIVE 綱目的所有版本 綱目的新版本可以省略現有綱目版本中存在的選用欄位。

這些規則可以套用至兩個範圍:

  1. 在廣域範圍,這是建立新的綱目版本時使用的預設值。
  2. 在每一綱目層次。 如果定義每一綱目層次規則,則它會置換特定綱目的廣域預設值。

依預設,登錄具有廣域相容性規則設定 NONE。 必須定義每模式層級的規則,否則模式會預設使用全局設定。

完整 API 說明

如需 REST API 的說明 (含範例),請參閱 Event Streams schema-registry-rest

您可以從 Event Streams Schema Registry REST API YAML 檔案下載 API 的完整規格。 若要檢視 Swagger 檔案,請使用 Swagger 工具,例如 Swagger 編輯器

如需使用 SDK 存取綱目登錄的相關資訊,請參閱 Event Streams 綱目登錄 REST API

如需 Terraform 上 Event Streams 資源和資料來源的相關資訊,請參閱 資源和資料來源

與第三方一起使用結構描述註冊表 SerDes

Schema Registry 支援使用下列第三方 SerDes:

  • Confluent SerDes

若要配置 Confluent SerDes 使用綱目登錄,您需要在 Kafka 用戶端的配置中指定兩個內容:

內容名稱
SCHEMA_REGISTRY_URL_CONFIG 將此設定為 Schema Registry 的 URL,包括您的認證作為基本驗證,路徑為 /confluent。 例如,如果 $APIKEY 是要使用的 API 金鑰,而 $HOST服務憑證索引標籤中 kafka_http_url 欄位的主機,則值的形式為: https://token:{$APIKEY}@{$HOST}/{confluent}
BASIC_AUTH_CREDENTIALS_SOURCE 設定為 URL。 這會指示 SerDes 利用綱目登錄 URL 中提供的認證來使用 HTTP 基本鑑別。

您也可以選擇性地提供下列內容來控制綱目選擇 (主體命名策略):

內容名稱
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 的 Kafka 生產者,並可連線至 Event Streams 服務所需的屬性:

Confluence Serdes 的Kafka屬性
Confluence Serdes 的Kafka屬性

如果使用不在登錄中的綱目來傳送訊息,SerDes 會嘗試在登錄中建立新的綱目或綱目版本。 如果不需要此行為,則可以透過從應用程式中移除綱目資源的寫入者許可權來停用此行為。 請參閱 管理對綱目登錄的存取權

不支援綱目查閱和登錄的 normalize 選項。

搭配使用綱目登錄與使用 Confluent 登錄 API 的工具

綱目登錄支援 Confluent 綱目登錄 7.2 版所提供的 API 子集。 這旨在提供與設計為使用 Confluent 綱目登錄之工具的有限相容性。 只實作具有下列路徑的 HTTP REST 端點:

  • 相容性
  • config
  • 綱目
  • subjects

如果要將應用程式配置成使用這個相容性 API,請以下列格式指定「綱目登錄」端點:

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

其中:

  • $APIKEY 是要從 服務認證 標籤使用的 API 金鑰
  • $HOST服務認證 標籤中 kafka_http_url 欄位的主機

與第三方工具一起使用模式註冊表

Schema Registry 可以使用第三方工具進行測試,例如 kafka-avro-console-producer.shkafka-avro-console-consumer.sh,可以使用 Confluent SerDes 測試與模式的一致性。

若要執行生產者或消費者工具,Event Streams Enterprise 範例的連線選項需要一個共同屬性。

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 主控台生產者和消費者

您可以搭配使用 Kafka avro 主控台生產者和消費者工具與 Event Streams。 您必須提供用戶端屬性,此外,模式註冊處的連線方法和憑證必須作為指令行 --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。
  • SCHEMA_REGISTRY_URL 與您在 IBM Cloud 主控台的 Event Streams 服務憑證索引標籤中的 kafka_http_url 值、使用者名稱 token 和 apikey,以及路徑 /confluent (例如 https://{token}:{apikey}@{kafka_http_url}/{confluent})。
  • 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。
  • SCHEMA_REGISTRY_URL 與您在 IBM Cloud 主控台中 Event Streams 服務憑證索引標籤的 kafka_http_url 值,路徑為 /confluent (例如 https://{kafka_http_url}/{confluent})。
  • CONFIG_FILE 取代為配置檔的路徑。