Samza框架-----學習筆記

基本概念:

作業:是對一組輸入流進行處理轉化成輸出流的程序。

分區:

Samza的流數據單位既不是Storm中的元組,也不是Spark Streaming中的DStream,而是一條條消息;

Samza中的每個流都被分割成一個或多個分區,對於流裏的每一個分區而言,都是一個有序的消息序列,後續到達的消息會根據一定規則被追加到其中一個分區裏;


任務:

一個作業會被進一步分割成多個任務(Task)來執行,其中,每個任務負責處理作業中的一個分區

分區之間沒有定義順序,從而允許每一個任務獨立執行

YARN調度器負責把任務分發給各個機器,最終,一個工作中的多個任務會被分發到多個機器進行分佈式並行處理


數據流圖:

一個數據流圖是由多個作業構成的,其中,圖中的每個節點表示包含數據的流,每條邊表示數據傳輸
多個作業串聯起來就完成了流式的數據處理流程

由於採用了異步的消息訂閱分發機制,不同任務之間可以獨立運行


Samza系統架構主要包括:



處理分析過程:

1.Samza客戶端需要執行一個Samza作業時,它會向YARN的ResouceManager提交作業請求
2.ResouceManager通過與NodeManager溝通爲該作業分配容器(包含了CPU、內存等資源)來運行Samza ApplicationMaster
3.Samza ApplicationMaster進一步向ResourceManager申請運行任務的容器
4.獲得容器後,Samza ApplicationMaster與容器所在的NodeManager溝通,啓動該容器,並在其中運行Samza Task Runner

5.Samza Task Runner負責執行具體的Samza任務,完成流數據處理分析;


Storm、Spark Streaming和Samza的應用場景:

從編程的靈活性來講,Storm是比較理想的選擇,它使用Apache Thrift,可以用任何編程語言來編寫拓撲結構(Topology)
當需要在一個集羣中把流計算和圖計算、機器學習、SQL查詢分析等進行結合時,可以選擇Spark Streaming,因爲,在Spark上可以統一部署Spark SQL,Spark Streaming、MLlib,GraphX等組件,提供便捷的一體化編程模型
當有大量的狀態需要處理時,比如每個分區都有數十億個元組,則可以選擇Samza。當應用場景需要毫秒級響應時,可以選擇Storm和Samza,因爲Spark Streaming無法實現毫秒級的流計算;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章