跳轉到主要內容
公司博客上

如何使用Avro、卡夫卡和磚模式注冊嗎

分享這篇文章

以前的博文,我們介紹了新的內置Apache Avro數據源在Apache火花並解釋如何使用它來構建流媒體數據管道from_avroto_avro功能。Apache卡夫卡和Apache Avro通常用來構建一個可伸縮的和近實時的數據管道。在這篇文章中,我們介紹如何構建更可靠的管道在磚的集成融合性的模式注冊表。這個特性可以從磚4.2運行時。

模式演化

對於長時間運行的流媒體工作,數據流的模式往往會隨著時間而改變。流模式演化是一個典型的問題。例如,支持業務邏輯的變化,需要做相應的修改通過添加新列數據流。模式變化會打破現有的數據管道,導致服務中斷。而不是停止、更新和重新啟動你的管道在模式演化的情況下,管道設計需要回答下列問題:

  1. 哪些模式變化是安全的嗎?
  2. 如何從一個數據流讀取數據不會過時的方式嗎?
  3. 如何跟蹤數據流的改變曆史?

模式注冊表是最受歡迎的解決方案Kafka-based數據管道。像一個Apache蜂巢metastore,它記錄所有注冊數據流的模式,以及模式改變曆史。它還定義了多個兼容性水平。例如,您可以執行,隻允許向後兼容的模式變化。

支持讀取數據流不會過時,你需要嵌入模式在每條記錄信息。因此,模式標識符,而不是一個完整的模式,是每個記錄的一部分。模式注冊表提供了自定義Avro編碼器/解碼器。你可以使用模式編碼和解碼Avro記錄標識符。

磚已經注冊到集成模式from_avroto_avro功能。你可以輕鬆地遷移流管道,它是建立在模式注冊表,引發結構化流。此外,from_avroto_avro函數可用於批處理查詢,因為結構化流結合批處理和流媒體處理的火花SQL引擎。

使用模式的示例代碼注冊表

您可以導入筆記本的例子和玩自己,或預覽在線

假設您已經在您的集群部署卡夫卡和模式注冊表,還有一個卡夫卡主題“t”,注冊在注冊表模式鍵和值的主題“t鍵”和“值”類型的字符串和整數分別。

下麵的代碼讀取主題“t”的火花DataFrame模式

val df =火花.readStream格式(“卡夫卡”).option (“kafka.bootstrap.servers”kafkaURL).option (“訂閱”,“t”).load ().select (from_avro ($“關鍵”,“t鍵”schemaRegistryURL)。作為(“關鍵”),from_avro ($“價值”,“值”schemaRegistryURL)。作為(“價值”))

下麵的代碼寫的火花DataFrame模式 在卡夫卡的話題“t”

dataDF.select (to_avro ($“關鍵”點燃(“t鍵”),schemaRegistryURL)。作為(“關鍵”),to_avro ($“價值”點燃(“值”),schemaRegistryURL)。作為(“價值”)).writeStream格式(“卡夫卡”).option (“kafka.bootstrap.servers”、服務器).option (“主題”,“t”).save ()

閱讀更多

免費試著磚

相關的帖子

看到所有公司博客上的帖子
Baidu
map