W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
人們通常想知道類似的系統(tǒng)如何比較。我們已盡全力將 Samza 的功能集與其他系統(tǒng)進(jìn)行對(duì)比。但是我們不是這些框架的專家,當(dāng)然我們也是完全有偏見的。如果我們有任何東西,請(qǐng)讓我們知道,我們會(huì)糾正。
MUPD8 沒有耐久性或交貨保證。在 MUPD8 中,流處理器任務(wù)最多只能接收一次消息。Samza 使用 Kafka 進(jìn)行消息傳遞,保證消息傳送。
與耐用性一樣,開發(fā)人員理想地喜歡他們的流處理器按照他們寫的順序接收消息。
基于對(duì) MUPD8 對(duì)其排序保證的描述的理解,它保證所有消息將按照寫入 MUPD8 隊(duì)列的順序進(jìn)行處理,這與 Kafka 和 Samza 的保證相當(dāng)。
處理大數(shù)據(jù)流的一個(gè)關(guān)鍵問題是在一個(gè)下游處理階段變慢時(shí)處理背壓。
當(dāng)在兩個(gè) MUPD8 任務(wù)之間傳遞消息時(shí),MUPD8 會(huì)緩沖內(nèi)存中隊(duì)列中的消息。當(dāng)隊(duì)列填滿時(shí),開發(fā)人員可以選擇將消息放在地板上,將消息記錄到本地磁盤或阻塞,直到隊(duì)列釋放。所有這些選項(xiàng)都是次優(yōu)的。刪除郵件會(huì)導(dǎo)致錯(cuò)誤的結(jié)果。阻塞流處理器可能具有級(jí)聯(lián)效應(yīng),其中最慢的處理器阻止所有上游處理器,而后者又阻止其上游處理器,直到整個(gè)系統(tǒng)停止。登錄到本地磁盤是最合理的,但是當(dāng)發(fā)生故障時(shí),這些消息在故障切換時(shí)丟失。
通過采用 Kafka 的經(jīng)紀(jì)人作為遠(yuǎn)程緩沖區(qū),Samza 解決了所有這些問題。它不需要阻止,因?yàn)橄M(fèi)者和生產(chǎn)者使用卡夫卡經(jīng)紀(jì)人的磁盤作為緩沖區(qū)進(jìn)行解耦。消息不會(huì)被丟棄,因?yàn)?Kafka 經(jīng)紀(jì)人從0.8版本開始高度可用。如果發(fā)生故障,當(dāng) Samza 作業(yè)在另一臺(tái)計(jì)算機(jī)上重新啟動(dòng)時(shí),其輸入和輸出不會(huì)丟失,因?yàn)樗鼈冞h(yuǎn)程存儲(chǔ)在復(fù)制的 Kafka 代理上。
如引言所述,流處理器在處理消息時(shí)通常需要保持一些狀態(tài)。不同的框架具有不同的處理這種狀態(tài)的方法,以及在出現(xiàn)故障時(shí)該怎么辦。
MUPD8 使用寫回緩存策略來管理定期寫回 Cassandra 的內(nèi)存狀態(tài)。
Samza 在任務(wù)中維持當(dāng)?shù)氐臓顟B(tài)。這允許狀態(tài)大于適合內(nèi)存的狀態(tài)。狀態(tài)被持久化到輸出流,以便在任務(wù)失敗時(shí)啟用恢復(fù)。我們認(rèn)為這種設(shè)計(jì)能夠?qū)崿F(xiàn)更強(qiáng)的容錯(cuò)語義,因?yàn)樽兏罩緯?huì)捕獲狀態(tài)的演變,從而使任務(wù)的狀態(tài)恢復(fù)到一致的時(shí)間點(diǎn)。
MUPD8 包括一個(gè)自定義執(zhí)行框架。該框架在用戶和資源限制方面支持的功能對(duì)我們來說并不清楚。
Samza 利用 YARN 部署用戶代碼,并在分布式環(huán)境中執(zhí)行。
流處理系統(tǒng)在機(jī)器或處理器出現(xiàn)故障時(shí)應(yīng)該做什么?
MUPD8 使用其相當(dāng)于 YARN 的定制來管理容錯(cuò)。當(dāng)流處理器無法向下游處理器發(fā)送消息時(shí),它會(huì)通知 MUPD8 的協(xié)調(diào)器,并通知所有其他計(jì)算機(jī)。然后機(jī)器將根據(jù)所使用的密鑰哈希發(fā)送所有的消息到新的機(jī)器。發(fā)生這種情況時(shí),消息和狀態(tài)可能會(huì)丟失。
Samza 使用 YARN 來管理容錯(cuò)。YARN 檢測節(jié)點(diǎn)或 Samza 任務(wù)何時(shí)失敗,并通知 Samza 的ApplicationMaster。在這一點(diǎn)上,由 Samza 決定要做什么。通常,這意味著在另一臺(tái)機(jī)器上重新啟動(dòng)任務(wù)。由于消息能夠遠(yuǎn)程存儲(chǔ)到卡夫卡經(jīng)紀(jì)人,并且沒有內(nèi)存中的隊(duì)列,所以不應(yīng)丟失消息(除非處理器使用異步卡夫卡生產(chǎn)者,提供更高的性能,但不要等待消息被提交)。
有時(shí)候需要多個(gè)工作或處理階段來完成某些工作。例如,您希望重新分區(qū)流的情況。MUPD8 有一個(gè)自定義的工作流程系統(tǒng)設(shè)置,用于定義如何一次執(zhí)行多個(gè)作業(yè),以及如何將流數(shù)據(jù)從一個(gè)進(jìn)程導(dǎo)入另一個(gè)。
Samza 使單個(gè)作業(yè)的執(zhí)行細(xì)分級(jí)別。作業(yè)通過命名輸入和輸出流進(jìn)行通信。這隱式定義了所有正在運(yùn)行的作業(yè)之間的數(shù)據(jù)流圖。我們選擇了這個(gè)模型,使不同工作人員擁有不同工程師的處理階段的數(shù)據(jù)流圖可以在不同的代碼庫中工作,而無需將所有內(nèi)容都集成到一個(gè)拓?fù)渲小?/p>
這是由于我們在 Hadoop 中的經(jīng)驗(yàn),其中作業(yè)之間的數(shù)據(jù)流由其輸入和輸出目錄隱含地定義。這種分散的模式已被證明可以很好地?cái)U(kuò)展到一個(gè)大型組織。
MUPD8 使用線程在單個(gè) JVM 內(nèi)執(zhí)行其所有映射/更新處理器。這是內(nèi)存高效的,因?yàn)?JVM 內(nèi)存開銷是跨線程共享的。
Samza 為每個(gè)流處理器容器使用單獨(dú)的 JVM 。與在單個(gè) JVM 中運(yùn)行多個(gè)流處理線程相比,這具有使用更多內(nèi)存的缺點(diǎn)。然而,優(yōu)點(diǎn)是改進(jìn)了任務(wù)之間的隔離,這可以使它們更可靠。
MUPD8 在流處理器之間不提供資源隔離。單個(gè)不良行為的流處理器可以降低節(jié)點(diǎn)上的所有處理器。
Samza 在流處理器任務(wù)之間使用流程級(jí)隔離,類似于 Hadoop 的方法。我們可以強(qiáng)制執(zhí)行嚴(yán)格的每進(jìn)程內(nèi)存限制。此外,Samza 在與 YARN cgroup 一起使用時(shí)支持 CPU 限制。隨著 YARN 對(duì) cgroup 的支持進(jìn)一步發(fā)展,還應(yīng)該可以支持磁盤和網(wǎng)絡(luò) cgroup 限制。
MUPD8 團(tuán)隊(duì)發(fā)表了一篇關(guān)于他們系統(tǒng)設(shè)計(jì)的非常好的論文。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: