【Flink】Flink 有状态的流处理

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 【1月更文挑战第26天】【Flink】Flink 有状态的流处理

为了加快访问速度,我们可以直接将状态保存在本地内存。当应用收到一 个新事件时,它可以从状态中读取数据,也可以更新状态。而当状态是从内存中读写的时候, 这就和访问本地变量没什么区别了,实时性可以得到极大的提升。  

另外,数据规模增大时,我们也不需要做重构,只需要构建分布式集群,各自在本地计算就可以了,可扩展性也变得更好。  

因为采用的是一个分布式系统,所以还需要保护本地状态,防止在故障时数据丢失。我们 可以定期地将应用状态的一致性检查点(checkpoint)存盘,写入远程的持久化存储,遇到故 障时再去读取进行恢复,这样就保证了更好的容错性。  

有状态的流处理是一种通用而且灵活的设计架构,可用于许多不同的场景。具体来说,有 以下几种典型应用。  

事件驱动型(Event-Driven)应用:

事件驱动型应用是一类具有状态的应用,它从一个或多个事件流提取数据,并根据到来的 事件触发计算、状态更新或其他外部动作。比较典型的就是以Kafka为代表的消息队列几乎都 是事件驱动型应用。  

这其实跟传统事务处理本质上是一样的,区别在于基于有状态流处理的事件驱动应用,不 再需要查询远程数据库,而是在本地访问它们的数据, 这样在吞吐量和延迟方 面就可以有更好的性能。  

另外远程持久性存储的检查点保证了应用可以从故障中恢复。检查点可以异步和增量地完 成,因此对正常计算的影响非常小。  

数据分析(Data Analysis)型应用:

所谓的数据分析,就是从原始数据中提取信息和发掘规律。传统上,数据分析一般是先将 数据复制到数据仓库(Data Warehouse),然后进行批量查询。如果数据有了更新,必须将最 新数据添加到要分析的数据集中,然后重新运行查询或应用程序。  

如今,Apache Hadoop 生态系统的组件,已经是许多企业大数据架构中不可或缺的组成部 分。现在的做法一般是将大量数据(如日志文件)写入Hadoop的分布式文件系统(HDFS)、 S3 或HBase等批量存储数据库,以较低的成本进行大容量存储。然后可以通过SQL-on-Hadoop 类的引擎查询和处理数据,比如大家熟悉的 Hive。这种处理方式,是典型的批处理,特点是 可以处理海量数据,但实时性较差,所以也叫离线分析。  

如果我们有了一个复杂的流处理引擎,数据分析其实也可以实时执行。流式查询或应用程 序不是读取有限的数据集,而是接收实时事件流,不断生成和更新结果。结果要么写入外部数 据库,要么作为内部状态进行维护。  

Apache Flink 同事支持流式与批处理的数据分析应用。与批处理分析相比,流处理分析最大的优势就是低延迟,真正实现了实时。另外,流处理 不需要去单独考虑新数据的导入和处理,实时更新本来就是流处理的基本模式。当前企业对流 式数据处理的一个热点应用就是实时数仓,很多公司正是基于Flink来实现的。  

数据管道(Data Pipeline)型应用:

ETL 也就是数据的提取、转换、加载,是在存储系统之间转换和移动数据的常用方法。 在数据分析的应用中,通常会定期触发ETL任务,将数据从事务数据库系统复制到分析数据 库或数据仓库。  

所谓数据管道的作用与ETL类似。它们可以转换和扩展数据,也可以在存储系统之间移 动数据。不过如果我们用流处理架构来搭建数据管道,这些工作就可以连续运行,而不需要再 去周期性触发了。比如,数据管道可以用来监控文件系统目录中的新文件,将数据写入事件日 10 志。连续数据管道的明显优势是减少了将数据移动到目的地的延迟,而且更加通用,可以用于 更多的场景。  

有状态的流处理架构上其实并不复杂,很多用户基于这种思想开发出了自己的流处理系 统,这就是第一代流处理器。Apache Storm就是其中的代表。Storm可以说是开源流处理的先 锋,最早是由 Nathan Marz 和创业公司 BackType的一个团队开发的,后来才成为Apache 软 件基金会下属的项目。Storm 提供了低延迟的流处理,但是它也为实时性付出了代价:很难实 现高吞吐,而且无法保证结果的正确性。用更专业的话说,它并不能保证“精确一次” (exactly-once);即便是它能够保证的一致性级别,开销也相当大。

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
3月前
|
消息中间件 Kafka Apache
Apache Flink 是一个开源的分布式流处理框架
Apache Flink 是一个开源的分布式流处理框架
487 5
|
6月前
|
Java Linux API
flink入门-流处理
flink入门-流处理
111 0
|
7月前
|
分布式计算 资源调度 监控
没有监控的流处理作业与茫茫大海中的裸泳无异 - 附 flink 与 spark 作业监控脚本实现
没有监控的流处理作业与茫茫大海中的裸泳无异 - 附 flink 与 spark 作业监控脚本实现
|
8天前
|
SQL 大数据 数据处理
[AIGC大数据基础] Flink: 大数据流处理的未来
[AIGC大数据基础] Flink: 大数据流处理的未来
|
SQL 分布式计算 大数据
统一批处理流处理——Flink批流一体实现原理
统一批处理流处理——Flink批流一体实现原理
1494 0
统一批处理流处理——Flink批流一体实现原理
|
20天前
|
机器学习/深度学习 分布式计算 BI
Flink实时流处理框架原理与应用:面试经验与必备知识点解析
【4月更文挑战第9天】本文详尽探讨了Flink实时流处理框架的原理,包括运行时架构、数据流模型、状态管理和容错机制、资源调度与优化以及与外部系统的集成。此外,还介绍了Flink在实时数据管道、分析、数仓与BI、机器学习等领域的应用实践。同时,文章提供了面试经验与常见问题解析,如Flink与其他系统的对比、实际项目挑战及解决方案,并展望了Flink的未来发展趋势。附带Java DataStream API代码样例,为学习和面试准备提供了实用素材。
75 0
|
3月前
|
运维 监控 数据处理
【天衍系列 03】深入理解Flink的Watermark:实时流处理的时间概念与乱序处理
【天衍系列 03】深入理解Flink的Watermark:实时流处理的时间概念与乱序处理
|
4月前
|
关系型数据库 数据处理 流计算
【Flink】Flink 流处理和批处理
【1月更文挑战第26天】【Flink】Flink 流处理和批处理
|
4月前
|
机器学习/深度学习 算法 物联网
实时计算Flink版:引领流处理的新时代
实时计算Flink版:引领流处理的新时代
|
7月前
|
SQL 消息中间件 API
Flink---14、Flink SQL(SQL-Client准备、流处理中的表、时间属性、DDL)
Flink---14、Flink SQL(SQL-Client准备、流处理中的表、时间属性、DDL)