author: mys

since: 2020-07

一、介绍:

Siddhi是一个流处理和复杂的事件处理平台,可用于构建成熟的事件驱动的应用程序。它可以嵌入Java和Python应用程序中,作为微服务在裸机,VM或Docker上运行,并且可以在Kubernetes中大规模运行。

二、架构和能力:
1、概念:

事件:

Siddhi是一个事件驱动的系统,其中所有消耗,处理和发送的数据都被建模为事件。因此,Siddhi在任何事件驱动的体系结构中都可以发挥至关重要的作用。

如果我们将通过ATM进行的交易视为数据流,那么从其中进行的一次提取就可以视为一个事件。此事件包含诸如金额,时间,帐号等数据。许多此类交易形成一个流。

在这里插入图片描述

Siddhi Application:

Siddhi Application是类似于SQL的脚本,具有.siddhi文件扩展名。定义Siddhi的实时处理逻辑,包含消费者(sources), 生产者(sinks), 流, 查询, 表, 方法以及其他必要的约定,这些约定描述了事件的消耗,处理和发布方式。

需按照Siddhi Streaming SQL语法编写Siddhi应用程序,siddhi提供丰富的函数以及api,并支持扩展。

2、能力:

在这里插入图片描述

如上所述,Siddhi可以:

  • 接受来自许多不同类型来源的事件输入,包括nats、kafka、tcp、http、file等等,以及不同的数据格式,包括json、text、xml、key-value等;
  • 处理事件并进行转化,分析,分析方法支持模式分析、序列分析、增量聚合、机器学习等等;
  • 将事件发布到多种类型的接收器,包括nats、kafka、http、file等等;

siddhi工作流程,启动Siddhi应用程序后:

(1)按照事件的顺序,依次消费数据;

(2)将事件传递给相应的查询处理;

(3)根据逻辑完成的处理生成新事件;

(4)通过输出将新生成的事件发送到流;

3、Streaming SQL

Siddhi Streaming SQL旨在处理事件流。可用于实现流数据集成,流分析,基于规则和自适应决策制定,是复杂事件处理(CEP)和流处理系统的演进,也可用于处理状态计算,检测复杂事件模式以及实时发送通知。

Siddhi Streaming SQL使用类似于SQL的语法和注释来消费来自具有各种数据格式的各种事件源的事件,然后使用有状态和无状态运算符进行处理,并将输出发送到多个端点。

下图描述了Siddhi Application的一些关键Siddhi Streaming SQL元素以及事件如何流经这些元素
在这里插入图片描述

通过Sources、inputt Handlers将事件输入到事件流中,使用事件查询结合窗口、数据表、聚合、分区等多种处理方式,生成复杂事件,流入下一个处理流程或通过sink输出。

关键元素:

元素描述
Stream事件流,逻辑上按时间顺序排列的事件系列,具有唯一可识别的名称,以及定义其模式的一组定义的类型化属性。
Event事件是与流关联的单个事件对象。流的所有事件均包含时间戳和基于它们所属流的模式的相同类型的属性集。
table用定义的模式存储的数据的结构化表示。存储的数据可通过进行备份In-Memory,或外部数据存储诸如RDBMSMongoDB等中的表可以被访问并在运行时操作。
Named-Window命名窗口:使用定义的架构和驱逐策略存储的数据的结构化表示。窗口数据将被存储,In-Memory并通过命名窗口约束自动清除。其他siddhi元素只能在运行时查询Windows中的值,但不能修改它们。
Named-Aggregation命名聚合:数据的结构化表示,以定义的架构和聚合粒度(例如秒,分钟,小时等)进行增量聚合和存储。聚合数据既存储又存储In-Memory在外部数据存储中,例如RDBMS。其他siddhi元素只能在运行时查询Windows中的值,但不能修改它们。
Query一种逻辑构造,通过使用一个或多个流,表,窗口和聚合中的数据以流方式处理事件,并将输出事件发布到流,表或窗口中。
Source事件源,其从外部源消耗的数据(如TCPKafkaHTTP等)与各种事件格式,例如XMLJSONbinary等,然后转换为西提事件,并进入用于处理流。
Sink消费事件,映射到一个预定的数据格式(如XMLJSONbinary等等),并且将它们发布到外部端点(例如E-mailTCPKafkaHTTP,等等)。
Input Handler输入处理程序,一种以编程方式将事件注入流中的机制。
Stream/Query Callback使用流或查询中的输出事件的机制。
Partition一个逻辑容器,它基于从事件派生的分区键来隔离查询的处理。
Inner Stream在分区中将部分查询彼此连接的可定位流。
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