如何使用Avro、卡夫卡和磚模式注冊嗎
在以前的博文,我們介紹了新的內置Apache Avro數據源在Apache火花並解釋如何使用它來構建流媒體數據管道from_avro
和to_avro
功能。Apache卡夫卡和Apache Avro通常用來構建一個可伸縮的和近實時的數據管道。在這篇文章中,我們介紹如何構建更可靠的管道在磚的集成融合性的模式注冊表。這個特性可以從磚4.2運行時。
模式演化
對於長時間運行的流媒體工作,數據流的模式往往會隨著時間而改變。流模式演化是一個典型的問題。例如,支持業務邏輯的變化,需要做相應的修改通過添加新列數據流。模式變化會打破現有的數據管道,導致服務中斷。而不是停止、更新和重新啟動你的管道在模式演化的情況下,管道設計需要回答下列問題:
- 哪些模式變化是安全的嗎?
- 如何從一個數據流讀取數據不會過時的方式嗎?
- 如何跟蹤數據流的改變曆史?
模式注冊表是最受歡迎的解決方案Kafka-based數據管道。像一個Apache蜂巢metastore,它記錄所有注冊數據流的模式,以及模式改變曆史。它還定義了多個兼容性水平。例如,您可以執行,隻允許向後兼容的模式變化。
支持讀取數據流不會過時,你需要嵌入模式在每條記錄信息。因此,模式標識符,而不是一個完整的模式,是每個記錄的一部分。模式注冊表提供了自定義Avro編碼器/解碼器。你可以使用模式編碼和解碼Avro記錄標識符。
磚已經注冊到集成模式from_avro
和to_avro
功能。你可以輕鬆地遷移流管道,它是建立在模式注冊表,引發結構化流。此外,from_avro
和to_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模式
。
dataDF.select (to_avro ($“關鍵”點燃(“t鍵”),schemaRegistryURL)。作為(“關鍵”),to_avro ($“價值”點燃(“值”),schemaRegistryURL)。作為(“價值”)).writeStream。格式(“卡夫卡”).option (“kafka.bootstrap.servers”、服務器).option (“主題”,“t”).save ()