事件流没有行动就什么都不是

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

持续生成数据的系统中的每个数据点都对应一个事件。事件流被描述为事件或数据点的连续流。事件流有时在开发人员社区中被称为数据流,因为它们由连续的数据点组成。事件流处理是指对生成的事件采取的行动。

本文深入讨论了事件流和事件流处理,涵盖的主题包括事件流处理的工作原理、事件流处理和批处理之间的对比、其优点和用例,并以事件流处理的说明性示例作为结尾。

事件流:概述

服务之间的耦合是与微服务相关的最重要的困难之一。传统架构是一种“不问,不说”的架构,其中仅在收到请求时才收集数据。假设有 issue 中的三个服务,A、B 和 C。服务 A 询问其他服务,“你现在的状态是什么?”并假设他们随时准备回应。如果其他服务不可用,这会让用户处于一种境地。

微服务使用重试作为一种解决方法,以补偿网络故障或网络拓扑变化带来的任何负面影响。然而,这最终增加了另一层复杂性并增加了费用。

为了解决传统设计的问题,事件驱动架构采用了“告诉,不问”的理念。在上面的示例中,服务 B 和 C 发布连续的数据流,例如事件,服务 A 订阅这些事件流。然后,服务 A 可以评估事实、汇总结果并在本地缓存它们。

以这种方式使用 Event Streams 具有多种优势,包括:

  • 系统能够密切模仿实际过程。
  • 随着越来越多的服务能够在需要之前保持空闲状态,增加了缩放至零功能(无服务器计算)的使用。
  • 增强的适应性

事件流处理的概念

事件流处理 (ESP) 是促进事件驱动架构开发的技术集合。如前所述,事件流处理是对事件驱动架构创建的事件做出反应的过程。

事件流处理

一个人的行为方式可能多种多样,包括:

  • 进行计算
  • 转换数据
  • 分析数据
  • 丰富数据

您可以设计一个操作流水线来转换事件数据,这将在以下部分详细介绍,这是事件流处理的核心。

事件流处理基础

事件流处理由两种独立的技术组成。第一种技术形式是逻辑上存储 Events 的系统,第二种技术是用于处理 Events 的软件。

第一个组件负责数据存储并根据时间戳保存信息。作为 Streaming Data 的一个示例,记录一整天的每分钟室外温度就是一个很好的例子。在这种情况下,每个事件都包含温度测量和测量的精确时间。流处理器或流处理引擎构成第二个组件。

大多数情况下,开发人员使用 Apache Kafka 来临时存储和处理事件。它还支持创建基于事件流的管道,其中已处理的事件被传输到进一步的事件流以进行额外处理。

事件流处理与批处理

随着技术的发展,企业处理的数据量比十年前大得多。因此,需要更复杂的数据处理技术来跟上这种变化速度。传统的应用程序负责数据的收集、存储和处理,以及处理后输出的存储。

通常,这些过程是分批进行的,因此您的应用程序必须等到它有足够的数据才能开始处理。对于需要快速数据处理的时间敏感或实时应用程序,您的应用程序可能必须等待数据的时间量是不可接受的。

为了解决这个困难,事件流加入了竞争。在事件流处理中,每个数据点或事件都是即时处理的,这意味着没有数据点积压,非常适合实时应用程序。

传统数据库与事件流处理

此外,Stream Processing 还可以检测模式、检查不同程度的注意力以及同时检查来自多个 Streams 的数据。跨时间分散操作,事件流处理需要比批处理少得多的硬件。

使用事件流处理的好处

当必须对事件流采取快速操作时,使用事件流处理。因此,事件流处理将成为管理大量数据的首选解决方案。这将对当今流行的高速技术产生最大的影响,使事件流处理成为管理大量数据的首选解决方案。将事件流处理合并到您的工作流中的几个优点如下:

  • 可以开发事件流管道来实现高级流式处理用例。例如,使用事件流管道,可以使用元数据增强事件数据并修改此类对象以进行存储。
  • 在您的工作流中使用事件流处理使您能够实时做出选择。
  • 随着数据量的增长,您可以简单地扩展您的基础架构。
  • Event Stream Processing 提供持续的事件监控,支持创建警报以发现趋势和异常。
  • 您可以实时检查和处理大量数据,允许您在存储之前过滤、聚合或过滤数据。

事件流用例

随着物联网 (IoT) 的发展,对实时分析的需求也在不断发展。随着数据处理架构变得更加事件驱动,ESP 的重要性继续增长。

事件流用于跨越多个部门和组织的各种应用案例。让我们检查一些通过将事件流处理纳入其数据处理方法而获利的行业。

除了帮助大部门外,它还解决了我们每天面临的具体问题。以下是如何使用它的一些示例。

用例 1:使用事件流推送 GitHub 通知

事件流是实时了解代码库更改的好方法。通过配置事件流并订阅您感兴趣的事件,只要存储库中有活动,您就可以收到推送通知。我们希望这个用例能帮助您了解如何在 GitHub 推送通知中使用事件流。

这里我们以创建一个 chrome 扩展为例,该扩展利用 event dreams 提供实时 GitHub 推送通知。

