在結構化流引入低延遲連續處理模式在Apache 2.3火花
結構化流在Apache 2.0火花解耦micro-batch處理的高級api是有原因的。首先,它使開發人員的經驗與api簡單:api不需要占micro-batches。第二,它允許開發者將流視為無限表,他們可以發出查詢一個靜態表。
利用這一點,我們引入一個新的工作毫秒低延遲流媒體方式稱為連續模式在Apache 2.3火花,現在可以在磚4.0運行時磚的一部分統一的分析平台Beplay体育安卓版本。
在這個博客中,我們將說明如何使用連續處理模式,其優點,開發人員可以用它來編寫連續流具有毫秒低延遲需求的應用程序。讓我們先從一個激勵方案。
低延遲的情況
假設我們想要構建一個實時管道標誌信用卡詐騙案件。理想情況下,我們想盡快確定並否認欺詐交易罪魁禍首已經取代了他/她的信用卡。然而,我們不想推遲合法的交易,因為這將激怒顧客。beplay体育app下载地址這導致一個嚴格的上限處理端到端延遲我們的管道。考慮到還有其他在運輸過程中延誤,管道必須處理每筆交易在10 - 20毫秒。
讓我們試著建立這個管道結構化流。假設我們有一個用戶定義函數“isPaymentFlagged”,可以識別欺詐性交易。最小化的延遲,我們將使用一個0第二處理時間觸發表明火花應該開始每個微批量盡可能快的,沒有延遲。在高級別上,查詢是這樣的。
支付\。過濾器(“isPaymentFlagged (paymentId)”) \.writeStream \{…}。觸發(processingTime=“0秒”)\。開始()
你可以看到完整的代碼下載和進口例如筆記本電腦你的磚工作區(Community Edition使用磚)。讓我們看看端到端延時。
記錄正在超過100 ms流過火花!雖然這對於許多流管道,這對這個用例是不夠的。我們的新連續處理模式能幫助我們嗎?
支付\。過濾器(“isPaymentFlagged (paymentId)”) \.writeStream \{…}。觸發(連續=“5秒”)\。開始
現在我們越來越少1毫秒延遲—提高兩個數量級以上,遠低於我們的目標延遲!要理解為什麼這個延遲很高micro-batch處理,連續處理如何幫助,我們必須深入的細節結構流引擎。
Micro-Batch處理
結構化流在默認情況下使用micro-batch執行模型。這意味著火花流引擎定期檢查流源,並運行一個批處理新數據上的查詢,已經到達最後一批結束後。在一個高級,它看起來像這樣。
在此體係結構中,司機檢查站write-ahead-log進步通過保存記錄偏移量,這可能是用於啟動查詢。注意,補償範圍要處理在未來micro-batch保存到日誌中之前micro-batch開始為了得到確定性re-executions和端到端語義。因此,記錄可在源代碼可能必須等待當前micro-batch抵消前完成記錄和未來micro-batch流程。在記錄級別,時間是這樣的。
這導致在最好的情況下,100年代的延遲毫秒之間的時間可以在事件源和輸出寫入到水槽。
我們最初建立結構化流與這micro-batch引擎可以輕鬆地利用現有的批處理引擎火花SQL已經優化了性能(參見我們的過去的博客代碼生成和項目鎢)。這允許我們實現的目標高吞吐量與延遲低至100 ms。在過去的幾年裏,與成千上萬的開發者和數百種不同的用例,我們發現第二音階延遲是足夠的對於大多數實際流ETL和實時監控等工作。然而,一些工作負載(如前麵提到的欺詐檢測用例)受益於更低的延遲和激勵我們構建連續處理模式。讓我們理解這是如何工作的。
連續處理
在連續處理模式,而不是推出周期任務,火花發射一組連續閱讀的長時間運行的任務,過程和寫入數據。在高級別上,這樣的設置和記錄級時間表看起來(與上麵的圖進行對比micro-batch執行)。
由於事件處理和寫入水槽就可用的來源,端到端延時幾毫秒。
此外,查詢進展被改編自著名的檢查點Chandy-Lamport算法。特殊標記記錄注入每個任務的輸入數據流;我們稱之為“時代標記”以及它們之間的差距”時代。“當遇到一個標記,一個任務,異步任務報告最後抵消處理司機。一旦司機收到書麵的所有任務的補償下沉,上述write-ahead-log寫他們。自從檢查點是完全異步的,任務可以繼續不間斷millisecond-level延遲並提供一致的。
實驗在Apache火花tripwire發布
Apache火花tripwire,連續處理模式是一個實驗性的特性和結構的一個子集流源和DataFrame /數據/ SQL操作支持這種模式。具體來說,您可以設置可選連續觸發查詢,滿足下列條件:
- 讀卡夫卡和支持來源寫支持水槽就像卡夫卡,記憶,控製台(內存和控製台是好調試)。
- (即隻有類似操作。,selections and projections like select, where, map, flatMap, filter,)
- 聚合函數以外的任何SQL函數,current-time-based功能
current_timestamp ()
和當前日期()
。
有關更多信息,請參考以下:
封閉的思想
使用Apache火花2.3的發布,開發人員可以選擇使用流mode-continuous或micro-batching-depending延遲需求。雖然默認的結構流模式(micro-batching)為大多數實時流媒體應用程序提供可接受的延遲,為你millisecond-scale延遲要求,您現在可以選擇連續模式。
導入該連續處理模式的筆記本在磚看到它自己。