Apache Pulsar 2.1 重磅發布

今天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的下載鏈接:pulsar.incubator.apache.org

Pulsar的項目鏈接:pulsar.incubator.apache.org

Pulsar的Github代碼庫:github.com/apache/incub

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

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

原文鏈接


推薦閱讀:

TAG:科技 | 大數據 | 消息隊列 |