首页 > 其他分享 >事件和流处理系统概述

事件和流处理系统概述

时间:2022-09-30 09:46:14浏览次数:74  
标签:处理 系统 应用程序 概述 事件 日志 数据

事件和流处理系统概述

这是系统设计系列文章的第 5 篇。本文最初发表于 https://www.learncsdesign.com

您从数据中提取洞察力和知识的速度越快,您的系统就能越快地响应它们所观察到的世界不断变化的状态。

事件驱动架构

事件表明在应用程序的上下文中发生了一些有趣的事情。它可能是系统捕获的外部事件,也可能是状态变化产生的内部事件。在一个系统中,事件源发出事件而不期望其他组件如何处理它。

通常,事件会发布到消息传递系统。相关方可以注册以接收事件并相应地处理它们。

基于事件的架构可以使用像 RabbitMQ 这样的消息系统来实现。一旦每个订阅者都消费了一个事件,它就会从代理中删除。除了为代理释放资源外,这还会破坏任何显式事件记录。

我写了一个 详细的帖子 关于使用 RabbitMQ 的面向消息的中间件,您可能会觉得有趣。

在简单的数据结构中记录不可变事件具有一些有用的特性。事件日志与大多数消息代理管理的 FIFO 队列不同,因为它们是仅附加数据结构。

日志附有记录,每条记录都有一个唯一的条目号。作为序列号的结果,系统中事件的顺序被明确地捕获。

由于其持久性,事件日志具有一些关键优势:

  • 可以随时引入新的事件消费者。新的消费者可以访问日志中存储的完整事件历史记录。它可以处理现有事件和新事件。
  • 可以修改事件处理逻辑以添加新功能或修复错误。然后,您可以在整个日志上执行新逻辑以丰富结果或纠正错误。
  • 如果服务器或磁盘发生故障,您可以恢复上次已知状态并从日志中重播事件以恢复数据集。事务日志在数据库系统中的作用与此类似。

阿帕奇卡夫卡

分布式持久日志存储是 Kafka 的核心。 Kafka 使用哑代理/智能客户端架构。事件代理主要负责将新事件附加到持久日志,将事件传递给消费者,以及管理日志分区和复制以实现可伸缩性和可用性。多个消费者可以多次读取日志条目,因为它们是持久存储的。只需指定他们希望读取的条目的日志偏移量或索引即可。这样,代理就不必维护任何复杂的消费者相关状态。该架构已被证明具有极强的可扩展性并提供非常高的吞吐量。

Credit: https://kafka.apache.org/20/images/log_consumer.png

数据处理

在传统的数据处理应用程序中,您将来自外部提要的数据持久保存到数据库中,并设计查询以提取信息。随着系统处理的信息量增加,这变得越来越困难。对于低延迟、聚合读取和连接,您需要从数据库获得快速、可扩展的写入性能。最后,您可以在数据库写入和读取完成后执行有用的分析。

越来越多的大容量数据源导致了一种称为流处理系统的新型技术的发展。通过使用这些,您可以处理内存中的数据流,而无需持久化数据。实时分析通常被称为此。可扩展系统越来越多地使用流处理平台。

金融服务公司使用流处理进行实时欺诈检测,零售商使用它来获得客户行为的完整视图,云原生公司使用它在影响客户之前检测中断。

批量处理

通常,批处理在软件系统中新可用数据的处理中发挥了重要作用。表示新对象和更新对象的数据被累积到批处理系统中的文件中。批处理数据加载作业会定期处理这些新可用的数据并将其插入应用程序的数据库中。 ETL 代表提取、转换、加载。 ETL 过程涉及处理包含新数据的批处理文件,将其聚合,并将其转换为可插入存储系统的格式。

处理完批次后,您的分析和外部用户即可使用数据。从新插入的数据中,您可以运行产生有用见解的查询。

大规模系统依赖于批处理,因为它可靠、有效且高效。缺点是新数据到达之间的滞后,可用于分析和查询。

流处理

数据流或事件流代表无界数据集。无界的定义是无限的并且不断增长。随着新记录随着时间​​的推移添加到数据集中,它是无限的。

数据流还具有以下属性:

  • 数据流是有序的
  • 不可变的数据记录
  • 数据流的可重放性

在流处理中,一个或多个事件流被连续处理。流处理涉及从无界数据集中连续读取数据,对其进行处理并发出输出。

状态

如果您只需要单独处理每个事件,流处理是一个非常简单的活动。当您的操作涉及多个事件、移动平均值以及连接两个流以创建丰富的信息流时,流处理变得非常有趣。在这些情况下,您需要跟踪的信息不仅仅是每个事件。我们将存储在事件之间的信息称为状态。

流处理中有几种类型的状态:

  • 本地或内部状态 — 此状态只能由流处理应用程序的特定实例访问。
  • 外部状态——这种类型的状态存储在外部数据存储中,通常是 Redis 或 Cassandra 等 NoSQL 系统。它的优点包括几乎无限的大小以及可以从应用程序的多个实例访问它的事实。

流处理平台

各种数据结构用于使数据可用于平台。在大多数情况下,这些是队列,例如 Kafka 主题,或分布式存储系统中的文件,例如 AWS S3。在流处理节点中,从数据源中摄取数据对象,并执行聚合。数据对象流是从源处理的。数据对象在概念上在处理节点之间传递。

在流处理系统中,处理节点将一个节点的输入流转换为由下游节点处理的新流。

有两种一般类型的流处理应用程序:

  • 第一种方法仅处理和转换流中的各个事件,而不需要任何有关它们的上下文或状态信息。
  • 在某些流应用程序中,状态必须在单个数据对象的处理过程中持续存在。有状态的流应用程序属于这一类。

在数据处理领域,Apache Flink、Apache Storm、AWS Kinesis、Apache Kafka Streams、Apache Spark Streams 和 Spring Data Flow 是一些顶级竞争者。

批处理与流处理

批处理的特点

  • 潜伏 — 几分钟到几小时
  • 分析 — 这是一个包含新批次数据和现有数据的复杂过程

流处理的特点

  • 潜伏 — 亚秒到秒
  • 分析 — 一种相对简单的方法,用于检测事件、聚合事件并在滚动时间间隔内计算新到达数据的指标

如果你喜欢这篇文章,别忘了鼓掌。如果你想连接,你可以找到我 领英 .

参考

书籍:流处理应用程序设计、系统和分析的基础知识
书籍:可扩展系统的基础

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/39944/36293009

标签:处理,系统,应用程序,概述,事件,日志,数据
From: https://www.cnblogs.com/amboke/p/16743827.html

相关文章

  • Delphi XE MessageDlg[3] 返回判定与处理
    DelphiXEMessageDlg[3]返回判定与处理//滔Roy2022.09.30procedureTHeaderFooterForm.MDlgResult1(Sender:TObject;constAResult:TModalResult);beginifARes......
  • Vue中EventBus(事件总线)的基本用法
    vue组件中最常见的数据传递就是父子组件之间的传递,父组件可以通过props向下传数据给子组件,子组件可以通过$emit事件携带数据给父组件。然而当两个页面没有任关系,该如......
  • 组装电脑基础知识之中央处理器CPU
    前言本系列文章是为准备自己组装台式机的小伙伴写的关于中央处理器CPU、主板、显卡等部分的参考资料。一、简介中央处理器作为计算机系统的运算和控制核心,是信息处理、......
  • 委托/事件/线程传参简单理解
    写了很多代码,但几乎都没写过委托/事件/线程传参方面应用的代码因此自己总很容易理解后又遗忘今天又重温了一下因此以最简单的方式的代码方式写下来帮助理解1.线程传参[简单......
  • 秋色园QBlog技术原理解析:Web之页面处理-内容填充(八)
    文章回顾:1:​​秋色园QBlog技术原理解析:开篇:整体认识(一)​​--介绍整体文件夹和文件的作用2:​​秋色园QBlog技术原理解析:认识整站处理流程(二)​​--介绍秋色园业务处理......
  • React 中的副作用是什么以及如何处理它?
    React中的副作用是什么以及如何处理它?大家好,欢迎来到我的新博客“什么是React的副作用以及如何处理它?”。我是InduKushwaha,我将成为你在这个博客中的导师。那么让我......
  • [DM]数据预处理-PCA主成分分析2(附MATLAB代码)
    我们在进行数据分析时,往往会发现数据具有很多种属性,比如某类型饼干的口味、加工方式、保质期、价格、购买人群等等。每一种属性就代表该数据在某一维度上的数值。多维度的数......
  • 使用jQuery处理ctrl+enter或者enter发送信息事件
    在实现客服系统的过程中,实现了ctrl+enter作为换行,enter作为发送的事件<scripttype="text/javascript">$("body").keypress(function(e){if(e.ctrlKey&&......
  • gRPC如何处理错误,以及gRPC错误代码。
    错误处理标准错误模型正如你在我们的概念文件和例子中所看到的,当一个gRPC调用成功完成后,服务器会向客户端返回一个OK状态(根据语言的不同,OK状态可能会或可能不会直接用于你......
  • Go中使用应用层传输安全(ALTS)的gRPC认证概述。
    ALTS认证Go中使用应用层传输安全(ALTS)的gRPC认证概述。概述应用层传输安全(ALTS)是由Google开发的相互认证和传输加密系统。它用于保护Google基础设施内的RPC通信的安......