Lambda 架構:
Lambda 架構總共由三層系統(tǒng)組成的:批處理層(Batch Layer)京闰,速度處理層(Speed Layer)经伙,以及用于響應查詢的服務層(Serving Layer)匾嘱。
批處理層:
使用可處理大量數(shù)據(jù)的分布式處理系統(tǒng)預先計算結果钳降。它通過處理所有的已有歷史數(shù)據(jù)來實現(xiàn)數(shù)據(jù)的準確性陷虎。這意味著它是基于完整的數(shù)據(jù)集來重新計算的菩掏,能夠修復任何錯誤魂角,然后更新現(xiàn)有的數(shù)據(jù)視圖。輸出通常存儲在只讀數(shù)據(jù)庫中智绸,更新則完全取代現(xiàn)有的預先計算好的視圖野揪。
速度層:
通過提供最新數(shù)據(jù)的實時視圖來最小化延遲。速度層所生成的數(shù)據(jù)視圖可能不如批處理層最終生成的視圖那樣準確或完整瞧栗,但它們幾乎在收到數(shù)據(jù)后立即可用斯稳。而當同樣的數(shù)據(jù)在批處理層處理完成后,在速度層的數(shù)據(jù)就可以被替代掉了迹恐。
總結:
批處理層保證數(shù)據(jù)的完整性和準確性挣惰,速度層保證數(shù)據(jù)的時效性,但是缺點是需要維護兩套邏輯代碼殴边,維護較復雜憎茂,有沒有可能在批處理中實現(xiàn)實時計算,或者在實時處理中實現(xiàn)批處理計算呢锤岸?于是就有了下面的kappa架構竖幔。
Kappa架構:
與 Lambda 架構不同的是,Kappa 架構去掉了批處理層這一體系結構能耻,而只保留了速度層赏枚。你只需要在業(yè)務邏輯改變又或者是代碼更改的時候進行數(shù)據(jù)的重新處理亡驰。
借用kafka的架構來說明kappa架構:
kafka可以通過設置來決定數(shù)據(jù)的保留時長,七天饿幅、一個月凡辱、或者永久保留,且kafka是通過offset來決定從哪里讀取數(shù)據(jù)栗恩,因此當我們的業(yè)務邏輯改變時透乾,需要從新讀取所有歷史數(shù)據(jù)時,只需要把offset設置為0即可磕秤。
總結:
1乳乌、如果你所面對的業(yè)務邏輯是設計一種穩(wěn)健的機器學習模型來預測即將發(fā)生的事情,那么你應該優(yōu)先考慮使用 Lambda 架構市咆,因為它擁有批處理層和速度層來確保更少的錯誤汉操。
2、如果你所面對的業(yè)務邏輯是希望實時性比較高蒙兰,而且客戶端又是根據(jù)運行時發(fā)生的實時事件來做出回應的磷瘤,那么你就應該優(yōu)先考慮使用 Kappa 架構。