跳轉到主要內容
工程的博客

延遲在Apache火花結構化流次秒級

改善抵消項目光速的管理
分享這篇文章

Apache火花結構化流是領先的開源流處理平台。Beplay体育安卓版本這也是權力的核心技術流媒體在磚Lakehouse的平台上Beplay体育安卓版本並提供一個統一的API,用於批處理和流處理。采用流媒體正在迅速增長,不同應用程序想利用實時決策。其中的一些應用程序,特別是那些操作本質上,要求更低的延遲。而引發的設計使高吞吐量和易用性以更低的成本,還沒有優化的次秒級延遲。

在這個博客,我們將專注於改善我們周圍抵消管理降低固有的處理延遲的結構化流。這些改進主要目標操作用例實時監測和報警等簡單的和無狀態的。

廣泛的評估這些增強表明已經提高了68 - 75%的延遲或盡可能多3 x- - - - - -從700 - 900 ms 150 - 250 ms的吞吐量100 k /秒的事件,500 k /秒的事件1米/秒的事件。結構化流現在可以實現延遲低於250毫秒,滿足SLA要求大部分的操作工作負載。

本文假設讀者有一個基本的了解火花結構化流。請參考以下文檔了解更多:

//www.eheci.com/spark/getting-started-with-apache-spark/streaming
https://docs.www.eheci.com/structured-streaming/index.html
//www.eheci.com/glossary/what-is-structured-streaming
https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html

動機

Apache火花結構化流是一個分布式流處理引擎之上的SQL引擎Apache火花。它提供了一個API,允許開發人員編寫流查詢處理數據流的一樣批量查詢,使其更容易思考和測試流媒體的應用程序。根據Maven下載、結構化流是使用最廣泛的開源分布式流媒體今天引擎。它的受歡迎程度的一個主要原因是性能,高吞吐量以較低的成本下的端到端延時幾秒鍾。結構化流允許用戶靈活地平衡吞吐量之間的權衡,成本和延遲。

采用流媒體發展迅速的企業,有欲望,使多樣化的應用程序使用流媒體數據架構。與許多客戶我們的談話,我們遇到用例需要一致的次秒級的延遲。beplay体育app下载地址這樣的低延遲等應用程序的用例出現操作報警和實時監控,a.k.“運行工作負載”。In order to accommodate these workloads into Structured Streaming, in 2022 we launched a performance improvement initiative under項目光速。這個項目確定潛在和技術領域,可以用來改善處理延遲。在這個博客中,我們詳細概述改善這樣一個領域——抵消管理進度跟蹤以及它如何達到次秒級延遲操作工作負載。

運行工作負載是什麼?

流工作負載可以大致分為分析工作負載和運行工作負載。圖1說明了分析和運行工作負載。分析工作負載通常攝取、轉換過程和實時分析數據,結果寫入三角洲湖由像AWS S3對象存儲,Azure Gen2湖和穀歌雲存儲的數據。這些結果被下遊數據倉庫引擎和可視化工具。

分析工作負載
分析工作負載
運行工作負載
運行工作負載

圖1所示。分析和操作的工作負載

一些分析工作負載的例子包括:

  • 客戶行為分析:一個營銷公司可以使用流媒體實時分析來分析客戶行為。通過處理點擊流數據、社交媒體源和其他來源的信息,係統可以檢測模式和偏好,可以更有效地用於目標客戶。beplay体育app下载地址
  • 情緒分析:一個公司可以使用流數據從社交媒體賬戶實時分析客戶情緒。例如,該公司可能會尋找客戶表達積極或消極情緒對公司的產品或服務。beplay体育app下载地址
  • 物聯網的分析:一個智能城市可以使用流媒體監控交通流分析,實時空氣質量,和其他指標。通過處理來自傳感器的數據嵌入在整個城市,該係統可以檢測趨勢和決定交通模式或環境政策。

另一方麵,操作工作量,實時接收和處理數據,並自動觸發業務流程。這樣的工作的一些例子包括:

  • 網絡安全:一個公司可能利用其網絡流數據來監控安全或性能問題。例如,該公司可能會尋找流量劇增,或未經授權的訪問網絡和發送警報到安全部門。
  • 個人身份信息泄漏:一個公司可能監控microservice日誌、解析和檢測(PII)的任何可識別個人的信息被泄露的,如果是,通過電子郵件通知microservice的所有者。
  • 電梯調度:一個公司可能使用電梯的流數據來檢測當電梯報警按鈕被激活。如果激活,可能查找額外的電梯信息提高數據和發送一個通知安全人員。
  • 主動維護:使用發電機的流數據監控溫度和超過一定的閾值時通知主管。

操作流管道具有以下特點:

  • 延遲的預期通常是次秒級
  • 管道讀取消息總線
  • 管道通常做簡單的計算與數據轉換或數據濃縮
  • 管道寫入消息總線像Apache卡夫卡或Apache脈衝星或快速鍵值存儲諸如Apache Cassandra或複述,下遊集成業務流程

對這些用例,異形結構流時,我們發現,抵消管理的進步跟蹤micro-batches消耗了大量的時間。在下一節中,讓我們回顧現有的抵消管理和輪廓在後續部分中我們如何改進。

