官網原文标題《Schema Registry》
翻譯時間:2018-10-28
官網原文位址:http://pulsar.apache.org/docs/en/concepts-schema-registry/
譯者:Scheme注冊是Pulsar保證資料類型安全的機制。
--------------------分割線----------------
Schema系統資料庫
對于圍繞消息總線(如pulsar)搭建的應用來說,類型安全非常重要。 生産者和消費者需要某種機制來協調topic層面的類型, 以免出現各種各樣的潛在問題 (例如序列化和反序列化問題)。 應用通常采用兩種基本方法之一,在消息傳遞中確定類型安全:
- "用戶端" 方法, 消息生産者和消費者不僅負責序列化和反序列處理消息 (包括原始位元組), 而且還 "知道" 哪些類型是通過哪些topic傳輸的。 如果生産者往主題 topic-1發送溫度感應資料,而這個topic的consumer按照讀取濕度感應的方式來轉換資料,将會遇到問題。
- "伺服器端" 方法, 生産者和消費者告知系統哪些資料類型可以通過topic傳輸。 通過這種方法,消息系統強制執行類型安全, 并確定生産者和消費者保持同步。
這兩種方法都被Pulsar支援,你可以在topic的基礎上,自由選擇采用哪一種,或者混用。
- "用戶端" 方法中, 生産者和消費者可以發送和接收由原始位元組數組組成的消息, 并在應用中保留所有的類型安全,以“帶外”基礎上強制執行。
- "伺服器端" 方法中,Pulsar有一個内置的 schema registry,它使用戶端能夠根據每個topic載入資料schema。 這些schema顯示了,topic可以識别哪些資料類型為有效。
Pulsar的schema注冊目前僅能在 Java 用戶端使用。
基礎架構
當你使用Schema建立帶類型的producer時,schema将會被自動上傳。 此外,可以通過Pulsar的REST API 手動上載、提取和更新schema。
其他schema注冊的後端
開箱即用,Pulsar使用 Apache BookKeeper log存儲系統來儲存schema。 不過你也可以按照你的需要使用不同的後端。 客制化的schema存儲邏輯文檔即将推出。
Schema是如何工作的
Pulsar schema應用于主題層面(schema無法應用于namespace和tenant層面),并且被強制執行,producer和consumer上傳schema到Pulsar broker。
Pulsar schema是非常簡單的資料結構,它的構成如下:
- name。Pulsar中, schema的名稱是schema應用于的topic。
- payload , 它是schema的二進制表示形式。
- Schema類型
- 使用者定義的字元串/字元串映射map, properties 。 Properties如何使用,完全由程式指定。 Properties可能是關聯到schema的Git hash,例如dev或者prod等環境資訊。
Schema版本
我們通過一個例子,來講解schema版本如何工作。 假設使用以下代碼建立Pulsar Java 用戶端,嘗試連接配接到Pulsar,并開始發送消息:
PulsarClient client = PulsarClient.builder()
.serviceUrl("pulsar://localhost:6650")
.build();
Producer<SensorReading> producer = client.newProducer(JSONSchema.of(SensorReading.class))
.topic("sensor-data")
.sendTimeout(3, TimeUnit.SECONDS)
.create();
下表列出了嘗試連接配接時可能出現的場景, 以及每種場景下發生了什麼:
場景 | 發生了什麼 |
該Topic不存在schema | 使用給定的schema建立了producer。 Schema傳輸到broker并被存儲 (因為沒有現成的schema與SensorReading schema "相容")。 任何使用同樣schema/topic的consumer可以消費sensor-datatopic中的消息。 |
Schema已經存在;producer使用已經被儲存過的schema進行連接配接 | Schema被傳輸到Pulsar broker。 Broker确認此schema是相容的。 Broker嘗試在BookKeeper存儲schema,但是發現它已經存在了,是以用它來标記生産的消息。 |
Schema已經存在;producer使用相容的新schema進行連接配接。 | Producer傳輸schema到broker。broker發現這個schema是相容的,随後儲存這個新schema作為目前版本(使用新的版本号)。 |
Schema版本是連續的。 Schema被處理關聯topic的broker所儲存,便于進行版本的配置設定。 一旦配置設定/提供了schema的版本,後續由該生産者生産的所有消息,都将被恰當的版本所标記。
支援的schema格式
以下格式被Pulsar schema注冊所支援:
無。如果沒有為topic指定schema,producer和consumer将會處理原始位元組。
- String (用于 UTF-8-encoded 字元串)
- JSON
- Protobuf
- Avro
管理Schema
你可以使用Pulsar的admin tools來管理topic的schema