• Siddhi cep


    1.基本介绍

    Siddhi 提供以下功能,

    流式数据分析

    为分析操作员提供编排数据流、计算分析和检测 来自多个不同实时数据源的事件数据模式的软件,以允许开发人员构建能够实时感知、思考和行动的应用程序。

    复杂事件处理 (CEP)

    “CEP 是一种计算,其中有关事件的传入数据被提炼成更有用、更高级别的‘复杂’事件数据,从而提供对正在发生的事情的洞察力。”

    “ CEP 是事件驱动的,因为计算是由接收事件数据触发的。CEP 用于要求高、持续智能的应用程序,以增强态势感知并支持实时决策。”

    流数据集成

    流数据集成是一种通过处理、关联和分析内存中的数据来集成多个系统的方法,同时不断地将数据从一个系统实时移动到另一个系统。

    警报和通知

    该系统根据定义的 KPI 和其他分析持续监控事件流,并发送警报和通知。

    自适应决策一种根据预定义规则、连接系统的当前状态和机器学习技术动态做出实时决策的方法。

    在这里插入图片描述
    在这里插入图片描述

    2.使用流程

    当Siddhi 应用程序启动时:

    定义输入流,输出流,编写Siddhi查询sql;
    接收各种流将事件传递给查询以进行处理。
    根据查询完成的处理生成新事件。
    最后,通过输出将新生成的事件发送到流。

    3.sql样例

    define stream TemperatureStream
            (sensorId string, temperature double);
     
    @info(name = 'Overall-analysis')
    from TemperatureStream#window.timeBatch(1 min)
    select avg(temperature) as avgTemperature,
           max(temperature) as maxTemperature,
           count() as numberOfEvents
    insert into OverallTemperatureStream;
     
    @info(name = 'SensorId-analysis')
    from TemperatureStream#window.timeBatch(30 sec, 0)
    select sensorId,
           avg(temperature) as avgTemperature,
           min(temperature) as maxTemperature
    group by sensorId
    having avgTemperature > 20.0
    insert into SensorIdTemperatureStream;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    define stream InputStream(jsonString string);
     
    from InputStream
    select json:toObject(jsonString) as jsonObj
    insert into PersonalDetails;
     
    from PersonalDetails
    select jsonObj,
        json:getString(jsonObj,'$.name') as name,
        json:isExists(jsonObj, '$.salary') as isSalaryAvailable,
        json:toString(jsonObj) as jsonString
    insert into OutputStream;
     
    from OutputStream[isSalaryAvailable == false]
    select
        json:setElement(jsonObj, '$', 0f, 'salary') as jsonObj
    insert into PreprocessedStream;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    TemperatureStream  (
            sensorId  string ,  temperature  double );
     
    define table TemperatureLogTable (
            sensorId string, roomNo string, temperature double);
     
    @store(type="rdbms",
           jdbc.url="jdbc:mysql://localhost:3306/sid",
           username="root", password="root",
           jdbc.driver.name="com.mysql.jdbc.Driver")
    define table SensorIdInfoTable (
            sensorId string, roomNo string);
     
    @info(name = 'Join-query')
    from TemperatureStream as t join SensorIdInfoTable as s
         on t.sensorId == s.sensorId
    select t.sensorId as sensorId, s.roomNo as roomNo
           t.temperature as temperature
    insert into TemperatureLogTable;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    4.总结:
    优点:
    1.sql模式,本身支持一些函数运算;

    2.量词,组合模式,连续策略较为丰富;

    3.支持不发生算子;

    4.时间窗口内,数据聚合在函数支持下较为方便;

    5.事件流可以支持和外部存储join;

    缺点:

    1.使用Siddhi Streaming SQL语言将处理逻辑编写为Siddhi 应用程序,开发和维护比java代码高,在sql里数据处理/异常/监控等不够灵活可控;

    2.sql模式开发,对于现有的复杂json结构数据源,解析处理不友好;

    3.长窗口聚合数据时,数据在内存中累积;

    4.海外项目,文档资料少,维护成本高;

    5.当前的复杂嵌套回溯类型,sql模式难以实现;

  • 相关阅读:
    如何在webapp中于动发布一个应用
    Xray联动RAD实现自动扫描教程
    Session 和 Cookie 使用
    arthas进阶版排查问题之idea插件工具操作
    解读服装行业生命周期
    超算,先进计算未来的研究方向有哪些?
    华为机试 - 简易内存池
    【2022】【论文笔记】基于二维光子晶体的光控分光比可调Y型——
    springboot+个人博客 毕业设计-附源码191613
    一整套美团面经(给对象超用心整理的)
  • 原文地址:https://blog.csdn.net/weixin_39800144/article/details/126184785