前面對Esper進行了概述,包括事件類型、事件流、事件窗口以及EPL相關內容。當然,上面的知識,對於簡單的Esper開發,應該已經足夠,能夠根據自己業務需求,做出一個滿足需要的Esper應用。但是,真正對Esper的工作原理能夠了解多少呢?
OK,下面就對Esper的工作原理進行一個簡單的描述。首先看一下Esper的事件驅動架構圖:

整個EDA(Event Driven Architecture)包括:
· data streams :事件源,提供高速、海量的實時數據。
· Event Stream adapters : 事件源的接入適配器,用於接收事件源數據,並且轉發事件給Esper引擎。
· Esper engine : Esper引擎部分。其負責注冊statement以及statement的監聽、事件類型等信息,執行事件處理。
· output adapters : 輸出適配器,通過監聽等獲取引擎處理的有價值信息,通過該適配器輸出。換句話說,其實就是與引擎外包程序連接的入口。
· Event Query & Causality Pattern Language : 事件處理語言,包括規則引擎(事件查詢語言 類SQL的用法) 以及狀態引擎(模式匹配)的定義。Esper引擎執行事件處理時,依賴這些引擎的定義。
· Core container : 核心容器。特殊算法、操作分析等。
· HistorycalData access layer : 歷史數據訪問層。在引擎處理時,會將Esper引擎處理views的歷史數據(比如時間窗口 取過去30s的平均值)此類用法時,保存歷史數據,共引擎處理。
整個Esper架構——輕量級的ESP(Event Stream processing 事件流處理)和CEP(Complex Event Processing 復合事件處理)容器,由以上各個部分組成。
運行時,event steam的流轉,參考圖中的箭頭方向。
還可以參考如下圖:

上圖中,通過事件處理總線,即接入adapter以及引擎注冊等,負責接收事件並交由引擎處理;引擎處理的過程需要借助Esper的內部緩存以及狀態引擎、規則引擎等對事件進行解析、篩選處理。引擎處理輸出的事件信息、歷史數據等都會在內部緩存中進行保存。最后事件消費方獲取有價值數據,執行相應動作。(這一部分的解釋多少有點模糊,是因為對於圖中的箭頭流向有些疑問,解釋不夠清楚,還請諒解!)
注:上述圖片均來自網絡,在此感謝原圖作者,並致以歉意!
