Samza 背景

2018-08-18 18:14 更新

該頁(yè)面提供了有關(guān)流處理的一些背景知識(shí),描述了 Samza 是什么,以及為什么構(gòu)建它。

什么是消息?

消息系統(tǒng)是實(shí)現(xiàn)近實(shí)時(shí)異步計(jì)算的常用方式。當(dāng)事情發(fā)生時(shí),消息可以添加到消息隊(duì)列(ActiveMQ,RabbitMQ),pub-sub 系統(tǒng)(Kestrel,Kafka)或日志聚合系統(tǒng)(Flume,Scribe)中。下游用戶從這些系統(tǒng)讀取消息,并根據(jù)消息內(nèi)容進(jìn)行處理或采取行動(dòng)。

假設(shè)你有一個(gè)網(wǎng)站,每當(dāng)有人加載一個(gè)頁(yè)面時(shí),你會(huì)發(fā)送一個(gè)“用戶瀏覽的頁(yè)面”事件到消息系統(tǒng)。您可能會(huì)讓用戶執(zhí)行以下任何操作:

  • 將消息存儲(chǔ)在Hadoop中以供將來(lái)分析
  • 計(jì)數(shù)頁(yè)面視圖并更新儀表板
  • 如果頁(yè)面視圖失敗,則觸發(fā)警報(bào)
  • 向其他用戶發(fā)送電子郵件通知
  • 使用用戶的配置文件加入頁(yè)面視圖事件,并將消息發(fā)送回消息系統(tǒng)

消息傳遞系統(tǒng)允許您將所有這些工作與實(shí)際網(wǎng)頁(yè)服務(wù)分離。

什么是流處理?

消息系統(tǒng)是一個(gè)相當(dāng)?shù)图?jí)別的基礎(chǔ)設(shè)施 - 它存儲(chǔ)消息并等待用戶使用它們。當(dāng)您開(kāi)始編寫(xiě)產(chǎn)生或使用消息的代碼時(shí),您很快就會(huì)發(fā)現(xiàn)在處理層中有很多棘手的問(wèn)題需要解決。Samza 旨在幫助解決這些問(wèn)題。

考慮上面的計(jì)數(shù)示例(計(jì)數(shù)頁(yè)面視圖和更新儀表板)。當(dāng)您的使用者正在運(yùn)行的機(jī)器出現(xiàn)故障,并且當(dāng)前計(jì)數(shù)器值丟失時(shí)會(huì)發(fā)生什么?你怎么恢復(fù)?處理器在重新啟動(dòng)時(shí)應(yīng)該在哪里運(yùn)行?如果底層郵件系統(tǒng)向您發(fā)送兩次相同的郵件或丟失郵件怎么辦?(除非您小心,否則您的計(jì)數(shù)將不正確。)如果您想按頁(yè)面網(wǎng)址分組的網(wǎng)頁(yè)瀏覽量計(jì)算如何?如果單個(gè)機(jī)器處理太多,您如何將計(jì)算分布在多臺(tái)機(jī)器上?

流處理在消息傳遞系統(tǒng)之上是更高層次的抽象,它的目的是要正確解決這一類問(wèn)題。

Samza

Samza 是一個(gè)流處理框架,具有以下功能:

  • 簡(jiǎn)單 API:與大多數(shù)低級(jí)消息系統(tǒng) API 不同,Samza 提供了一個(gè)非常簡(jiǎn)單的基于回調(diào)的“過(guò)程消息” API,與 MapReduce 相當(dāng)。
  • 管理狀態(tài): Samza 管理流處理器狀態(tài)的快照和恢復(fù)。當(dāng)處理器重新啟動(dòng)時(shí),Samza 將其狀態(tài)恢復(fù)為一致的快照。Samza 被構(gòu)建來(lái)處理大量的狀態(tài)(每個(gè)分區(qū)有許多千兆字節(jié))。
  • 容錯(cuò):當(dāng)集群中的某臺(tái)機(jī)器發(fā)生故障時(shí),Samza 將與 YARN 合作,將您的任務(wù)透明地遷移到另一臺(tái)機(jī)器。
  • 耐久性: Samza 使用 Kafka 來(lái)確保消息按照寫(xiě)入分區(qū)的順序進(jìn)行處理,并且不會(huì)丟失任何消息。
  • 可擴(kuò)展性: Samza 在每個(gè)級(jí)別進(jìn)行分區(qū)和分發(fā)。Kafka 提供有序,分區(qū),可重放,容錯(cuò)的流。YARN 為 Samza 容器提供了分布式環(huán)境。
  • 可插拔:盡管 Samza 與 Kafka 和 YARN 開(kāi)箱即用,Samza 提供了一個(gè)可插拔的 API,可讓您與其他郵件系統(tǒng)和執(zhí)行環(huán)境一起運(yùn)行 Samza。
  • 處理器隔離: Samza 與 Apache YARN 合作,它支持 Hadoop 的安全模式,并通過(guò) Linux CGroups 進(jìn)行資源隔離。

備擇方案

可用的開(kāi)源流處理系統(tǒng)實(shí)際上很年輕,沒(méi)有一個(gè)系統(tǒng)提供完整的解決方案。這一領(lǐng)域的新問(wèn)題包括:如何管理流處理器的狀態(tài),流是否應(yīng)該在磁盤(pán)上遠(yuǎn)程緩沖、在接收到重復(fù)消息或丟失消息時(shí)該怎么做,以及如何對(duì)底層消息傳遞系統(tǒng)進(jìn)行建模。

 Samza 的主要特點(diǎn)是:

  • Samza 支持容錯(cuò)的本地狀態(tài)。狀態(tài)可以被認(rèn)為是與處理任務(wù)分開(kāi)和共處的表。狀態(tài)本身被模仿為流。如果由于機(jī)器故障而導(dǎo)致本地狀態(tài)丟失,則會(huì)重播狀態(tài)流以進(jìn)行恢復(fù)。
  • 流被排序,分區(qū),可重放和容錯(cuò)。
  • YARN 用于處理器隔離,安全和容錯(cuò)。
  • 作業(yè)解耦:如果一個(gè)工作變慢,建立積壓的未處理的消息,系統(tǒng)的其余部分不受影響。

有關(guān) Samza 的更深入的討論及其與其他流處理系統(tǒng)的關(guān)系,請(qǐng)參閱 Samza 的 比較 文檔。

概念?



以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)