天天看點

Pulsar官方文檔翻譯-概念和架構-Schema系統資料庫(Schema Registry)Schema系統資料庫

官網原文标題《Schema Registry》

翻譯時間:2018-10-28

官網原文位址:http://pulsar.apache.org/docs/en/concepts-schema-registry/

譯者:Scheme注冊是Pulsar保證資料類型安全的機制。

--------------------分割線----------------

Schema系統資料庫

對于圍繞消息總線(如pulsar)搭建的應用來說,類型安全非常重要。 生産者和消費者需要某種機制來協調topic層面的類型, 以免出現各種各樣的潛在問題 (例如序列化和反序列化問題)。 應用通常采用兩種基本方法之一,在消息傳遞中確定類型安全:

  1. "用戶端" 方法, 消息生産者和消費者不僅負責序列化和反序列處理消息 (包括原始位元組), 而且還 "知道" 哪些類型是通過哪些topic傳輸的。 如果生産者往主題 topic-1發送溫度感應資料,而這個topic的consumer按照讀取濕度感應的方式來轉換資料,将會遇到問題。
  2. "伺服器端" 方法, 生産者和消費者告知系統哪些資料類型可以通過topic傳輸。 通過這種方法,消息系統強制執行類型安全, 并確定生産者和消費者保持同步。

這兩種方法都被Pulsar支援,你可以在topic的基礎上,自由選擇采用哪一種,或者混用。

  1. "用戶端" 方法中, 生産者和消費者可以發送和接收由原始位元組數組組成的消息, 并在應用中保留所有的類型安全,以“帶外”基礎上強制執行。
  2. "伺服器端" 方法中,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

繼續閱讀