Drools Fusion (CEP) Example 和 關鍵概念

Drools Fusion (Complex Event Processing) 是Drools對於復瑣事件處理的模塊, 與它功能類似的是Esper, 二者均可以提供基於時間跨度和滑動窗口的事件處理, 二者最大的區別可能就在於1. Drools開源, 不支持Distribution, 語法drl, Esper有企業版, 支持Distribution, 語法類SQLhtml

 

看了一下官方文檔git

http://docs.jboss.org/drools/release/5.6.0.Final/drools-fusion-docs/html_single/github

寫了幾個例子session

https://github.com/zhwbqd/droolsCEPthis

 

下面介紹一下Drools Fusion中一些關鍵的概念spa

1. event和fact的區別code

  1. event 通常是不變對象
  2. event 與時間強相關
  3. event 擁有可管理的生命週期(通常只會在有限的時間內匹配規則, 方便engine管理自動管理event, 將未匹配的event銷燬, 並釋放相關資源)
  4. 每一個event都有本身的ts, 能夠使用滑動時間窗口, 例如: 統計過去60min的平均值
2. drools support 兩種語義的event, 時間點和區間(區別是 @duration 註解是否爲0)
 
3. 註解:
    1. @role 默認fact, CEP時候 @role(event) 標識fact 是一個event
    2. @timestamp, 每一個event都有一個相關的timestamp, 默認是從系統得到(即爲插入session的時間), 也能夠由外部賦值
    3. @duration, 每一個event的持續時間, 在point-in-time event中爲0, 默認值也爲0, 外部可賦值
    4. @expire, 只在STREAM MODE有效, event的過時時間, @expire(300) 300s過時 @expire(1d3h45m20s29ms) 1天3小時45分鐘20秒29毫秒過時
 
4. SessionClock 共有4中, 主要使用的有兩種, realtime和pseudo
 
5. After, Before, During, Meet 等關鍵字 都是用於比較兩個事件的發生時間順序
好比before關鍵字的意義
3m30s <= $eventB.startTimestamp - $eventA.endTimeStamp <= 4m 
$eventA : EventA( this before[ 3m30s, 4m ] $eventB ) 

 

6. Sliding Window 只能跑在STREAM模式下, SlidingWindow 會當即執行運算,而不會等到事件知足要求才進行計算, event未在sliding window被匹配上的也不會被銷燬, 可能有其餘event依賴於它, 它會在本身的expire時間內過時htm

相關文章
相關標籤/搜索