新一代消息系統Apache Pulsar 2.1 重磅發布


Apache Pulsar 是 2016 年 yahoo 開源的下一代大規模分布式消息系統,目前已經加入 Apache 基金會。在 Yahoo 的生產環境中大規模部署並使用了近 4 年,服務於 Mail、Finance、Sports、Flickr、the Gemini Ads platform、Sherpa 以及 Yahoo 的 KV 存儲等,在 Yahoo 全球 8 個數據中心之間維護了全聯通的復制,並支持了 200 多萬個 Topics。

Apache Pulsar 有幾個明顯區別於其他消息系統的特點:

  • 優秀的數據持久性和順序性。每一條消息都提供了全局唯一的 ID,多副本,並都是在實時刷盤后再返回給用戶。

  • 統一的消費模型: 支持 Stream (如 Kafka )和 Queue (如 RabbitMQ )兩種消費模型, 支持 exclusive、failover 和 shared 三種消費模式。

  • 靈活的擴展性: 節點擴展的線性和瞬時完成,在擴展中不會有數據的拷貝和遷移。

  • 高吞吐低延遲,在實時刷盤的前提下,依然提供了高帶寬( 180 萬 messages/ 秒)和低延遲( 5ms at 99%)。

Pulsar 2.1 更加了豐富消息系統之外的“ Stream Native ”的屬性,比如 Schema 的支持, 層級存儲, 狀態函數等。。

 

===========



今天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/

原文鏈接: https://mp.weixin.qq.com/s/klf1UJfkvisxkm0vj12fwg


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM