一、監(jiān)控系統(tǒng)概覽
監(jiān)控系統(tǒng)在現(xiàn)代技術(shù)環(huán)境中扮演著至關(guān)重要的角色。運營同學(xué)每天檢查自己的活動數(shù)據(jù),研發(fā)人員每天檢查系統(tǒng)各項指標(biāo)是否正常,這些工作都少不了監(jiān)控系統(tǒng)的身影。通常來講,監(jiān)控系統(tǒng)包括數(shù)據(jù)采集、數(shù)據(jù)計算、數(shù)據(jù)存儲、數(shù)據(jù)可視化及監(jiān)控預(yù)警等功能。本文主要介紹數(shù)據(jù)計算部分。
二、實時計算
流數(shù)據(jù)實時計算是一種處理和分析實時數(shù)據(jù)流的技術(shù),它允許企業(yè)從連續(xù)生成的數(shù)據(jù)(如日志文件、傳感器數(shù)據(jù)、在線交易等)中即時提取價值。這種計算模式對于需要快速決策和響應(yīng)的應(yīng)用場景至關(guān)重要,如實時監(jiān)控、在線推薦、欺詐檢測等。Apache Flink 是實現(xiàn)流數(shù)據(jù)實時計算的流行框架之一。
?
2.1 數(shù)據(jù)流
數(shù)據(jù)流(Data Stream)是由連續(xù)生成的數(shù)據(jù)元素組成的序列,這些數(shù)據(jù)元素可以是來自各種源的記錄、事件、或者其他形式的數(shù)據(jù)點。數(shù)據(jù)流通常是動態(tài)的、無界的,并且高速連續(xù)地到達處理系統(tǒng)。
數(shù)據(jù)流的特點包括:
1.連續(xù)性:數(shù)據(jù)流是連續(xù)到達的,沒有明確的開始和結(jié)束。
2.無界性:理論上,數(shù)據(jù)流可以無限地持續(xù)下去,因此通常被認(rèn)為是無界的。
3.實時性:數(shù)據(jù)流通常需要實時或近實時處理,以便及時響應(yīng)或提取信息。
4.變化性:數(shù)據(jù)流的特性(如速度、大小、格式)可能會隨時間變化。
5.無序性:數(shù)據(jù)流中的數(shù)據(jù)可能不按照產(chǎn)生的順序到達,尤其是在分布式系統(tǒng)中,可能因為網(wǎng)絡(luò)延遲或其他因素導(dǎo)致亂序。
?
[數(shù)據(jù)源] → |元素1| → |元素2| → |元素3| → ... → [數(shù)據(jù)處理] → [數(shù)據(jù)存儲/輸出]
?
2.2 數(shù)據(jù)流處理
2.2.1 流處理中的Time和Window
Time
事件時間(Event Time)
事件時間是指每個事件或元素在其生產(chǎn)設(shè)備上產(chǎn)生的時間。該時間通常在它們進入Flink之前就已經(jīng)嵌入在事件中,并且可以從每個事件中提取事件時間戳。
有了事件時間,基于窗口的聚合(例如,每分鐘的事件數(shù)量)只是事件時間列上的一種特殊的分組和聚合。每個時間窗口是一個組,每一行數(shù)據(jù)可以屬于多個窗口/組(針對滑動窗口,多個窗口可能有重合的數(shù)據(jù))。
處理時間(Processing Time):
處理時間是指正在執(zhí)行相應(yīng)Flink操作的機器的系統(tǒng)時間。
當(dāng)流式程序按處理時間運行時,所有基于時間的操作(如時間窗口)都將使用運行相應(yīng)操作的計算機的系統(tǒng)時間。在分布式和異步環(huán)境中,處理時間不能提供確定性,因為它容易受到記錄到達系統(tǒng)(例如從消息隊列)的速度以及記錄在系統(tǒng)內(nèi)部操作之間流動的速度的影響。
Window
無界數(shù)據(jù)流本身沒有邊界,但是對數(shù)據(jù)流的計算需要一個明確的邊界。這就要將無界數(shù)據(jù)流劃分為有界數(shù)據(jù)流,邊界的劃分一般有兩種方式:時間驅(qū)動或者數(shù)據(jù)驅(qū)動,時間驅(qū)動就是每隔多長時間就劃分一個邊界,數(shù)據(jù)驅(qū)動就是每來多少條數(shù)據(jù)劃分一個邊界。
?
?
2.2.2 窗口的分類
1. 滾動窗口(Tumbling Window)
滾動窗口將數(shù)據(jù)流分割成不重疊、連續(xù)的時間間隔。每個窗口都是獨立的,窗口長度是固定的。例如,如果設(shè)置了一個5分鐘的固定時間窗口,那么數(shù)據(jù)流會被劃分為0-5分鐘、5-10分鐘、10-15分鐘等時間段。每個窗口都會獨立處理,適用于需要定期重置計數(shù)或計算的場景。
?
?
2. 滑動時間窗口(Sliding Window)
滑動時間窗口可以有重疊,它由兩個參數(shù)定義:窗口長度和滑動間隔。窗口長度決定了數(shù)據(jù)聚合的時間范圍,而滑動間隔決定了窗口更新的頻率。例如,如果窗口長度是10分鐘,滑動間隔是5分鐘,那么第一個窗口是0-10分鐘,第二個窗口是5-15分鐘,依此類推。滑動時間窗口適用于需要更平滑連續(xù)輸出的場景。
?
?
3. 會話窗口(Session Window)
會話窗口是動態(tài)長度的窗口,它根據(jù)數(shù)據(jù)流的活動來定義。會話窗口在數(shù)據(jù)活動(即事件)發(fā)生時開啟,在一定的不活動時間段(稱為超時時間或間隔)之后關(guān)閉。這種類型的窗口適用于活動或會話驅(qū)動的場景,比如用戶的網(wǎng)頁瀏覽行為分析。
?
4. 全局窗口(Global Window)
全局窗口是一個無限期的窗口,它不會根據(jù)時間進行分割。在全局窗口中,數(shù)據(jù)流的處理通常由其他機制觸發(fā),如外部信號或數(shù)據(jù)數(shù)量達到一定閾值。它不常用,因為大多數(shù)流處理場景都需要某種形式的時間邊界來限制數(shù)據(jù)處理。
2.2.3 窗口的生命周期
窗口創(chuàng)建
窗口不會預(yù)先創(chuàng)建好,而是由數(shù)據(jù)驅(qū)動創(chuàng)建。當(dāng)?shù)谝粋€應(yīng)該屬于這個窗口的數(shù)據(jù)元素到達時,就會創(chuàng)建對應(yīng)的窗口。
窗口計算
對于不同的窗口類型,觸發(fā)計算的條件也會不同。例如,一個滾動事件時間窗口,應(yīng)該在水位線到達窗口結(jié)束時間的時候觸發(fā)計算;而一個計數(shù)窗口,會在窗口中元素數(shù)量達到定義大小時觸發(fā)計算。
窗口銷毀
一般情況下,當(dāng)時間達到了結(jié)束點,就會直接觸發(fā)計算、輸出結(jié)果,進而清除狀態(tài)、銷毀窗口。這時窗口的銷毀可以認(rèn)為和觸發(fā)計算是同一時刻。這里需要注意,F(xiàn)link 中只對時間窗口(TimeWindow)有銷毀機制;由于計數(shù)窗口(CountWindow)是基于全局窗口(GlobalWindow)實現(xiàn)的,而全局窗口不會清除狀態(tài),所以就不會被銷毀。
?
2.2.4 基于窗口機制的流計算
算子模型
Flink中算子分為數(shù)據(jù)源算子(source)、轉(zhuǎn)換算子(transform)、輸出算子(sink),下圖為算子模型示意圖。數(shù)據(jù)源算子負(fù)責(zé)接收運算數(shù)據(jù),數(shù)據(jù)源支持多種:文本、MQ等等;轉(zhuǎn)換算子主要對數(shù)據(jù)流進行聚合和計算操作;sink算子主要負(fù)責(zé)將運算結(jié)果輸出,包括持久化和轉(zhuǎn)發(fā)運算結(jié)果(MQ)等。
?
?
下圖展示了用窗口大小為10s的滾動時間窗口處理數(shù)據(jù)的例子,數(shù)據(jù)流中所有數(shù)據(jù)都按序到達,這是最理想的情況。
?
水位線機制
對于分布式系統(tǒng)而言,各個系統(tǒng)節(jié)點相互獨立,互不影響,這給系統(tǒng)帶來了更高的穩(wěn)定性。但是各個節(jié)點之間沒有統(tǒng)一的時鐘,而是各自維護一個邏輯時鐘。數(shù)據(jù)流在不同節(jié)點之間流動,上游節(jié)點給下游節(jié)點傳輸數(shù)據(jù)時,不同的下游節(jié)點對于時間的處理也會有偏差。如果要統(tǒng)一各個節(jié)點之間的時鐘,則需要上游節(jié)點給下游節(jié)點傳遞數(shù)據(jù)時,將事件時間也傳遞下來。
以下圖為例,時間戳為12和13的數(shù)據(jù)分別進如source1和source2算子。source1算子將基于事件時間的邏輯時鐘傳遞給下游operator1算子,operator1算子將本地邏輯時鐘置為12;source2算子將邏輯時鐘傳遞給下游operator2算子,operator2算子將本地邏輯時鐘置為13。這就造成了不同下游節(jié)點之間邏輯時鐘不統(tǒng)一的問題。
想要解決這個問題,需要上游算子將邏輯時鐘以廣播形式傳遞出去,并且該邏輯時鐘的傳遞不會受到當(dāng)前算子作業(yè)進度的影響。
水位線可以看做是一種特殊的數(shù)據(jù)記錄,該記錄中包含了邏輯時鐘,其主要內(nèi)容就是一個時間戳,并且只能遞增。其表示該時間戳之前的數(shù)據(jù)都已經(jīng)到達,結(jié)束時間小于該時間戳的窗口都可以觸發(fā)計算和關(guān)閉窗口。
水位線傳遞機制
有序流的水位線傳遞比較簡單,數(shù)據(jù)和水位線全部按照自身順序進行傳遞,下游依次處理,當(dāng)水位線到達了某個算子任務(wù),這個任務(wù)會將內(nèi)部時鐘設(shè)置為當(dāng)前時間戳。
數(shù)據(jù)流并不總是有序,由于網(wǎng)絡(luò)延遲等原因可能會造成數(shù)據(jù)流亂序。水位線周期性生成時,以當(dāng)前周期內(nèi)的最大事件時間進行計算。
一旦算子任務(wù)開啟了并行,水位線的傳遞就會變得復(fù)雜。以下圖為例,并行任務(wù)間的水位線傳遞。
1)operator1算子初始化內(nèi)部邏輯時鐘為0,其接收兩個并行上游算子source1、source2的結(jié)果。
2)source1算子處理事件時間為1的數(shù)據(jù),并將水位線1傳遞給下游operator1算子,operator1算子接收到source1的水位線之后,不更新自己的邏輯時鐘。需要等待source2算子發(fā)送水位線,并進行比較后才能更新自己的邏輯時鐘。
3)source2算子處理事件時間為3的數(shù)據(jù),并將水位線3傳遞給下游operator1算子,operator1算子接收到source2的水位線之后,和source1分區(qū)的水位線1進行比較,取最小值[1]作為自己的邏輯時鐘時間。
4)source1算子處理事件時間為4的數(shù)據(jù),并將水位線4傳遞給下游operator1算子,operator1算子接收到source1的水位線之后,和source2分區(qū)的水位線[4]進行比較,取最小值[3]作為自己的邏輯時鐘時間。
水位線最長等待時間
也就是說,下游算子依賴所有上游算子的水位線來設(shè)置自己的邏輯時鐘。假如有一個上游算子一直沒有發(fā)送水位線,下游算子的邏輯時鐘則無法更新,這時下游算子無法正常執(zhí)行自己的計算任務(wù)。
此時,需要設(shè)置水位線最長等待時間,超過最長等待時間還是沒有接收到某個上游算子的水位線信息,則排除該上游算子,即該上游算子的水位線不再參與比較。這樣下游算子的邏輯時鐘就能夠正常推進。
遲到數(shù)據(jù)處理
對于數(shù)據(jù)流而言,數(shù)據(jù)并不總是按序到達。如果某些數(shù)據(jù)因為網(wǎng)絡(luò)原因?qū)е聛y序甚至延遲,這些數(shù)據(jù)就有無法正確計算的風(fēng)險。
下圖展示了一個窗口大小為10s的滾動窗口處理數(shù)據(jù)流的過程:
1)2-6這些數(shù)據(jù)進入到[0,10)窗口內(nèi),此時觸發(fā)水位線計算,水位線為w(7),沒有觸發(fā)窗口操作。
2)5-9這兩個數(shù)據(jù)進入到[0,10)窗口內(nèi),11進入到[10,20)窗口內(nèi),此時出發(fā)水位線計算,水位線為w(11),當(dāng)前水位線大于[0,10)窗口的結(jié)束時間,觸發(fā)該窗口的計算和關(guān)閉操作。
3)11進入到[10,20)窗口內(nèi)后,又有一條數(shù)據(jù)8來到。此時屬于它的窗口已經(jīng)觸發(fā)計算并關(guān)閉,不處理該條數(shù)據(jù)。
4)15-16這些數(shù)據(jù)進入到[10,20)窗口內(nèi),此時觸發(fā)水位線計算,水位線為w(16),沒有觸發(fā)窗口操作。
5)17-20這些數(shù)據(jù)進入到[10,20)窗口內(nèi),此時觸發(fā)水位線計算,水位線為w(20)。當(dāng)前水位線大于[10,20)窗口的結(jié)束時間,觸發(fā)該窗口的計算和關(guān)閉操作。
?
為了解決亂序流中延遲數(shù)據(jù)的處理問題,提出了水位線延遲時間的概念。例如,想實現(xiàn)水位線延遲兩秒,則只需要將當(dāng)前事件時間減去兩秒作為當(dāng)前的水位線即可。以上圖為例,時間窗口大小為10s,將水位線延遲時間設(shè)置為兩秒,再次進行數(shù)據(jù)流處理。
1)2-6這些數(shù)據(jù)進入到[0,10)窗口內(nèi),此時觸發(fā)水位線計算,水位線為w(5),沒有觸發(fā)窗口操作。
2)5-9這兩個數(shù)據(jù)進入到[0,10)窗口內(nèi),11進入到[10,20)窗口內(nèi),此時出發(fā)水位線計算,水位線為w(9),沒有觸發(fā)窗口操作。
3)11進入到[10,20)窗口內(nèi)后,又有一條數(shù)據(jù)8來到,該條數(shù)據(jù)進入到[0,10)窗口內(nèi)。
4)15-16這些數(shù)據(jù)進入到[10,20)窗口內(nèi),此時觸發(fā)水位線計算,水位線為w(12),當(dāng)前水位線大于[0,10)窗口的結(jié)束時間,觸發(fā)該窗口的計算和關(guān)閉操作。
5)17-20這些數(shù)據(jù)進入到[10,20)窗口內(nèi),此時觸發(fā)水位線計算,水位線為w(18),不觸發(fā)窗口操作。其中亂序數(shù)據(jù)4無法處理。
?
通過設(shè)置水位線延遲等待時間,可以處理一些輕微延遲的數(shù)據(jù)。如果數(shù)據(jù)延遲非常嚴(yán)重,在水位線等待時間內(nèi)還是沒有等到對應(yīng)窗口的數(shù)據(jù),又該怎么辦呢?
其實水位線觸發(fā)窗口計算和關(guān)閉是兩個動作,觸發(fā)窗口計算之后如果窗口不進行關(guān)閉,那么延遲嚴(yán)重的數(shù)據(jù)還可以通過側(cè)輸出流進入到該窗口再次出發(fā)計算。Flink也支持設(shè)置窗口關(guān)閉延遲時間,將窗口關(guān)閉延遲時間設(shè)置為5s,以上圖為例,再次進行數(shù)據(jù)流處理。
1)2-6這些數(shù)據(jù)進入到[0,10)窗口內(nèi),此時觸發(fā)水位線計算,水位線為w(5),沒有觸發(fā)窗口操作。
2)5-9這兩個數(shù)據(jù)進入到[0,10)窗口內(nèi),11進入到[10,20)窗口內(nèi),此時出發(fā)水位線計算,水位線為w(9),沒有觸發(fā)窗口操作。
3)11進入到[10,20)窗口內(nèi)后,又有一條數(shù)據(jù)8來到,該條數(shù)據(jù)進入到[0,10)窗口內(nèi)。
4)15-16這些數(shù)據(jù)進入到[10,20)窗口內(nèi),此時觸發(fā)水位線計算,水位線為w(12),當(dāng)前水位線大于[0,10)窗口的結(jié)束時間,觸發(fā)該窗口的計算但不關(guān)閉該窗口。
5)數(shù)據(jù)17進入到[10,20)窗口內(nèi),此時又來了數(shù)據(jù)4,由于當(dāng)前已經(jīng)超過了水位線延遲時間,數(shù)據(jù)無法直接進入[0,10)窗口內(nèi)。通過側(cè)輸出流進入到窗口內(nèi)再次觸發(fā)窗口計算。
6)19-20進入到[10,20)窗口內(nèi),此時出發(fā)水位線計算,水位線為w(18),當(dāng)前水位線大于[0,10)窗口的延遲關(guān)閉時間,關(guān)閉該窗口。
通過設(shè)置窗口延遲計算和延遲關(guān)閉在一定程度上可以解決數(shù)據(jù)遲到的問題,在實時計算場景,窗口計算延遲設(shè)置不宜過大,否則會失去結(jié)果的實時性。
?
寫在最后
由于篇幅有限,這篇文章只介紹了數(shù)據(jù)計算中的一部分,要想實現(xiàn)容錯性高、計算精準(zhǔn)的數(shù)據(jù)計算服務(wù),需要考慮很多場景。例如,算子并行計算時,某個算子突然不可用,如何恢復(fù)數(shù)據(jù)的計算結(jié)果?并行算子間,每個算子的計算負(fù)載不一致又該如何處理?歡迎大家一起討論~
審核編輯 黃宇
-
監(jiān)控系統(tǒng)
+關(guān)注
關(guān)注
21文章
4006瀏覽量
180574 -
數(shù)據(jù)計算
+關(guān)注
關(guān)注
0文章
15瀏覽量
8045
發(fā)布評論請先 登錄
淺談煤礦井下電力監(jiān)控系統(tǒng)的應(yīng)用
智能機房監(jiān)控系統(tǒng) 智能家居監(jiān)控系統(tǒng)
智能機房監(jiān)控系統(tǒng)
2017雙11技術(shù)揭秘—阿里數(shù)據(jù)庫進入全網(wǎng)秒級實時監(jiān)控時代
監(jiān)控數(shù)據(jù)采集系統(tǒng)的設(shè)計與實現(xiàn)
數(shù)據(jù)揭秘你不知道的阿里巴巴數(shù)據(jù)中心
基于LabWindowsCVI的數(shù)據(jù)采集與監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)
基于STM32和CAN總線的溫度監(jiān)控系統(tǒng)的設(shè)計
一篇文章就讓你知道,基于 STM32 和 CAN 總線的溫度監(jiān)控系統(tǒng)的設(shè)計方法 精選資料分享
定點運算器的基本結(jié)構(gòu)(圖解篇)
揭秘世博燈光之最數(shù)據(jù)揭秘
揭秘iPhone7上的iOS10系統(tǒng)體驗 看完這一篇再決定要不要升級iOS10
直流/直流轉(zhuǎn)換器數(shù)據(jù)表——系統(tǒng)損耗揭秘

直流/直流轉(zhuǎn)換器數(shù)據(jù)表——系統(tǒng)效率揭秘

評論