該頁面提供了有關流處理的一些背景知識,描述了 Samza 是什么,以及為什么構建它。
消息系統(tǒng)是實現(xiàn)近實時異步計算的常用方式。當事情發(fā)生時,消息可以添加到消息隊列(ActiveMQ,RabbitMQ),pub-sub 系統(tǒng)(Kestrel,Kafka)或日志聚合系統(tǒng)(Flume,Scribe)中。下游用戶從這些系統(tǒng)讀取消息,并根據(jù)消息內容進行處理或采取行動。
假設你有一個網(wǎng)站,每當有人加載一個頁面時,你會發(fā)送一個“用戶瀏覽的頁面”事件到消息系統(tǒng)。您可能會讓用戶執(zhí)行以下任何操作:
消息傳遞系統(tǒng)允許您將所有這些工作與實際網(wǎng)頁服務分離。
消息系統(tǒng)是一個相當?shù)图墑e的基礎設施 - 它存儲消息并等待用戶使用它們。當您開始編寫產(chǎn)生或使用消息的代碼時,您很快就會發(fā)現(xiàn)在處理層中有很多棘手的問題需要解決。Samza 旨在幫助解決這些問題。
考慮上面的計數(shù)示例(計數(shù)頁面視圖和更新儀表板)。當您的使用者正在運行的機器出現(xiàn)故障,并且當前計數(shù)器值丟失時會發(fā)生什么?你怎么恢復?處理器在重新啟動時應該在哪里運行?如果底層郵件系統(tǒng)向您發(fā)送兩次相同的郵件或丟失郵件怎么辦?(除非您小心,否則您的計數(shù)將不正確。)如果您想按頁面網(wǎng)址分組的網(wǎng)頁瀏覽量計算如何?如果單個機器處理太多,您如何將計算分布在多臺機器上?
流處理在消息傳遞系統(tǒng)之上是更高層次的抽象,它的目的是要正確解決這一類問題。
Samza 是一個流處理框架,具有以下功能:
可用的開源流處理系統(tǒng)實際上很年輕,沒有一個系統(tǒng)提供完整的解決方案。這一領域的新問題包括:如何管理流處理器的狀態(tài),流是否應該在磁盤上遠程緩沖、在接收到重復消息或丟失消息時該怎么做,以及如何對底層消息傳遞系統(tǒng)進行建模。
Samza 的主要特點是:
有關 Samza 的更深入的討論及其與其他流處理系統(tǒng)的關系,請參閱 Samza 的 比較 文檔。
更多建議: