溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Kappa架構原理是什么

發布時間:2021-12-23 16:12:47 來源:億速云 閱讀:234 作者:iii 欄目:軟件技術

本篇內容介紹了“Kappa架構原理是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

Lambda架構回顧Lambda架構的核心思想是把大數據系統拆分成三層:Batch Layer,Speed Layer和Serving Layer。其中,Batch Layer負責數據集存儲以及全量數據集的預查詢。Speed Layer主要負責對增量數據進行計算,生成Realtime Views。Serving Layer用于響應用戶的查詢請求,它將Batch Views和Realtime Views的結果進行合并,得到最后的結果,返回給用戶。圖1給出了Lambda的整體架構圖:

Kappa架構原理是什么

Kappa架構上述提到,為了將批處理和實時處理相結合,Lambda設計了Batch Layer和Speed Layer兩層結構,分別用于批處理和實時計算,因此需要維護兩套分別跑在批處理和實時計算系統之上的代碼。面對這個問題,有人會有這樣的疑問,為什么不用流計算系統來進行全量數據處理從而去除Batch Layer這一層?

可能有這樣回答:流計算給人的印象是對一些流式的、臨時的數據進行計算,將結果保存后就將原始數據丟棄了,因此它不適合用來處理歷史數據。其實這種答案并不完全正確,對于基于Lambda架構實現的Storm框架確實是這樣的,但對于后來出現的Spark并不是。

Storm是在2011年7月開源的,Spark是在2012年之后逐漸為人們所知的,因此在Nathan Marz設計Lambda架構的時候,當時還并沒有一個框架既可以用于離線處理,又可以進行實時計算。但隨著Spark技術的發展,這一想法成為了可能,Spark本身可以用于批處理,而構建在Spark之上的Spark Streaming又可以用于實時計算,因此利用一套系統來應對批處理和實時計算相結合的業務完全是可行的。

Kappa架構的核心思想包括以下三點:

  1. 用Kafka或者類似的分布式隊列系統保存數據,你需要幾天的數據量就保存幾天。

  2. 當需要全量重新計算時,重新起一個流計算實例,從頭開始讀取數據進行處理,并輸出到一個新的結果存儲中。

  3. 當新的實例做完后,停止老的流計算實例,并把老的一些結果刪除。

Kappa的架構圖如圖2所示:

Kappa架構原理是什么

和Lambda架構相比,在Kappa架構下,只有在有必要的時候才會對歷史數據進行重復計算,并且實時計算和批處理過程使用的是同一份代碼?;蛟S有些人會質疑流式處理對于歷史數據的高吞吐量會力不從心,但是這可以通過控制新實例的并發數進行改善。

上面架構圖中,新老實例使用了各自的結果存儲,這便于隨時進行回滾,更進一步,假如我們產出的是一些算法模型之類的數據,用戶還可以同時對新老兩份數據進行效果驗證,做一些A/B test或者使用bandit算法來最大限度的使用這些數據。

優缺點對比

對比項

Lambda架構

Kappa架構

數據處理能力

可以處理超大規模的歷史數據

歷史數據處理的能力有限

機器開銷

批處理和實時計算需一直運行,機器開銷大

必要時進行全量計算,機器開銷相對較小

存儲開銷

只需要保存一份查詢結果,存儲開銷較小

需要存儲新老實例結果,存儲開銷相對較大

開發、測試難易

程度

實現兩套代碼,開發、測試難度較大

只需面對一個框架,開發、測試難度相對較小

運維成本

維護兩套系統,運維成本大

只需維護一個框架,運維成本小

表1 Lambda架構和Kappa架構優缺點對比

如上表所示,Kappa架構相對來說有更多的優點,目前也被更多的廠商用于構建商業項目。

第一,Lambda架構不僅需要維護兩套分別跑在批處理和實時計算系統上面的代碼,還需要批處理和全量計算長時間保持運行;而Kappa架構只有在需要的時候才進行全量計算。

第二,Kappa架構下可以啟動很多個實例進行重復計算,因此在需要對一些算法模型進行調優時,Kappa架構下只需要更改一套系統的參數即可,并且允許對新老數據進行效果比對;但是在Lambda架構下,需要同時更改流計算系統算法模型和批處理系統算法模型,調參過程相對比較復雜。

第三,從用戶開發、測試和運維的角度來看,Kappa架構下,開發人員只需要面對一個框架,開發、測試和運維的難度都會相對較小,這是個非常重要的優點。

如何選擇

從上述的優缺點對比來看,業務需求、開發測試難易程度和運維成本為三個主要的框架選擇考慮因素,而機器開銷和存儲開銷,雖然存在一定差別,但是差別不是很大,所以這里我們也主要從業務需求,開發測試難易程度和運維成本三方面來考慮如何對上述兩個架構做出選擇。

業務需求

用戶需要根據自己的業務需求來選擇架構,如果所需要處理的歷史數據規模較大,比如某省智慧交通系統幾年達TB級的數據,那么選擇Lambda架構可能較為合適;如果處理的數據量較小,比如分析某電商網站近30天的數據,那么選擇Kappa架構可能更為合適。

開發測試難易程度

如果項目中需要頻繁的對算法模型參數進行調優,Kappa架構要來的更為便捷;另外還有一個判定依據就是你設計的算法是否同時適合批處理和實時計算,如果同一份代碼可以很好地處理兩者,那么可以選擇Kappa架構;但是針對某些復雜的案例,其實時計算的結果和批處理的結果是不同的,比如某些機器學習的應用,由批處理生成預測模型,再交由實時計算系統進行實時分析,那么這種情況下,批處理層和實時計算層不能進行合并,因此應該選擇Lambda架構。

運維成本

Kappa架構的運維成本較低,比較適合技術人力資源有限的團隊或企業。

StreamSQL與Lambda架構Transwarp StreamSQL是星環科技專門為企業級用戶打造的流計算引擎,主要應用于實時性較強的應用場景。比如,金融行業需要對市場波動進行實時預警;銀行業務需要在線分析業務等。它對于SQL和PL/SQL的支持使得用戶可以通過SQL的方式實現復雜業務邏輯,大大降低了流應用開發的門檻,也使得基于一套SQL程序開發離線和實時業務成為可能。

圖3為利用Kafka和StreamSQL搭建的一個Kappa架構系統,并且對原有的Kappa架構的缺點做了改進。

Kappa架構原理是什么

StreamSQL每隔100ms會從Kafka消息隊列中接收一批時序數據,如t0-tn時刻的數據,其中t0的數據為(0,1,2,3,4),t1的數據為(5,6,7,8,9)…。當前批次的數據會被映射成一張二維關系表,通過SQL進行變換并轉成內存列式存儲,變換后的數據會實時寫入Holodesk以持久化到SSD上,通過此方式永久保留或者保留最近一個月的數據。應用程序可以通過Inceptor SQL或者R語言對Holodesk中的列式數據進行統計分析。

StreamSQL對Kappa架構的改進之處,包括如下:

上述提到,原本的Kappa架構把歷史數據保存在Kafka或類似的分布式消息隊列,這樣的特性導致了一個缺點就是它只能保存幾天或幾個月的數據,并且只能以流的形式保存,因此對于歷史數據的處理能力有限;而StreamSQL支持輸出到多種格式,既允許輸出到Kafka,也可以將結果以各類格式(TEXT表、ORC表、Holodesk表、HBase表)保存在Inceptor,實現更長期的存儲,因此它可以應對更大數據規模的業務需求。

StreamSQL支持在實時計算時或歷史數據分析時將流數據和Inceptor表的數據做關聯,大大增強了它的歷史數據處理能力。

StreamSQL另一特色功能就是它可以完美兼容SQL標準和PL/SQL,使得用戶可以通過SQL的方式實現業務邏輯,極大降低了流應用開發的門檻。

StreamSQL還增加了Application管理的功能,運行時各個Application之間相互隔離并需要權限驗證,很大程度上提高了系統的安全性和可用性。

Kappa架構案例分析下面我們以StreamSQL作為流處理引擎來搭建一個基于Kappa架構的智慧交通系統,并對其中的套牌車輛實時預警業務場景進行詳細的數據流分析

當前端卡口將監控到的車輛信息接入Kafka分布式消息隊列后,總線會對這些數據進行歸類分揀,分發給不同的服務集群,比如實時入庫服務集群、未年檢車監控服務集群等。

假設部分數據被送入到了違法車輛監控服務集群中,該集群其中一個業務是對車輛進行套牌分析。前面的章節提到Kappa架構方便進行算法模型的調優,下面我們來看一下具體是怎么做的。

首先,假如我們創建了一個UDF函數DectectCloneVehicle(param1, param2),用于檢查待檢測牌照是否為套牌車輛。該UDF接收兩個輸入參數:當兩輛相同牌照的車直線距離超過param1公里且出現時間低于param2分鐘時,則被視為套牌車。該函數有兩種返回結果:如果是套牌車則輸出1,否則輸出0。

假設我們起初設定的套牌分析策略是,如果某兩輛相同牌照的車直線距離超過20公里,出現時間小于2分鐘, 那么判定該車牌被套牌。啟動一個Stream Job實例,并按照該策略進行分析的StreamSQL語句如下:

CREATE STREAM vehicle_stream1(license STRING, location STRING, time TIMESTAMP)  ROW FORMAT DELIMITED FIELDS TERMINATED BY ','  TBLPROPERTIES ("topic"=fakeLicense", kafka.zookeeper"="172.16.1.128:2181",  "timefield"="time", "timeformat"="yyyy-MM-dd HH-mm-ss.SSS);  CREATE TABLE clone_vehicle_result_app1(license STRING,location STRING, time TIMESTAMP);  INSERT INTO clone_vehicle_result_app1  SELECT DetectCloneVehicle(20, 2) as cloned  FROM vehicle_stream1  HAVING cloned>0;

但是通過實踐并且考慮到一些現實情況(如直線距離是否合理,當前路段高速類路段多還是低速路段多等),我們發現如果按照此參數執行檢測,套牌排查效率會很低。假如把套牌車輛的判定標準調整為:直線距離超過10公里,出現時間小于5分鐘的兩輛相同牌照的車,效率就會有極大幅度的提升?,F在重新啟動一個Stream Job實例,執行如下的StreamSQL語句:

  1. CREATE STREAM vehicle_stream2(license STRING, location STRING, time TIMESTAMP) 

  2.  

  3. ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 

  4.  

  5. TBLPROPERTIES ("topic"=fakeLicense", kafka.zookeeper"="172.16.1.128:2181", 

  6.  

  7. "timefield"="time", "timeformat"="yyyy-MM-dd HH-mm-ss.SSS); 

  8.  

  9. CREATE TABLE clone_vehicle_result_app2(license STRING,location STRING, time TIMESTAMP); 

  10.  

  11. INSERT INTO clone_vehicle_result_app2 

  12.  

  13. SELECT DetectCloneVehicle(10, 5) as cloned 

  14.  

  15. FROM vehicle_stream2 

  16.  

  17. HAVING cloned>;

該Stream Job的效率高于之前所選用的參數,這樣我們就進行了一步UDF模型參數的調優。所以在做實際分析時,業務執行效率的提升不能單純的依靠系統提供的優化幫助,用戶需要能夠根據所采用的架構和所處理的問題、應用的模型方法,結合實際外部限制選擇最有效的模型參數。

“Kappa架構原理是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女