Siddhi 组件架构

阅读更多

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:重置查询状态

 

你可能感兴趣的:(java,siddhi,CEP)