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