今天Apache Pulsar正式發(fā)布了2.1.0版本!距離2.0版本的發(fā)布,相距不到兩個月的時間。在這短短兩個月的時間內蜕便,社區(qū)的貢獻非常迅猛。2.1版本包含了很多新的特性和改進贩幻,這些改進幫助Pulsar從一個分布式消息系統(tǒng)演進成一個完整的流原生(Stream Native)實時數(shù)據(jù)平臺轿腺。
在這個版本中,你可以看到以下幾個重要特性:
Pulsar IO: 一套基于Pulsar Functions實現(xiàn)的無服務器化的連接器(Connectors)框架丛楚,以及一組內置的連接器實現(xiàn)
Tiered Storage: 層級存儲
Stateful Functions: 狀態(tài)函數(shù)
Clients:Go語言客戶端
Schema: 支持Avro 和 Protobuf
Pulsar IO
在Pulsar 2.0版本中族壳,我們首次引入了Pulsar Functions,一套基于無服務器化(Serverless)的輕量級計算框架趣些。這套計算框架為用戶提供了最為簡便的方式進行流計算邏輯的編寫仿荆。自從Pulsar Functions發(fā)布之后,社區(qū)的反響程度十分熱烈喧务,很多社區(qū)的用戶非常喜歡這個特性赖歌。因為使用它的學習成本基本為零枉圃,只要能寫Java或者Python的函數(shù)功茴,就可以編寫在Pulsar進行流計算的邏輯。
我們將這種極簡至上(simplicity first)的理念延續(xù)在開發(fā)Pulsar 2.1的過程中孽亲。我們在Pulsar Functions上實現(xiàn)了一套無服務器化的連接器(Connectors)框架Pulsar IO坎穿,用來簡化用戶導入數(shù)據(jù)到Pulsar和從Pulsar中導出數(shù)據(jù)。用戶在使用連接器的時候返劲,不需要編寫任何的代碼玲昧。你所需要做的事情只是準備一個關于你需要連接的系統(tǒng)的配置文件,然后就可以使用Pulsar提供的管理工具向Pulsar提交相應的連接器篮绿。Pulsar就會負責剩下的事情孵延,包括容錯管理,負載均衡亲配,隨著負載自動伸縮擴容尘应。
另外,2.1版本包含六個內置的連接器實現(xiàn)吼虎。他們分別是:
Aerospike連接器
Cassandra連接器
Kafka連接器
Kinesis連接器
RabbitMQ連接器
Twitter Firehose連接器
你可以參考Pulsar 2.1的教程來學習使用Cassandra連接器犬钢,將數(shù)據(jù)從Pulsar導出到Cassandra里。
我們計劃在未來的發(fā)布版本中包含更多的連接器實現(xiàn)思灰。如果你對Pulsar感興趣玷犹,想成為Pulsar的代碼貢獻者,我們十分歡迎你為Pulsar開發(fā)不同的連接器洒疚。開發(fā)連接器也十分簡單歹颓,跟編寫一個Pulsar函數(shù)進行流處理一樣簡單坯屿。
層級存儲
相比于其他消息/流系統(tǒng),Apache Pulsar最大的優(yōu)勢是它基于Apache BookKeeper的分塊存儲(Segment Storage)架構巍扛。在Pulsar里面愿伴,一個主題分區(qū)(Topic Partition,或者稱為一個流)會被切分成分塊(Segments)存儲在BookKeeper里面电湘。這就意味著隔节,一個主題分區(qū)的容量不受限于單臺機器的容量。只要整個集群有足夠的容量寂呛,你就可以往一個主題分區(qū)里面無限追加數(shù)據(jù)怎诫。如果你的集群開始沒有容量,你只需簡單地往集群里面添加存儲節(jié)點即可贷痪,Pulsar就會開始自動使用新的存儲節(jié)點幻妓,而不需要重新均衡已有的數(shù)據(jù)分區(qū)。但是劫拢,如果一直在BookKeeper里面累積存儲歷史數(shù)據(jù)肉津,那么整個集群的開銷就會變得昂貴。
Pulsar通過提供層級存儲(Tiered Storage)的方式來解決容量和開銷的權衡舱沧。層級存儲通過將老的數(shù)據(jù)分塊從BookKeeper卸載到更廉價的存儲系統(tǒng)(比如AWS S3, Google GCS和HDFS)妹沙,從真正意義上把Pulsar變成了真正的無限數(shù)據(jù)流(Infinite Streams)存儲。對于終端用戶而言熟吏,他們不需要知道數(shù)據(jù)是存儲在BookKeeper還是存儲在更廉價的存儲系統(tǒng)中距糖,整個流程對用戶是透明的。這也意味著用戶主要編寫一套代碼即可同時消費最新的流數(shù)據(jù)和歷史數(shù)據(jù)牵寺。
目前2.1版本只支持S3悍引。在未來的2.2版本中,我們即將支持更多的云存儲帽氓,比如Google GCS趣斤,Azure Blobstore和HDFS。如果你對層級存儲感興趣黎休,也想貢獻對其他云存儲的支持浓领,我們也十分歡迎來自你的代碼貢獻。
狀態(tài)函數(shù)
流計算中最充滿挑戰(zhàn)的一個問題是解決狀態(tài)(State)的管理奋渔。Pulsar Functions也面臨同樣的問題镊逝。我們開發(fā)Pulsar Functions的初衷就是為開發(fā)者簡化編寫原生流處理的邏輯。我們同樣也希望簡化流計算中的狀態(tài)的管理嫉鲸。因為在2.1版本中撑蒜,我們引入了狀態(tài)(State)API,開發(fā)者可以使用狀態(tài)API來將計算的一些狀態(tài)存儲到底層的存儲系統(tǒng)中。這套狀態(tài)API跟Apache BookKeeper的表服務進行了深入的整合座菠。目前支持簡單的key/value操作以及對于計數(shù)支持的inc操作狸眼。
狀態(tài)函數(shù)在2.1版本中作為一個開發(fā)者預覽(Developer Preview)特性發(fā)布。我們希望通過收集社區(qū)的意見完善出一套真正簡化流計算狀態(tài)管理的API浴滴。如果你有好的想法和建議拓萌,歡迎通過Pulsar的郵件列表,Github或者Slack來跟我們交流升略。
Schema
在2.0版本中微王,Pulsar引入了對Schema的原生支持。這意味著你可以在創(chuàng)建Pulsar主題的時候定義消息相應的Schema品嚣,然后Pulsar會根據(jù)你指定的Schema保證發(fā)布消息的完整性炕倘。2.0版本只支持String,Bytes和JSON三種內置Schema翰撑。從2.1版本開始罩旋,Pulsar原生支持Avro和Protobuf這兩種類型。
Schema將Pulsar從一個只支持非結構化數(shù)據(jù)的消息系統(tǒng)變成了也支持結構化數(shù)據(jù)的流數(shù)據(jù)平臺眶诈。在接下來的2.2版本中涨醋,Schema將作為最重要的基石組件用來實現(xiàn)流數(shù)據(jù)的可查詢化,也就是傳說中的Pulsar SQL逝撬。
客戶端
在2.1發(fā)布版本中浴骂,我們正式發(fā)布了官方的Go語言客戶端。該Go語言客戶端是基于原生的C++客戶端實現(xiàn)球拦,所以是一個直接用在生產(chǎn)線上的客戶端實現(xiàn)靠闭。除了官方原生的客戶端,Comcast也在這段時間發(fā)布了他們使用原生Go語言編寫的用在生產(chǎn)線上的客戶端坎炼。
結語
Apache Pulsar是Yahoo開源的下一代消息系統(tǒng)。在2017年初拦键,Yahoo將Pulsar貢獻給Apache進行孵化谣光。在過去一年的時間內,Apache Pulsar一共發(fā)布了6個版本芬为,其中包括在六月份發(fā)布的2.0里程碑萄金。最新的2.1版本延續(xù)Pulsar極簡至上的原則,從真正意義上將Pulsar由一個分布式消息系統(tǒng)演變成一個完整的流原生數(shù)據(jù)平臺媚朦。在未來一個月氧敢,也就是2.2版本中,我們將會有更多強悍的特性發(fā)布询张。歡迎關注和參與到Pulsar社區(qū)孙乖。
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/