Apache Pulsar 2.1 重磅釋出,流原生實時資料平臺

類別: IT

今天Apache Pulsar正式釋出了2.1.0版本!距離2.0版本的釋出,相距不到兩個月的時間。在這短短兩個月的時間內,社群的貢獻非常迅猛。2.1版本包含了很多新的特性和改進,這些改進幫助Pulsar從一個分散式訊息系統演進成一個完整的流原生(Stream Native)實時資料平臺。

在這個版本中,你可以看到以下幾個重要特性:

  • Pulsar IO: 一套基於Pulsar Functions實現的無伺服器化的聯結器(Connectors)框架,以及一組內建的聯結器實現

  • Tiered Storage: 層級儲存

  • Stateful Functions: 狀態函式

  • Clients:Go語言客戶端

  • Schema: 支援Avro 和 Protobuf 

Pulsar IO

在Pulsar 2.0版本中,我們首次引入了Pulsar Functions,一套基於無伺服器化(Serverless)的輕量級計算框架。這套計算框架為使用者提供了最為簡便的方式進行流計算邏輯的編寫。自從Pulsar Functions釋出之後,社群的反響程度十分熱烈,很多社群的使用者非常喜歡這個特性。因為使用它的學習成本基本為零,只要能寫Java或者Python的函式,就可以編寫在Pulsar進行流計算的邏輯。

我們將這種極簡至上(simplicity first)的理念延續在開發Pulsar 2.1的過程中。我們在Pulsar Functions上實現了一套無伺服器化的聯結器(Connectors)框架Pulsar IO,用來簡化使用者匯入資料到Pulsar和從Pulsar中匯出資料。使用者在使用聯結器的時候,不需要編寫任何的程式碼。你所需要做的事情只是準備一個關於你需要連線的系統的配置檔案,然後就可以使用Pulsar提供的管理工具向Pulsar提交相應的聯結器。Pulsar就會負責剩下的事情,包括容錯管理,負載均衡,隨著負載自動伸縮擴容。

另外,2.1版本包含六個內建的聯結器實現。他們分別是:

  • Aerospike聯結器

  • Cassandra聯結器

  • Kafka聯結器

  • Kinesis聯結器

  • RabbitMQ聯結器

  • Twitter Firehose聯結器

你可以參考Pulsar 2.1的教程來學習使用Cassandra聯結器,將資料從Pulsar匯出到Cassandra裡。

我們計劃在未來的釋出版本中包含更多的聯結器實現。如果你對Pulsar感興趣,想成為Pulsar的程式碼貢獻者,我們十分歡迎你為Pulsar開發不同的聯結器。開發聯結器也十分簡單,跟編寫一個Pulsar函式進行流處理一樣簡單。

層級儲存

相比於其他訊息/流系統,Apache Pulsar最大的優勢是它基於Apache BookKeeper的分塊儲存(Segment Storage)架構。在Pulsar裡面,一個主題分割槽(Topic Partition,或者稱為一個流)會被切分成分塊(Segments)儲存在BookKeeper裡面。這就意味著,一個主題分割槽的容量不受限於單臺機器的容量。只要整個叢集有足夠的容量,你就可以往一個主題分割槽裡面無限追加資料。如果你的叢集開始沒有容量,你只需簡單地往叢集裡面新增儲存節點即可,Pulsar就會開始自動使用新的儲存節點,而不需要重新均衡已有的資料分割槽。但是,如果一直在BookKeeper裡面累積儲存歷史資料,那麼整個叢集的開銷就會變得昂貴。

Pulsar通過提供層級儲存(Tiered Storage)的方式來解決容量和開銷的權衡。層級儲存通過將老的資料分塊從BookKeeper解除安裝到更廉價的儲存系統(比如AWS S3, Google GCS和HDFS),從真正意義上把Pulsar變成了真正的無限資料流(Infinite Streams)儲存。對於終端使用者而言,他們不需要知道資料是儲存在BookKeeper還是儲存在更廉價的儲存系統中,整個流程對使用者是透明的。這也意味著使用者主要編寫一套程式碼即可同時消費最新的流資料和歷史資料。

目前2.1版本只支援S3。在未來的2.2版本中,我們即將支援更多的雲端儲存,比如Google GCS,Azure Blobstore和HDFS。如果你對層級儲存感興趣,也想貢獻對其他雲端儲存的支援,我們也十分歡迎來自你的程式碼貢獻。

狀態函式

流計算中最充滿挑戰的一個問題是解決狀態(State)的管理。Pulsar Functions也面臨同樣的問題。我們開發Pulsar Functions的初衷就是為開發者簡化編寫原生流處理的邏輯。我們同樣也希望簡化流計算中的狀態的管理。因為在2.1版本中,我們引入了狀態(State)API,開發者可以使用狀態API來將計算的一些狀態儲存到底層的儲存系統中。這套狀態API跟Apache BookKeeper的表服務進行了深入的整合。目前支援簡單的key/value操作以及對於計數支援的inc操作。

狀態函式在2.1版本中作為一個開發者預覽(Developer Preview)特性發布。我們希望通過收集社群的意見完善出一套真正簡化流計算狀態管理的API。如果你有好的想法和建議,歡迎通過Pulsar的郵件列表,Github或者Slack來跟我們交流。

Schema

在2.0版本中,Pulsar引入了對Schema的原生支援。這意味著你可以在建立Pulsar主題的時候定義訊息相應的Schema,然後Pulsar會根據你指定的Schema保證釋出訊息的完整性。2.0版本只支援String,Bytes和JSON三種內建Schema。從2.1版本開始,Pulsar原生支援Avro和Protobuf這兩種型別。

Schema將Pulsar從一個只支援非結構化資料的訊息系統變成了也支援結構化資料的流資料平臺。在接下來的2.2版本中,Schema將作為最重要的基石元件用來實現流資料的可查詢化,也就是傳說中的Pulsar SQL。

客戶端

在2.1釋出版本中,我們正式釋出了官方的Go語言客戶端。該Go語言客戶端是基於原生的C++客戶端實現,所以是一個直接用在生產線上的客戶端實現。除了官方原生的客戶端,Comcast也在這段時間釋出了他們使用原生Go語言編寫的用在生產線上的客戶端。

結語

Apache Pulsar是Yahoo開源的下一代訊息系統。在2017年初,Yahoo將Pulsar貢獻給Apache進行孵化。在過去一年的時間內,Apache Pulsar一共釋出了6個版本,其中包括在六月份釋出的2.0里程碑。最新的2.1版本延續Pulsar極簡至上的原則,從真正意義上將Pulsar由一個分散式訊息系統演變成一個完整的流原生資料平臺。在未來一個月,也就是2.2版本中,我們將會有更多強悍的特性發布。歡迎關注和參與到Pulsar社群。

Pulsar 2.1的下載連結:https://pulsar.incubator.apache.org/en/download/

Pulsar的專案連結:https://pulsar.incubator.apache.org/

Pulsar的Github程式碼庫:https://github.com/apache/incubator-pulsar

Pulsar的Slack Channel:https://apache-pulsar.herokuapp.com/

Pulsar的郵件列表:https://pulsar.incubator.apache.org/contact/

Apache Pulsar 2.1 重磅釋出,流原生實時資料平臺原文請看這裡