簡體   English   中英

如何停止 Apache Flink CEP Pattern?

[英]How to stop Apache Flink CEP Pattern?

請幫助我,我有兩個問題:
我從 Apache Kafka json-messages 中讀取,(然后我有步驟:反序列化到 POJO、過濾器、keyBy ......)

  1. 哪個更好用:KeyedProcessFunction(帶有 state、定時器、if-else 邏輯塊)還是 Flink CEP 模式庫?

我可以檢查KeyedProcessFunction中的輸入序列(檢查 state、if-else 塊、out.collect(...)、state.clear()...你會理解我的),以及我可以在條件下使用Flink CEP 庫和量詞。

  1. 如何停止 flink CEP Pattern?

例如:
我有輸入序列:A1,(沒有事件 1 分鍾)A2,(沒有事件 5 分鍾)А3,(沒有事件 1 分鍾)А4,(沒有事件超過 5 分鍾)A5。 (A1和A5之間可能有很多事件)
我想發送 output:A1, A3, A5。
第一個事件,如果下一個事件在前一個事件之后不到 5 分鍾出現,則不會發送到 output,如果下一個事件在前一個事件后超過 5 分鍾出現,它將發送到 output。
我應該在我的模式中添加什么???

Pattern<Event, ?> pattern = Pattern.
<Event>begin("start")
.where(new SimpleCondition<Event>(){
 public boolean filter(Event event){
return event.getName().contains("A");
}
}).within(Time.minutes(5));

雖然乍一看這個特殊的例子似乎很容易實現為KeyedProcessFunction ,但如果消息可以亂序到達,肯定會出現一些復雜性。 那么你可能會被愚弄,認為可能存在很大的差距,而實際上並沒有。

但是,如果您想要一個簡單、開箱即用的現成解決方案,這個特定示例非常適合 session windows。

使用 CEP,我認為一個可行的解決方案會具有這種風格:您正在尋找一個 A 序列(稱為 A1),然后是另一個 A(稱為 A2),其中 (A2.timestamp - A1.timestamp) >= 5分鍾。 找到匹配項后,發出 A1 並推進匹配引擎,使 A2 成為新的 A1。 (方便的是,CEP 對輸入流進行預排序,因此您不必擔心事情會出現問題。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM