Structured Streaming和Flink实时计算框架的对比

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 本文对比了Structured Streaming和Flink两大流处理框架。Structured Streaming基于Spark SQL,具有良好的可扩展性和容错性,支持多种数据源和输出格式。Flink则以低延迟、高吞吐和一致性著称,适合毫秒级的流处理任务。文章详细分析了两者在编程模型、窗口操作、写入模式、时间语义、API和库、状态管理和生态系统等方面的优劣势。

目前公司的业务代码大部分使用的还是Structured Streaming,但近期Flink的发展和社区活跃度明显高了很多,因此,借助这个机会对比一下Structured Streaming和Flink,分析两者的优劣势。

Structured Streaming和Flink都是现代流数据处理框架,它们在分布式计算、实时数据处理、容错性以及操作API等方面都有着相似之处。然而,它们也有一些显著的不同点。

一、Structured Streaming

Structured Streaming是Apache Spark的一个组件,它允许开发人员使用Spark SQL进行流数据处理。Structured Streaming基于批处理引擎Spark SQL,用来执行类似批处理的操作。它通过连续查询一个静态表达式,将流数据转换为数据集。Structured Streaming具有良好的可扩展性和容错性,并且支持广泛的数据源和输出格式。

1.1、编程模型

Structured Streaming 将数据流看作是一张无界表,每个流的数据源从逻辑上来说看做一个不断增长的动态表,从数据源不断流入的每个数据项可以看作为新的一行数据追加到动态表中。用户可以通过静态结构化数据的批处理查询方式(SQL 查询),对数据进行实时查询。
image.png

1.2、窗口操作

Structured Streaming 提供了滑动窗口接口,滑动窗口的两个重要的参数是窗口大小,滑动步长。它允许在数据的滑动窗口上应用转换。如下图所示,每当窗口在源 Dstream 上滑动时,位于窗口内的源 RDDs 就会被合并操作,来生成窗口化的 Dstream 的 RDDs。
image.png

1.3、写入模式

为了满足不同操作的结果需求,还提供了三种写入模式:

Complete:当 trigger 触发时,输出整个更新后的结果表到外部存储,存储连接器决定如何处理整个表的写入

Append:只有最后一次触发的追加到结果表中的数据行会被写入到外部存储,这只适用于已存在的数据项没有被更新的情况

Update:之后结果表中被更新的数据行会被写出到外部存储

二、Flink

由于 Spark Streaming 是基于批处理引擎的,因此它的处理延时较大,基本上为秒级延迟。因此,具有毫秒级的流处理引擎 Flink 诞生了。

Flink 从 2014 年 12 月成为 Apache 的顶级项目,近两年才逐渐走入大众视野。Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行状态计算。Flink 的特点是低延迟、高吞吐和一致性(结果的准确和良好的容错性)。

2.1、编程模型

在 Flink 中,流也被分成两类:无界流和有界限,分别对应着 Flink 中的流处理场景和批处理场景。

无界流:有开始无结束的数据流;

有界流:有开始也有结束的数据流,批处理被抽象成有界流;
image.png

2.2、窗口操作

Flink 中提供了三种窗口计算类型:滚动窗口、滑动窗口和会话窗口。
image.png
滚动窗口是将每个元素分配给具有指定窗口大小的窗口。滚动窗口有固定大小,而且不会互相重叠。一个窗口的结束意味着另一个窗口的开始。
image.png
滑动窗口将元素分配到固定长度的窗口,类似于滚动窗口的分配。窗口大小由窗口大小参数配置。滑动步长控制滑动窗口启动的频率,如果滑动步长小于窗口大小,则滑动窗口会有重叠。
image.png
会话窗口:会话窗口根据会话间隔进行窗口的划分,与滑动和滚动窗口相比,会话窗口没有重叠,也没有固定的开始和结束时间。

2.3、时间语义

Flink 提供了三种时间语义,分别是事件时间、注入时间和处理时间。
事件时间即为事件发生的时间;
image.png
注入时间是指数据从数据源进入数据处理引擎的时间;处理时间是真正进行数据处理的任务运行的机器时间

三、API和库

在API和库方面,Structured Streaming具有更丰富的功能。它基于Spark SQL构建,并提供了SQL查询和DataFrame API,这使得开发人员可以使用熟悉的SQL语言来执行流数据处理操作。此外,Structured Streaming还支持许多数据源和输出格式,包括Kafka、HDFS、S3等。

相比之下,Flink的API和库更加灵活,提供了广泛的操作符和函数,可以让开发人员自由地编写他们需要的代码。它也支持许多数据源和输出格式,但是与Structured Streaming不同的是,Flink要求用户手动实现自定义的source和sink以及操作符。