什麼是抵消管理?

來的進步跟蹤點的數據處理,火花結構化流依賴持續進步和管理補償作為指標。通常,一個偏移量被源連接器具體定義為不同的係統有不同的方式來表示進步或位置數據。例如,補償的具體實現可以在文件中顯示的行號多少文件中的數據處理。持久的日誌(如圖2)用於存儲這些抵消和馬克micro-batches完成。

圖2:抵消日誌
圖2:抵消日誌

在結構化流,數據處理micro-batches的單位。有兩個抵消每個micro-batch管理操作完成。一開始每個micro-batch和最後一個。

  • 開始時每micro-batch(實際上任何數據處理開始之前),一個偏移量的計算方法是基於新的數據可以從目標係統讀取。這種偏移是持久化到一個持久的日誌被稱為“offsetLog“在檢查站目錄中。這個偏移量是用於計算的數據範圍將在“這”micro-batch處理。
  • 每個micro-batch,年底一個條目堅持持久的日誌被稱作“commitLog“表明”這種“micro-batch已成功處理。

下麵的圖3描述了當前抵消發生的管理操作。

圖3。抵消結構化流的管理
圖3。抵消結構化流的管理

另一個抵消管理每個micro-batch結束時執行操作。這個操作是一個清理操作刪除舊/截斷和不必要的條目offsetLog和commitLog這些日誌不生長在一個無界的時尚。

圖4。日誌清除
圖4。日誌清除

這些抵消管理操作上執行關鍵路徑和內聯與實際數據的處理。這意味著這些操作直接影響加工的時間延遲和數據處理不能發生,直到完成這些操作。這直接影響集群利用率。

通過我們的基準測試和性能分析的努力,我們已經識別出這些抵消管理操作可以占據了多數的處理時間特別為無狀態的單一國家管道中常用的操作報警和實時監控的用例。

在結構化流性能改進

異步跟蹤進展

這個功能是為了解決持續的延遲開銷抵消進展跟蹤目的。這個功能啟用時,將允許結構化流管道檢查點的進步,即更新offsetLog commitLog,異步並行和實際micro-batch中的數據處理。換句話說,實際的數據處理將不會被這些抵消管理操作,將極大地提高應用程序的延遲。下麵的圖5描述了這個新的行為抵消管理。

圖5。異步跟蹤進展
圖5。異步跟蹤進展

與異步執行更新,用戶可以配置的頻率進步是檢查點。這將有利於場景抵消管理操作發生在更高的速度比他們可以處理。這種情況發生在管道實際處理數據的時間相比大大減少這些抵消管理操作。在這樣的場景中,越來越積壓抵消管理操作將發生。遏製這一日益嚴重的積壓,數據處理將會阻止或減慢這將基本上恢複處理行為成為同一如果這些抵消管理操作執行內嵌的數據處理。用戶通常不需要配置或設置檢查點頻率作為一個適當的默認值將被設置。重要的是要注意,故障恢複時間會隨著檢查點間隔時間的增加而增加。在失敗的情況下,管道必須再加工前成功的檢查點之前的所有數據。用戶可以認為這之間的權衡更低的延遲在正常處理和恢複時間的失敗。

以下配置啟用和配置這個特性介紹:

  • asyncProgressTrackingEnabled-啟用或禁用異步跟蹤進展
    • 默認值:假
  • asyncProgressCheckpointingInterval——我們承諾的時間間隔偏移和完成提交
    • 默認值:1分鍾

下麵的代碼示例演示了如何啟用這個特性:

val流= spark.readStream格式(“卡夫卡”).option (“kafka.bootstrap.servers”,“host1:端口1,host2:端口2”).option (“訂閱”,“在”).load ()
              val查詢= stream.writeStream格式(“卡夫卡”).option (“主題”,“出去”).option (“checkpointLocation”,“/ tmp /檢查站”).option (“asyncProgressTrackingEnabled”,“真正的”).start ()

請注意,此功能將不會處理Trigger.onceTrigger.availableNow隨著這些觸發器執行管道在手動/預定的時尚。因此,異步進展跟蹤不相關。提交查詢將失敗,如果使用任何上述觸發器。

適用性和局限性

有一些限製在當前版本(s),可能會改變我們發展特點:

  • 目前,僅支持在無狀態的管道使用異步進展跟蹤卡夫卡下沉。
  • 完全一旦端到端的處理將不支持異步跟蹤進展因為抵消範圍為一批可以在失敗的情況下改變。然而,許多下沉,如卡夫卡下沉,隻支持保證至少一次,所以這可能不是一個新的限製。

異步清除日誌

這個功能是為了解決延遲開銷的日誌清理完成micro-batch內。通過這個日誌清理/在後台異步和執行清除操作,我們可以刪除此操作將導致延遲開銷在實際數據處理。此外,這些清洗不需要完成每個micro-batch和可以發生在一個更寬鬆的時間表。

注意,這個特性/改善沒有任何限製什麼類型的管道或工作負載可以使用這個,因此這個功能在後台將啟用默認為所有結構化流管道。

基準

為了理解異步性能的進展跟蹤和異步日誌清除,我們創建了一個基準。我們的目標與基準是理解的差異性能改善抵消管理提供一個端到端的流管道。基準分為兩類:

  • 源統計下沉率——在這個基準測試中,我們使用一個基本的、無狀態的,stats-collecting源和彙的是有用的在確定核心引擎性能的差異,沒有任何外部依賴。
  • 卡夫卡源卡夫卡下沉——對於這個基準測試,我們從卡夫卡來源移動數據到卡夫卡下沉。這是類似於一個真實的場景,看看區別將在生產場景。

對於這兩個基準,我們測量了端到端延遲(50百分位,第99個百分位)在不同的數據輸入率(100 k /秒的事件,500 k /秒的事件,事件1米/秒)。

基準的方法

主要的方法是生成數據從源在特定常數的吞吐量。生成的記錄包含在信息記錄。在水槽方麵,我們使用Apache DataSketches圖書館收集的時間之間的差異下沉過程中創建的記錄和時間,這是每一批。這是用來計算延遲。我們使用了相同的集群與相同數量的節點對所有實驗。

注意:卡夫卡的基準,我們拋開某些節點的集群運行卡夫卡和生成數據喂養卡夫卡。我們計算延遲後的記錄隻記錄已成功發布到卡夫卡(下沉)

率統計水槽基準源

在該基準測試中,我們使用7工人的火花集群節點(i3.2xlarge - 4核,61鑲條內存)使用磚運行時(11.3)。我們測量以下場景的端到端延時量化每個進步的貢獻。

  • 當前結構化流——這是基線延遲沒有任何上述的改進
  • 異步日誌清除這個措施後延遲應用異步清除日誌
  • 異步的進步——這措施應用後延遲異步跟蹤進展
  • 異步進步+異步日誌清除這個措施應用改進後的延遲

這些實驗的結果顯示在圖6、7和8。正如你所看到的,異步日誌清除不斷減少了大約50%的延遲。同樣,異步進展跟蹤改善延遲約65%。結合在一起,減少了85 - 86%的延遲和延遲低於100毫秒。

圖6。圖表顯示性能改進使用異步的吞吐量配置100 k /秒的事件
圖6。圖表顯示性能改進使用異步的吞吐量配置100 k /秒的事件
圖7。圖表顯示性能改進使用異步的吞吐量配置500 k /秒的事件
圖7。圖表顯示性能改進使用異步的吞吐量配置500 k /秒的事件
圖8。圖表顯示性能改進使用異步的吞吐量配置1米/秒的事件
圖8。圖表顯示性能改進使用異步的吞吐量配置1米/秒的事件

卡夫卡卡夫卡水槽基準源

卡夫卡的基準,我們使用5工人的火花集群節點(i3.2xlarge - 4核,61鑲條內存),一個單獨的集群3節點運行卡夫卡和一個額外的2節點生成數據添加到卡夫卡來源。我們的卡夫卡的話題40分區和一個複製因子的3。

數據生成器將數據發布到一個卡夫卡的話題和結構化流管道消耗數據和重版卡夫卡到另一個話題。績效評估的結果如圖9所示,10和11所示。可以看到,應用異步進步和異步日誌清除後,延遲減少到65 - 75%或3 - 3.5 - x在不同的吞吐量。

圖9。圖表顯示性能改進使用異步的吞吐量配置100 k /秒的事件
圖9。圖表顯示性能改進使用異步的吞吐量配置100 k /秒的事件
圖10。圖表顯示性能改進使用異步的吞吐量配置500 k /秒的事件
圖10。圖表顯示性能改進使用異步的吞吐量配置500 k /秒的事件
圖11。圖表顯示性能改進使用異步的吞吐量配置1米/秒的事件
圖11。圖表顯示性能改進使用異步的吞吐量配置1米/秒的事件

性能結果的總結

用新的異步進展跟蹤和異步日誌清除,我們可以看到,這兩款減少延遲3 x。共同努力,延遲是在所有吞吐量大大減少。圖表還顯示,保存的時間通常是一個持續時間為每個配置女士(200 - 250)和他們一起可以刮掉500 ms全麵(批留下足夠的時間規劃和查詢處理)。

可用性

這些性能改進提供數據磚Lakehouse平台從DBR 11.3起。Beplay体育安卓版本異步日誌清除DBR 11.3和後續版本中默認啟用。此外,這些改進已經導致了開源火花和可以從Apache 3.4起火花。

未來的工作

目前有一些局限性所支持的類型的工作負載和水槽異步進展跟蹤特性。我們將調查支持更多類型的工作負載在未來與此功能。

這僅僅是可預測的低延遲特性的開始我們建立在結構化流的一部分項目光速。此外,我們將繼續基準和概要文件結構化流找到更多領域的進步。請繼續關注!

加入我們的數據和AI峰會在舊金山,6月每股26到29更多地了解項目光速和數據流的磚Lakehouse平台。Beplay体育安卓版本

免費試著磚

相關的帖子

看到所有工程的博客的帖子
Baidu
map