Google Chrome 的GitHub Notifier 扩展允许您在有人与您的 GitHub 存储库之一交互时实时查看通知。这是掌握项目活动并能够快速响应问题或拉取请求的好方法。该扩展程序可从 Google Chrome 商店免费获得。只需安装它,然后使用您的 GitHub 帐户登录。

完成此操作后,只要有人提及您、对您的某个存储库发表评论,甚至有人为您的某个存储库加注星标,您就会开始收到通知。您还可以选择接收特定事件的通知,例如新版本或新的合并请求。使用 GitHub Notifier 随时了解 GitHub 存储库上的所有最新活动!

使用事件流推送 GitHub 通知

用例 2:工业物联网 (IIoT)

在自动化工业流程的背景下,企业可以通过包含多个实时通信数据流的传感器来整合 IIoT 解决方案。这些传感器可能安装了数百个,它们的数据流通常由物联网网关汇集,物联网网关可以将连续的数据流进一步传送到技术堆栈中。企业需要应用事件流处理方法来利用数据,分析数据以检测趋势,并迅速采取行动。该事件流将由事件流平台使用,然后执行实时分析。

例如,我们可能有兴趣跟踪 30 秒内的平均温度。之后,我们希望仅在超过 45 °C 时显示温度。当满足此条件时,其他程序可能会利用警告来实时更改其进程以防止过热。

有许多技术可以帮助流程自动化。 Camunda 的工作流引擎是其中之一,它实现了流程自动化并执行业务流程模型和符号 (BPMN) 中定义的流程,BPMN 是流程建模的全球标准。 BPMN 提供了一种易于使用的可视化建模语言,用于自动化您最复杂的业务流程。如果您想开始使用 Camunda 工作流程,Camunda 连接器是一个很好的起点。

用例 3:支付处理

快速支付处理是事件流处理在减轻用户体验问题和不良行为方面的一种出色应用。例如,如果一个人想要付款但遇到严重延误,他们可能会刷新页面,导致交易失败并让他们不确定他们的账户是否已被扣款。同样,在处理机器驱动的支付时,延迟可能会产生很大的连锁反应,尤其是当有数百笔支付被备份时。这可能会导致重复尝试或超时。

为了支持数万个并发请求的流畅处理,我们可能会利用事件流处理来保证始终如一的用户体验。

付款请求事件可以从主题发送到初始付款处理器,然后更改当前正在处理的付款总额。然后创建后续事件并将其转发到不同的处理器,该处理器验证支付可以完成并更改用户的余额。然后生成最终事件,用户的余额由另一个处理器更新。

用例 4:网络安全

网络安全系统收集数百万个事件,以识别新风险并理解事件之间的关系。为了减少误报,网络安全技术使用事件流处理来增强威胁并提供上下文丰富的数据。他们通过遵循一系列流程来做到这一点,包括:

  • 实时从不同的数据源(例如消费者设置)收集事件。
  • 过滤事件流,以便只有相关数据进入主题,以消除误报或良性攻击。
  • 实时利用流式应用程序跨多个源接口关联事件。
  • 将优先级事件转发到其他系统,例如安全信息和事件管理 (SIEM) 系统或安全自动化、编排和响应 (SAO&R) 系统 (SOAR)。

用例 5:航空公司优化

我们可以创建实时应用程序来增强乘客在飞行前、飞行中和飞行后的体验,以及流程的整体效率。如果我们让重要事件(例如客户在登机口扫描登机牌)可以通过航空公司和机场使用的所有后端平台访问,我们就可以有效地协调和做出反应。

例如,基于这一种事件,我们可以启用三种不同的用例,包括:

  • 准确预测起飞时间和预测延误
  • 通过提供实时数据减少转机乘客所需的协助量
  • 减少单个航班对其他航班准点性能的影响。

用例 6:电子商务

事件流处理可用于电子商务应用程序以促进“查看到购买”。为此,我们可以构建一个初始事件流来捕获购物者发生的事件,并为流提供 3 种不同的事件类型。

  • 客户看到项目
  • 客户将商品添加到他们的购物车
  • 一位顾客下了订单。

我们可以通过应用离散过程或算法来协助我们的用例,例如:

  • 每小时销售计算器,解析“客户下订单”事件的流,并保持每小时总收入的运行记录。
  • 从流中读取“Customer sees item”并跟踪每个产品的总浏览次数的产品查看预订跟踪器。此外,它还会解析流中的“客户下订单”事件,并跟踪每种产品的售出单位总数。
  • 当废弃的购物车检测器(读取所有三种事件并使用前面描述的算法来识别放弃购物车的客户)检测到废弃的购物车时,将创建一个新的“客户放弃”购物车事件并将其发布到新主题。

结论

在一个越来越受事件驱动的世界中,事件流处理 (ESP) 已成为企业的重要实践。随着越来越多的公司转向流式架构,事件流正成为越来越重要的数据源。使用事件流的好处包括实时分析、更快的响应时间和改进的客户体验。与传统的批处理相比,它们具有许多优势。

此外,还有许多事件流用例可以帮助您解决特定的业务问题。如果您正在寻找提高业务绩效的方法,请考虑使用事件流处理。