四、状态管理

Structured Streaming的状态管理相对简单,主要依赖于Spark的内存管理;当我们在处理大状态时,可能会面临性能瓶颈。
Apache Flink提供强大的状态管理功能,支持大状态和一致性快照。通过增量快照机制实现高效的状态恢复。

五、生态系统和社区支持

在生态系统和社区支持方面,Structured Streaming在Spark生态系统中占据着重要的位置,并获得了广泛的社区支持。Spark生态系统提供了许多其他组件,例如Spark MLlib、Spark GraphX等,这些组件可以与Structured Streaming集成,并扩展其功能。

相比之下,Flink的生态系统相对较小,但是它也有一定的社区支持。Flink适用于特定的场景,例如低延迟数据处理、机器学习和图形计算等。

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
2月前
|
存储 分布式计算 API
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
97 0
|
3月前
|
算法 API Apache
Flink CDC:新一代实时数据集成框架
本文源自阿里云实时计算团队 Apache Flink Committer 任庆盛在 Apache Asia CommunityOverCode 2024 的分享,涵盖 Flink CDC 的概念、版本历程、内部实现及社区未来规划。Flink CDC 是一种基于数据库日志的 CDC 技术实现的数据集成框架,能高效完成全量和增量数据的实时同步。自 2020 年以来,Flink CDC 经过多次迭代,已成为功能强大的实时数据集成工具,支持多种数据库和数据湖仓系统。未来将进一步扩展生态并提升稳定性。
679 2
Flink CDC:新一代实时数据集成框架
|
2月前
|
数据挖掘 物联网 数据处理
深入探讨Apache Flink:实时数据流处理的强大框架
在数据驱动时代,企业需高效处理实时数据流。Apache Flink作为开源流处理框架,以其高性能和灵活性成为首选平台。本文详细介绍Flink的核心特性和应用场景,包括实时流处理、强大的状态管理、灵活的窗口机制及批处理兼容性。无论在实时数据分析、金融服务、物联网还是广告技术领域,Flink均展现出巨大潜力,是企业实时数据处理的理想选择。随着大数据需求增长,Flink将继续在数据处理领域发挥重要作用。
154 0
|
5月前
|
关系型数据库 API Apache
Flink CDC:基于 Apache Flink 的流式数据集成框架
本文整理自阿里云 Flink SQL 团队研发工程师于喜千(yux)在 SECon 全球软件工程技术大会中数据集成专场沙龙的分享。
18398 11
Flink CDC:基于 Apache Flink 的流式数据集成框架
|
5月前
|
存储 算法 物联网
海量数据实时计算利器:深入探索Tec(一个假设性技术框架)
总之,Tec作为海量数据实时计算利器,在推动数字化转型、提升业务效率、保障数据安全等方面发挥着重要作用。随着技术的不断进步和应用场景的不断拓展,Tec的未来发展前景将更加广阔。
|
5月前
|
消息中间件 Java Kafka
Java中的流处理框架:Kafka Streams与Flink
Java中的流处理框架:Kafka Streams与Flink
|
7月前
|
分布式计算 Hadoop 大数据
分布式计算框架比较:Hadoop、Spark 与 Flink
【5月更文挑战第31天】Hadoop是大数据处理的开创性框架,专注于大规模批量数据处理,具有高扩展性和容错性。然而,它在实时任务上表现不足。以下是一个简单的Hadoop MapReduce的WordCount程序示例,展示如何统计文本中单词出现次数。
222 0
|
7月前
|
运维 监控 Java
面经:Storm实时计算框架原理与应用场景
【4月更文挑战第11天】本文是关于Apache Storm实时流处理框架的面试攻略和核心原理解析。文章分享了面试常见主题,包括Storm的架构与核心概念(如Spout、Bolt、Topology、Tuple和Ack机制),编程模型与API,部署与运维,以及应用场景与最佳实践。通过代码示例展示了如何构建一个简单的WordCountTopology,强调理解和运用Storm的关键知识点对于面试和实际工作的重要性。
469 4
面经:Storm实时计算框架原理与应用场景
|
7月前
|
分布式计算 大数据 数据处理
【Flink】Flink跟Spark Streaming的区别?
【4月更文挑战第17天】【Flink】Flink跟Spark Streaming的区别?
|
7月前
|
SQL API 数据处理
新一代实时数据集成框架 Flink CDC 3.0 —— 核心技术架构解析
本文整理自阿里云开源大数据平台吕宴全关于新一代实时数据集成框架 Flink CDC 3.0 的核心技术架构解析。
1356 0
新一代实时数据集成框架 Flink CDC 3.0 —— 核心技术架构解析
下一篇
DataWorks