原文:
www.kdnuggets.com/2018/05/event-processing-important-open-problems.html
由 Miyuru Dayarathna,WSO2
- 简介
事件处理(EP)是一种分析事件流以提取现实世界事件有用见解的范式。如图 1 所示,我们可以将 EP 分为两个 主要领域,即 事件流处理 和 复杂事件处理(CEP)。第一个领域,流(即事件)处理 支持多种连续分析,例如过滤、聚合、丰富、分类、连接等。第二个领域,CEP 使用简单事件序列上的模式来检测和报告复合事件。
1. 谷歌网络安全证书 - 快速进入网络安全职业。
2. 谷歌数据分析专业证书 - 提升你的数据分析水平
3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT
图 1:事件处理术语的区别
基于最近的 调查 和对行业趋势的多项分析,我们识别出事件处理领域的三大重要开放问题,如下所示,
-
如何开发和调试事件处理应用程序?
-
如何解决系统可扩展性问题?
-
如何管理系统状态?
- 如何开发和调试事件处理应用程序?
首先,我们需要解决事件处理应用程序开发的关键问题。主要有两个关键子问题,如下所示,
2.1 我们可以在不同的流处理器之间使用一种编程语言吗?
事件处理应用程序的开发遵循三种主要技术。首先,通过使用用标准编程语言(如 Java/C++/Python)编写的 API。此类事件处理平台的一些示例(全部为 Apache 项目)包括 Flink、Samza、Apex、Storm、Heron 等。图 2 展示了事件处理软件使用编程语言的情况。
图 2:事件处理软件编程语言的使用情况。(a)汇总视图(b)不同事件处理系统中使用的编程语言的分类。
第二,它们可以使用自定义(即领域特定)语言开发。例如,IBM Infosphere Stream 的流处理语言(SPL),Software AG 的 Apama 等。用自定义语言编写的程序语句会被翻译成中间语言,如 C/C++/Perl 等,然后被编译成应用程序可执行文件。
第三,事件处理应用程序可以使用 SQL 或类似 SQL 的语言开发。例如,WSO2 的 Siddhi (WSO2 流处理器),Confluent 的 KSQL,FlinkSQL,SparkSQL,BeamSQL,等等。类似 SQL 的语言(也称为流式 SQL)为具有关系数据库背景的应用开发者提供了熟悉的语法。流式 SQL 提供的核心操作覆盖了 90% 的用例。
编程语言的多样性产生了需要遵循通用语法的需求,以解决在事件流处理器中普遍存在的可用性和移植性问题。在这样做的过程中,上述第三种方法(流式 SQL)有可能成为指定事件流处理应用程序的标准。理想的情况是创建一个符合 ANSI SQL 的流式 SQL 系统。目前,还存在一些缺失的部分,例如在流式 SQL 中支持集合操作(见)。
2.2 查询编写与调试环境
大多数流处理器使用编程语言代码来表达业务逻辑,例如 流式 SQL、Scala、Java 等。因此,拥有正确的工具集对于开发流处理应用程序非常有用。为了开发大型复杂的应用程序,大多数非程序员更倾向于使用基于图形用户界面(GUI)的环境,而不是命令行界面(CLI)。大量的流处理器用户是非程序员,例如数据科学家。因此,缺乏适当的查询编写和调试环境使非程序员的工作非常困难。数据分析笔记本正在成为流处理应用程序的查询编写环境。几乎所有的事件流处理器都有某种应用调试支持。然而,调试支持的深度差异很大。
- 如何解决系统可扩展性问题?
系统可扩展性和性能是衡量流处理器处理大工作负载能力的重要指标。一个可扩展的流处理器可以扩展其操作规模。传统的扩展方法基于增加更多资源,称为垂直扩展(向同一服务器添加更多资源)和水平扩展(添加多个服务器)。然而,一些其他技术如 弹性扩展、近似计算 也可以用来解决系统可扩展性问题。
- 如何有效管理系统状态?
事件处理器的状态是处理来自输入数据流的事件期间反复访问的值集合。状态有三种类型:应用程序状态、用户状态和系统状态。应用程序状态是指在运行应用程序时创建和维护的值。例如,检测模式或长度窗口内容所需的状态。应用程序状态驻留在短期存储器(见图 2)中,例如主内存,并定期刷新到长期存储器。用户状态是应用程序访问的用户数据,用于做出运行时决策。例如,像 RDBMS 这样的长期存储器可以包含用户的信用历史信息。系统状态指框架提供的其他所有内容,以确保如果流处理器崩溃,它可以恢复到正常操作状态。
图 3:具有状态管理功能的典型数据流处理器
可靠且容错的状态管理对流处理器提供高可用服务至关重要。传统上,流处理器的可靠性和容错性通过将其操作员状态检查点保存到分布式文件系统、关系数据库管理系统(RDBMS)或分布式消息队列(如 Apache Kafka)来实现。然而,检查点引入了延迟,因为我们需要在进行检查点之前停止流应用程序的执行。已经提出了几种技术来减少保存检查点所需的时间。例如,增量检查点保持对状态所做更改的日志,并使用日志进行恢复,而不是每次都对应用程序状态进行完整检查点。因此,该技术仅在快照恢复成本可以通过增量检查点带来的性能提升来弥补时才有用。另一种方法是将计算层和数据库层合并为一个层,将另一层作为流和快照的存储层 (详细信息请参见)。
结论
事件处理应用程序如何编程、如何扩展以及如何管理其状态是事件处理范式中需要解决的三个主要问题。找到有效的解决方案可能会引导我们进入下一代流处理器。
简介: Miyuru Dayarathna 是 WSO2 的高级技术主管。他是一名计算机科学家,在流计算、图数据管理和挖掘、云计算、性能工程、物联网等方面有多个研究兴趣和贡献。
相关: