【Flink】Flink 有状态的流处理

本文涉及的产品
实时计算 Flink 版,1000CU*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+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
消息中间件 Kafka Apache
Apache Flink 是一个开源的分布式流处理框架
Apache Flink 是一个开源的分布式流处理框架
922 5
|
Java Linux API
flink入门-流处理
flink入门-流处理
513 0
|
分布式计算 资源调度 监控
没有监控的流处理作业与茫茫大海中的裸泳无异 - 附 flink 与 spark 作业监控脚本实现
没有监控的流处理作业与茫茫大海中的裸泳无异 - 附 flink 与 spark 作业监控脚本实现
|
监控 大数据 Java
使用Apache Flink进行大数据实时流处理
Apache Flink是开源流处理框架,擅长低延迟、高吞吐量实时数据流处理。本文深入解析Flink的核心概念、架构(包括客户端、作业管理器、任务管理器和数据源/接收器)和事件时间、窗口、状态管理等特性。通过实战代码展示Flink在词频统计中的应用,讨论其实战挑战与优化。Flink作为大数据处理的关键组件,将持续影响实时处理领域。
1852 5
|
Java Spring 安全
Spring 框架邂逅 OAuth2:解锁现代应用安全认证的秘密武器,你准备好迎接变革了吗?
【8月更文挑战第31天】现代化应用的安全性至关重要,OAuth2 作为实现认证和授权的标准协议之一,被广泛采用。Spring 框架通过 Spring Security 提供了强大的 OAuth2 支持,简化了集成过程。本文将通过问答形式详细介绍如何在 Spring 应用中集成 OAuth2,包括 OAuth2 的基本概念、集成步骤及资源服务器保护方法。首先,需要在项目中添加 `spring-security-oauth2-client` 和 `spring-security-oauth2-resource-server` 依赖。
212 0
|
消息中间件 数据挖掘 Kafka
揭秘大数据时代的极速王者!Flink:颠覆性流处理引擎,让实时数据分析燃爆你的想象力!
【8月更文挑战第29天】Apache Flink 是一个高性能的分布式流处理框架,适用于高吞吐量和低延迟的实时数据处理。它采用统一执行引擎处理有界和无界数据流,具备精确状态管理和灵活窗口操作等特性。Flink 支持毫秒级处理和广泛生态集成,但学习曲线较陡峭,社区相对较小。通过实时日志分析示例,我们展示了如何利用 Flink 从 Kafka 中读取数据并进行词频统计,体现了其强大功能和灵活性。
316 0
|
监控 搜索推荐 数据挖掘
Flink流处理与批处理大揭秘:实时与离线,一文让你彻底解锁!
【8月更文挑战第24天】Apache Flink 是一款开源框架,擅长流处理与批处理。流处理专攻实时数据流,支持无限数据流及事件驱动应用,实现数据的连续输入与实时处理。批处理则聚焦于静态数据集,进行一次性处理。两者差异体现在处理方式与应用场景:流处理适合实时性要求高的场景(例如实时监控),而批处理更适用于离线数据分析任务(如数据挖掘)。通过提供的示例代码,读者可以直观理解两种模式的不同之处及其实际应用。
1175 0
|
消息中间件 大数据 Kafka
Apache Flink 大揭秘:征服大数据实时流处理的神奇魔法,等你来解锁!
【8月更文挑战第5天】Apache Flink 是一款强大的开源大数据处理框架,专长于实时流处理。本教程通过两个示例引导你入门:一是计算数据流中元素的平均值;二是从 Kafka 中读取数据并实时处理。首先确保已安装配置好 Flink 和 Kafka 环境。第一个 Java 示例展示了如何创建流执行环境,生成数据流,利用 `flatMap` 转换数据,并使用 `keyBy` 和 `sum` 计算平均值。第二个示例则演示了如何设置 Kafka 消费者属性,并从 Kafka 主题读取数据。这两个示例为你提供了使用 Flink 进行实时流处理的基础。随着进一步学习,你将能应对更复杂的实时数据挑战。
253 0
|
消息中间件 Java Kafka
Java中的流处理框架:Kafka Streams与Flink
Java中的流处理框架:Kafka Streams与Flink