W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Samza 由三層組成:
Samza 為所有三層提供了即時支持。
這三個組合在一起形成Samza:
該架構(gòu)遵循與 Hadoop 類似的模式(它也使用 YARN 作為執(zhí)行層,用于存儲的 HDFS 和 MapReduce 作為處理 API):
在深入分析這三個層次之前,應(yīng)該注意的是,Samza 的支持不僅限于 Kafka 和 YARN。Samza 的執(zhí)行和流式傳輸層都是可插拔的,并允許開發(fā)人員如果愿意實施替代方案。
Kafka 是一個分布式的 pub / sub 和消息隊列系統(tǒng),它提供至少一次消息傳遞保證(即系統(tǒng)保證沒有消息丟失,但在某些故障情況下,消費者可能會多次收到相同的消息),并且高度可用的分區(qū)(即,即使機(jī)器掉電,流的分區(qū)仍然可用)。
在 Kafka ,每個流被稱為主題。每個主題都被分割并復(fù)制到多臺名為broker(代理)的計算機(jī)上。當(dāng)producer(生產(chǎn)者)向主題發(fā)送消息時,它提供一個密鑰,用于確定消息應(yīng)發(fā)送到哪個分區(qū)。Kafka代理收到并存儲生產(chǎn)者發(fā)送的消息。然后,Kafka用戶可以通過訂閱主題的所有分區(qū)上的消息來讀取主題。
卡夫卡有一些有趣的屬性:
YARN(另一個資源談判者)是 Hadoop 的下一代群集調(diào)度程序。它允許您在一組機(jī)器中分配一些容器(進(jìn)程),并對它們執(zhí)行任意命令。
當(dāng)應(yīng)用程序與 YARN 進(jìn)行交互時,它看起來像這樣:
Samza 使用 YARN 來管理部署,容錯,日志記錄,資源隔離,安全性和局部性。
YARN 有三個重要的部分:ResourceManager,NodeManager和ApplicationMaster。在YARN網(wǎng)格中,每臺機(jī)器都運行一個NodeManager,它負(fù)責(zé)在該機(jī)器上啟動進(jìn)程。ResourceManager 與所有 NodeManager 通信,告訴他們要運行什么。如果應(yīng)用程序希望在群集上運行某些內(nèi)容,則可以與 ResourceManager 通信。第三部分,ApplicationMaster 實際上是在 YARN 集群中運行的特定于應(yīng)用程序的代碼。它負(fù)責(zé)管理應(yīng)用程序的工作負(fù)載,請求容器(通常為 UNIX 進(jìn)程),以及在其中一個容器發(fā)生故障時處理通知。
Samza 提供了一個YARN ApplicationMaster 和一個 YARN 作業(yè)運行器開箱即用。Samza 和 YARN 的集成在下圖中概述(不同的顏色表示不同的主機(jī)):
當(dāng) Samza 的客戶想要開始一個新的 Samza 工作時,Samza 客戶會與 YARN RM 談話。YARN RM 與 YARN NM 談話,為 Samza 的 ApplicationMaster 在群集上分配空間。一旦 NM 分配空間,它將啟動 Samza AM。在 Samza AM 啟動之后,它向 YARN RM 詢問一個或多個 YARN 容器運行SamzaContainers。再次,RM 與 NM 一起為容器分配空間。一旦分配空間,NM 將啟動 Samza 容器。
Samza 使用 YARN 和 Kafka 為逐級流處理和分區(qū)提供了一個框架。一切,放在一起,看起來像這樣(不同的顏色表示不同的主機(jī)):
Samza 客戶端使用 YARN 運行 Samza 工作:YARN 啟動并監(jiān)督一個或多個SamzaContainers,您的處理代碼(使用StreamTask API)在這些容器內(nèi)運行。Samza StreamTasks 的輸入和輸出來自 Kafka 代理(通常)位于與 YARN NMs 相同的計算機(jī)上。
讓我們來看一個真實的例子:假設(shè)我們要計算頁面瀏覽量。在 SQL 中,你會寫下如下:
SELECT user_id, COUNT(*) FROM PageViewEvent GROUP BY user_id
雖然 Samza 現(xiàn)在不支持 SQL,但這個想法是一樣的。計算此查詢需要兩個作業(yè):一個用戶 ID 分組消息,另一個進(jìn)行計數(shù)。
在第一個作業(yè)中,通過將具有相同用戶 ID 的所有消息發(fā)送到中間主題的相同分區(qū)來完成分組。您可以通過使用用戶 ID 作為第一個作業(yè)發(fā)出的消息的關(guān)鍵字來執(zhí)行此操作,并將此密鑰映射到中間主題的一個分區(qū)(通常通過使用鍵的散列值 mod 分區(qū)數(shù))。第二個工作消耗中間話題。第二個任務(wù)中的每個任務(wù)都占用中間主題的一個分區(qū),即用戶 ID 子集的所有消息。該任務(wù)對其分區(qū)中的每個用戶 ID 具有計數(shù)器,并且每當(dāng)任務(wù)接收到具有特定用戶 ID 的消息時,相應(yīng)的計數(shù)器遞增。
如果您熟悉 Hadoop,您可以將其識別為 Map / Reduce 操作,其中每個記錄與映射器中的特定鍵相關(guān)聯(lián),具有相同鍵的記錄由框架組合在一起,然后在減少步驟中計數(shù)。Hadoop 和 Samza之間的區(qū)別在于 Hadoop 在固定輸入上運行,而 Samza 則使用無限流數(shù)據(jù)。
Kafka 接收第一個作業(yè)發(fā)出的消息并將其緩沖在磁盤上,分布在多臺計算機(jī)上。這有助于使系統(tǒng)容錯:如果一臺計算機(jī)發(fā)生故障,則不會丟失任何消息,因為它們已被復(fù)制到其他計算機(jī)。而且如果第二個工作出現(xiàn)任何原因緩慢或停止使用消息,則第一個工作不受影響:磁盤緩沖區(qū)可以吸收第一個工作中積壓的消息,直到第二個工作重新啟動。
通過分割主題,通過將流處理分解為在多臺計算機(jī)上運行的作業(yè)和并行任務(wù),Samza 可以以非常高的消息吞吐量擴(kuò)展到流。通過使用 YARN 和 Kafka,Samza 可以實現(xiàn)容錯:如果進(jìn)程或計算機(jī)出現(xiàn)故障,則會在另一臺計算機(jī)上自動重新啟動,并從停止點繼續(xù)處理消息。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: