Flink CEP 基本概念及使用規則

Flink CEP 基本概念及使用規則

CEP的概念:

Ø複雜事件處理(Complex Event Processing),用於識別輸入流中符合指定規則的事件,並按照指定方式輸出。

Ø起床—>洗漱—>吃飯—>上班一系列串聯起來的事件流形成的模式

Ø瀏覽商品—>加入購物車—>建立訂單—>支付完成—>發貨—>收貨事件流形成的模式。

透過概念可以瞭解,CEP主要是識別輸入流中使用者指定的一些基本規則的事件,然後將這些事件再透過指定方式輸出。

如下圖所示: 我們指定“方塊、圓”為基本規則的事件,在輸入的原始流中,將這些事件作為一個結果流輸出來。

Flink CEP 基本概念及使用規則

CEP的使用場景:

Flink CEP 基本概念及使用規則

Flink CEP 基本概念及使用規則

像使用者異常檢測:我們指定異常操作事件為要輸出的結果流;策略營銷:指定符合要求的事件為結果流;運維監控:指定一定範圍的指標為結果流;銀行卡盜刷:指定同一時刻在兩個地方被刷兩次為異常結果流。

Flink CEP 基本概念及使用規則

在Flink CEP API中,主要透過Pattern 類來進行實現。CEP模式主要分為三種模式:

1、個體模式

Ø單例模式:只接收一個事件

p 觸發條件 (。where()/。or()/。until())

Ø迴圈模式:可以接收一個或多個事件

p單例 +量詞(在個體模式後追加量詞,指定迴圈次數)

個體模式分為單例模式和迴圈模式:

單例模式只接收一個事件,主要透過(。where()/。or()/。until())等條件觸發,使用規則如下:start為定義的變數。

Flink CEP 基本概念及使用規則

迴圈模式可以接收一個或多個事件,使用規則為 單例+量詞,如下圖所示:

Flink CEP 基本概念及使用規則

2、組合模式(多個個體模式的組合)

Ø嚴格連續(next)

Ø中間沒有任何不匹配的事件

Ø寬鬆連續(followBy)

Ø忽略匹配的事件之間的不匹配的事件

Ø不確定的寬鬆連續(followByAny)

Ø一個匹配的事件能夠再次使用

組合模式主要分為

三種使用規則:

但是在使用組合模式之前,必須以初始模式開始,使用begin() 控制,如下圖:

Flink CEP 基本概念及使用規則

(1)嚴格連續,透過next()方法控制,這句話是指使用者定義的基本事件,如最上圖中的方塊,必須是連續都是方塊,不能出圓圈。可以透過下圖理解。

Flink CEP 基本概念及使用規則

(2)寬鬆連續,透過followBy()控制,中間可以有不匹配的事件

Flink CEP 基本概念及使用規則

(3)不確定的寬鬆連續,透過followByAny()方法控制,表示一個匹配的事件可以多次被使用

Flink CEP 基本概念及使用規則

組合模式還包含:“不希望出現某種連續關係”:

。notNext()—— 不想讓某個事件嚴格近鄰前一個事件發生

。notFollowedBy()——不想讓某個事件在兩個事件之間發生

組合模式注意事項:

所有組合模式必須以。begin()開始;組合模式不能以。notFollowedBy()結束;“not”型別的模式不能被optional所修飾;此外,還可以為模式指定時間約束,用來要求在多長時間內匹配有效。

3、模式組

Ø一個組合模式作為條件巢狀在個體模式裡pPattern((ab)c)

Flink CEP 基本概念及使用規則

為例幫助大家更好地理解CEP的API使用,接下里透過兩個案例,對CEP的使用進行講解。

(a)電商案例——條件建立訂單之後15分鐘之內一定要付款,否則取消訂單

案例介紹:在電商系統當中,經常會發現有些訂單下單之後沒有支付,就會有一個倒計時的時間值,提示你在15分鐘內完成支付,如果沒有完成支付,那麼該訂單就會被取消,主要是因為拍下訂單就會減庫存,但是如果一直沒有支付,那麼就會造成庫存沒有了,後面購買的時候買不到。

在CEP概念介紹時,引入過一條鏈路:

Ø瀏覽商品—>加入購物車—>建立訂單—>支付完成—>發貨—>收貨事件流形成的模式。

上述模式是標準的電商事件流,我們案例中定義的CEP規則是

建立訂單—>支付完成 這兩個環節,要求是,判斷15分鐘內是否付款,否則訂單取消。

程式碼設計:

Ø(1)定義實體類:訂單編號,訂單狀態(1 建立訂單,等待支付,2支付訂單完成,3取消訂單,申請退款,4已發貨,5確認收貨,已經完成)訂單建立時間,訂單金額

Flink CEP 基本概念及使用規則

Ø(2)建立執行環境,設定流時間特性為事件時間,設定並行度

Flink CEP 基本概念及使用規則

Ø(3)設定Source源

Flink CEP 基本概念及使用規則

Ø(4)定義Pattern模式,指定條件

Flink CEP 基本概念及使用規則

在Pattern模式中,我們使用到了個體模式,組合模式

首先,使用begin()方法以模式作為開始;

其次,由於建立的CEP規則是 建立訂單—>支付完成 ,則在單例模式下,透過where條 件觸發訂單的狀態已將處於 1 建立訂單,等待支付狀態

接著,透過寬鬆連續followBy()方法忽略15分鐘內的產生的其他訂單,所以使用寬鬆連續。

然後,透過where條件觸發訂單的狀態是否已將處於 2 支付完成。

最後,透過within()方法判斷第二次觸發的訂單是否在支付的15分鐘內完成。

Ø(5)訂單超時檢測

Flink CEP 基本概念及使用規則

Ø(6)執行結果對比

Flink CEP 基本概念及使用規則

檢視最終的執行結果,可以得知201608041140。。。。 這個訂單的狀態為1,且沒有其他狀態,最終被系統判斷為超時訂單。

(b)系統登入案例——當2秒內出現兩次登入失敗(“fail”)時,輸出異常報警資訊

同樣,根據上述資訊,我們做以下程式碼設計:

Ø(1)設定實體類:使用者ID,登入IP,事件型別,事件時間

Flink CEP 基本概念及使用規則

Ø(2)設定環境,指定source源,傳入實體類

Flink CEP 基本概念及使用規則

Ø(3)定義pattern匹配模式(規則),指定條件

begin: 第一次;where: 出現 fail;next: 緊接著第二次出現 fail;times: 出現一次 ;within:表示在2秒內。

Flink CEP 基本概念及使用規則

Ø(4)結果對比

Flink CEP 基本概念及使用規則

Flink CEP 基本概念及使用規則

檢視最終的執行結果,可以得知伺服器編號為1,連續2秒在兩個伺服器登入,登入失敗;伺服器編號為3,連續2秒在一臺伺服器登入,登入失敗!

以上就是CEP的講解內容!覺得好的,點贊,在看,分享三連擊,謝謝!!!

為回饋廣大計算機愛好者,本博主專門整理了關於Java、大資料、演算法、前端、人工智慧、作業系統、網路等所學知識的書籍,如果看到此博文的小夥伴們,覺得對你有幫助,請關注微信公眾號:

3分鐘秒懂大資料

,回覆:

福利

。就快速領取吧!

Flink CEP 基本概念及使用規則