Siddhi使用来自各种事件源的事件,根据定义的Siddhi应用程序处理事件,并向订阅的事件接收器生成结果。Siddhi可以从内存表或外部数据存储(如RDBMS、MongoDB、Hazelcast内存网格等)中存储和使用事件。)。Siddhi还允许应用程序和用户通过其存储查询API查询Siddhi,以交互方式从内存和其他存储中检索数据。
?
Siddhi主要模块
-
Siddhi Query API:这允许您使用POJO类将Siddhi应用程序的执行逻辑定义为查询和Definitions。在其内部,Siddhi使用这些对象来确定其预期执行的任务。
-
Siddhi Query Compiler:这模块允许你通过Siddhi Streaming SQL定义Siddhi应用,然后将SQL脚本转化为siddhi可以执行的查询POJO对象。
-
Siddhi Core: 这个模块根据Siddhi应用定义来创建并执行运行时事件。
-
Siddhi Annotation(4.0版本):这个模块提供注解功能支持,允许所有扩展背注解,这样就可以被Siddhi Core 挑选处理,也有助于生成扩展文档。
Siddhi 组件结构?
从图上可以看到,Siddhi Core模块维护执行逻辑,它与外部环境和系统交互以消费和发布消息。要实现上述功能,它执行下面几个模块:
-
SiddhiManager:这部分是Siddhi core的核心模块,负责管理Siddhi Application Runtimes,并通过SiddhiContext的周期性状态存储、统计报表和扩展加载来简化其功能。
-
SiddhiAppRuntime:每一个部署的Siddhi Application会生产一个SiddhiAppRuntime,它为每一个Siddhi Application 定义提供一个独立的执行环境。Siddhi Application Runtime 基于他们对应的Siddhi Application的逻辑,从多种外部系统生产或者消费消息。
-
SiddhiContext:这是同一个SiddhiMananger中所有Application Runtime的共享对象,其中主要包括持久化引用、统一管理和扩展holders
?Siddhi App 执行流
Siddhi执行过程中大致使用到下面几个组件:
-
StreamJunction:事件路由,默认使用imcoming thread 订阅组件消息,@Async实现异步缓存消费
-
InputHandler:StreamJunction的入口
-
StreamCallBack:从StreamJunction接受数据
-
Queries & Partitions:filtering,transforming,joining,pattern matching
-
Source:external Source in various data formate @Source Annotation
-
SourceMapper:Map for Source,convert source to event
-
Sink:convert siddhi Event to various data fromate @Sink annotation
-
SinkMapper:configured for sink,map event to specified data formate @map Annotation in @Sink
-
Table:store event use inmemory table by default
-
Window:store event and determine when event be expired
-
IncrementalAggregation:增量聚合
-
Trigger:trigger event at interval
-
QueryCallback:receive notification
Siddhi Window
Siddhi使用四种事件实现处理流程:
-
Current Event:从流进来的当前事件
-
Expired Event:window中超时失效的事件
-
Timer Event:通知查询更新执行计划的事件,一般由scheduler触发
-
Reset Event:重置查询状态
?