Apache Pulsar 2.1 重磅發佈

本文轉載自Apache Pulsar的微信公衆號
[原文連接][1] 

Apache Pulsar正式發佈了2.1.0版本!距離2.0版本的發佈,相距不到兩個月的時間。在這短短兩個月的時間內,社區的貢獻很是迅猛。2.1版本包含了不少新的特性和改進,這些改進幫助Pulsar從一個分佈式消息系統演進成一個完整的流原生(Stream Native)實時數據平臺。git

在這個版本中,你能夠看到如下幾個重要特性:github

  • 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進行流計算的邏輯。apache

咱們將這種極簡至上(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函數進行流處理同樣簡單。app

層級存儲

相比於其餘消息/流系統,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。若是你對層級存儲感興趣,也想貢獻對其餘雲存儲的支持,咱們也十分歡迎來自你的代碼貢獻。less

狀態函數

流計算中最充滿挑戰的一個問題是解決狀態(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.apac...

Pulsar的項目連接:https://pulsar.incubator.apac...

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

Pulsar的Slack Channel:https://apache-pulsar.herokua...

Pulsar的郵件列表:https://pulsar.incubator.apac...