事件流處理架構NEsper for .NET

來源:互聯網
上載者:User

複合事件處理(Complex Event Processing)介紹提到了開源的Esper,NEsper 是一個事件流處理(Event Stream Processing,ESP)和複雜事件處理(Complex Event Processing,CEP)的系統,它可以監測事件流併當特定事件發生時觸發某些行動——可看作是把資料庫反過來,語句是固定的,而資料流進進出出。事件處理是軟體行業的一個發展趨勢,已有數家大廠商以及許多初創企業加入到該市場中。其常有的應用例子包括系統自動交易、BAM、RFID、進階監測系統、欺詐檢測,甚至直接整合進SOA。

微軟有個和SQL Server 整合的StreamInsight,但是他不是開源的,開源的NEsper 是StreamInsight之外的另一個選擇。雖然StreamInsight整合在SQL Server,但是它可以不需要SQL Server的,工作起來有點像有點像資料庫的倒置,Esper 也是一樣的。NEsper 引擎允許應用儲存查詢並運行資料通過,來代替儲存資料並且執行查詢儲存資料的工作方式。NEsper 提供兩種機制來處理事件:
1、NEsper 提供了一個事件模式語言去指定基於運算式的事件模式比對。這個模式比對引擎是通過一個狀態機器來實現的。這個事件處理的方法匹配期望存在的隊列或者不存在的事件或者事件的組合。它包括以時間為基礎的各個事件之間的關係。
2、 NEsper 還提供事件流查詢。這個樣可以使事件串流分析CEP應用的需求。事件流查詢提供視窗、彙總、串連和分析的函數來處理事件流。這些查詢是通過EPL 語句來實現的(被定製過的事件處理語言(event processing lauguage -- EPL)能夠表達豐富的事件條件,相關性,儘可能的時間視窗跨度,因此在為系統開發時最小化了所需的開發精力)。EPL用於視圖。視圖表示需要將構造的資料放入到一個事件流中並且去驅動資料的流動。在資料流動的過程中對資料進行處理,來得到我們最後所 需要的結果。

EPL與SQL一樣使用select從句和where從句。但是EPL語言使用事件流和views(視圖)的概念取代了資料庫中的表。與SQL語句中的表相似,EPL中的views被定義成了能為查詢和過濾的資料。views有對事件進行排序,能從事件屬性中得到分析資料,能夠給事件分組,以及單獨處理事件屬性值得等功能。
下面是一個簡單的EPL語句,計算了在最近30秒內股票事件流的平均價格。

select avg(price) from StockTickEvent.win:time(30 sec)

接下來的EPL語句返回了每一個特徵類別再100ticks之內的平均價格。

select symbol, avg(price) as averagePrice from StockTickEvent.win:length(100) group by symbol

下面的例子串連了兩個事件流。第一個事件流包含了在30分鐘之內進行欺騙警告的事件。第二個事件是在最近30秒內進行退款的事件。這個事件流是通過accout number進行串連的。

select fraud.accountNumber as accntNum, fraud.warning as warn, withdraw.amount as amount,MAX(fraud.timestamp, withdraw.timestamp) as timestamp, 'withdrawlFraud' as desc from FraudWarningEvent.win:time(30 min) as fraud, WithdrawalEvent.win:time(30 sec) as withdraw where fraud.accountNumber = withdraw.accountNumber

3.事件模式比對
模式比對是通過狀態機器實現的。(NFA、DFA之類的,我是在學編譯原理時候學的)。模式的表示能夠包含與模式操作相結合的過濾表達。模式表達可以嵌套。 下面是5種類型的模式操作(pattern operators):

(1)控制模式尋找器的建立和終結的操作符:every

(2)邏輯操作符:and、or、not

(3)時態操作符(控制事件順序):->

(4)where-condition(用於用於事件過濾與模式尋找器的終止):比如 timer:at

(5)觀察者觀察的事件時間:比如 timer:interval,timer:at

下面是一個簡單的模式,它給在60秒內價格大於80的IBM股票一個警告:

every StockTickEvent(symbol="IBM", price>80) where timer:within(60 seconds)

每隔5分鐘發出一次警告:

every timer:at(5, *, *, *, *)

每事件A發生後,接著事件B或者事件C發生:

A -> ( B or C )

一個模式,接下來事件的一個屬性需要與第一個事件的該屬性匹配:

every a=EventX -> every b=EventY(objectID=a.objectID)

4.模式比對與事件串流分析的結合
當一串事件流被模式進行匹配時,模式比對的結果能被接下來的分析和處理所應用。下面的模式描述的是在10秒之內一個事件與其接下來的事件的id不同。而這個語句則進一步統計了所有這種情況下的id分組。

select a.id, count(*) from pattern [ every a=Status -> (timer:interval(10 sec) and not Status(id=a.id)] group by id
5.命名視窗(named windows)
命名視窗是一個全域資料視窗,她能夠參與許多查詢語句,也能被查詢、被插入、被刪除。命名視窗類別似於資料庫系統中的表(table)的概念。
接下來我們建立一個命名視窗:
create window AlertNamedWindow as (origin string, priority string, alarmNumber long)
命名視窗還可以在事件達到時觸發查詢、修改、刪除。這裡舉一個統計數位例子:

on TriggerEvent select count(*) from AlertNamedWindow

 

NEsper for .NET

Esper近況:事件流處理架構

https://bitbucket.org/emertechie/syslognet

http://www.cppblog.com/mysileng/archive/2012/10/11/193182.html

CEP入門

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.