Samza概念

2018-08-23 09:32 更新

本頁(yè)介紹了 Samza 的高級(jí)概念。

 Samza 處理流。流由相似類型或類別的不可變消息組成。例如,流可以是網(wǎng)站上的所有點(diǎn)擊,或特定數(shù)據(jù)庫(kù)表的所有更新,或服務(wù)生成的所有日志,或任何其他類型的事件數(shù)據(jù)。消息可以附加到流或從流中讀取。流可以具有任何數(shù)量的消費(fèi)者,并且從流讀取不會(huì)刪除消息(因此每個(gè)消息被有效地廣播給所有消費(fèi)者)。消息可以可選地具有用于分區(qū)的關(guān)聯(lián)密鑰,我們將在一秒鐘內(nèi)討論。

Samza 支持實(shí)現(xiàn)流抽象的可插拔系統(tǒng):在 Kafka 中,一個(gè)流是一個(gè)主題,在數(shù)據(jù)庫(kù)中,我們可以通過在 Hadoop 中消耗更新來讀取流,我們可能會(huì)拖放 HDFS 中的文件目錄。

job

工作

Samza 作業(yè)是對(duì)一組輸入流執(zhí)行邏輯變換以將輸出消息附加到輸出流集合的代碼。

如果可擴(kuò)展性不是一個(gè)問題,流和工作就是我們所需要的。然而,為了縮小流處理器的吞吐量,我們將流和作業(yè)分解成更小的并行單元:分區(qū)和任務(wù)。

分區(qū)

每個(gè)流被分解成一個(gè)或多個(gè)分區(qū)。流中的每個(gè)分區(qū)是完全有序的消息序列。

該序列中的每個(gè)消息都有一個(gè)稱為偏移量的標(biāo)識(shí)符,每個(gè)分區(qū)是唯一的。取決于底層的系統(tǒng)實(shí)現(xiàn),偏移量可以是順序整數(shù),字節(jié)偏移量或字符串。

當(dāng)一條消息附加到流中時(shí),它只會(huì)附加到流的一個(gè)分區(qū)。消息分配到其分區(qū)是由寫入器選擇的一個(gè)關(guān)鍵字來完成的。例如,如果使用用戶ID作為密鑰,則可確保與特定用戶相關(guān)的所有消息都在同一分區(qū)中。

stream

任務(wù)

通過將作業(yè)分解成多個(gè)任務(wù)來縮放作業(yè)。該任務(wù)是任務(wù)并行的單位,就像分區(qū)到流。每個(gè)任務(wù)從每個(gè)作業(yè)的輸入流的一個(gè)分區(qū)中消耗數(shù)據(jù)。

一個(gè)任務(wù)按照消息偏移的順序來順序處理每個(gè)輸入分區(qū)的消息。分區(qū)之間沒有定義的排序。這允許每個(gè)任務(wù)獨(dú)立運(yùn)行。YARN 調(diào)度程序?qū)⒚總€(gè)任務(wù)分配給一臺(tái)機(jī)器,因此整個(gè)作業(yè)可以分布在許多機(jī)器上。

作業(yè)中的任務(wù)數(shù)量由輸入分區(qū)的數(shù)量決定(不能比輸入分區(qū)更多的任務(wù),或沒有輸入的任務(wù))。但是,您可以更改分配給作業(yè)的計(jì)算資源(內(nèi)存量,CPU內(nèi)核數(shù)量等)以滿足作業(yè)的需要。請(qǐng)參見下面的容器說明。

分區(qū)到任務(wù)的分配永遠(yuǎn)不會(huì)改變:如果任務(wù)在失敗的計(jì)算機(jī)上,則任務(wù)在別處重新啟動(dòng),仍然占用相同的流分區(qū)。

dag

數(shù)據(jù)流圖

我們可以組合多個(gè)作業(yè)來創(chuàng)建數(shù)據(jù)流圖,其中邊是包含數(shù)據(jù)的流,并且節(jié)點(diǎn)是執(zhí)行轉(zhuǎn)換的作業(yè)。這個(gè)組合完全是通過作業(yè)作為輸入和輸出的流完成的。作業(yè)完全解耦:它們不需要在相同的代碼庫(kù)中實(shí)現(xiàn),并且添加,刪除或重新啟動(dòng)下游作業(yè)不會(huì)影響上游作業(yè)。

這些圖表通常是非循環(huán)的,也就是說,數(shù)據(jù)通常不會(huì)通過其他作業(yè)流向自己。但是,如果需要,可以創(chuàng)建循環(huán)圖。


集裝箱

分區(qū)和任務(wù)都是并行性的邏輯單元,它們不對(duì)應(yīng)于計(jì)算資源(CPU,內(nèi)存,磁盤空間等)的任何特定分配。容器是物理并行的單元,容器本質(zhì)上是 Unix 進(jìn)程(或 Linux cgroup)。每個(gè)容器運(yùn)行一個(gè)或多個(gè)任務(wù)。任務(wù)數(shù)量根據(jù)輸入中的分區(qū)數(shù)量自動(dòng)確定,并被固定,但容器數(shù)量(以及與它們相關(guān)聯(lián)的 CPU 和內(nèi)存資源)數(shù)量由用戶在運(yùn)行時(shí)指定,并且可以隨時(shí)更改。

結(jié)構(gòu) ?

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)