flink介绍
flink概述
flink中的批和流
****批处理的特点****是有界、持久、大量,非常适合需要访问全部记录才能完成的计算工作,一般用于离线统计。
****流处理的特点****是无界、实时, 无需针对整个数据集执行操作,而是对通过系统 传输的每个数据项执行操作,一般用于实时统计。
而在Flink中,一切都是由流组成的,Flink认为有界数据集是无界数据流的一种特例,离线数据是有界限的流,实时数据是一个没有界限的流,这就是所谓的有界流和无界流。
****无界流:****意思很明显,只有开始没有结束。必须连续的处理无界流数据,也即是在事件注入之后立即要对其进行处理。不能等待数据到达了再去全部处理,因为数据是无界的并且永远不会结束数据注入。处理无界流数据往往要求事件注入的时候有一定的顺序性,例如可以以事件产生的顺序注入,这样会使得处理结果完整。
****有界********数据集********:****也即是有明确的开始和结束的定义。有界流可以等待数据全部注入完成了再开始处理。注入的顺序不是必须的了,因为对于一个静态的数据集,我们是可以对其进行排序的。有界流的处理也可以称为批处理。
Flink流处理特性
- 支持****高吞吐、低延迟、高性能****的流处理
- 支持带有事件时间的****窗口(Window)****操作
- 支持有状态计算的****Exactly-once****语义
- 支持高度灵活的窗口(Window)操作,支持基于****time、count、session,以及data-driven****的窗口操作
- 支持具有****Backpressure****功能的持续流模型(自动降速Source)
- 支持基于轻量级****分布式快照(Snapshot)****实现的容错
- 一个运行时同时支持****Batch on Streaming*处理和*Streaming****处理
- Flink在JVM内部实现了自己的****内存管理****
- 支持迭代计算
- 支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存
Flink的优势
-
同时支持高吞吐、低延迟、高性能
-
支持事件时间(Event Time)概念
-
支持有状态计算
-
支持高度灵活的窗口(Window)操作
-
基于轻量级分布式快照(Snapshot)实现的容错
-
基于 JVM 实现的独立的内存管理
-
Save Points 保存点
-
flink应用场景
阿里在Flink的应用主要包含四个模块:
- l 实时监控:
- 用户行为预警、app crash 预警、服务器攻击预警
- 对用户行为或者相关事件进行实时监测和分析,基于风控规则进行预警
- l 实时报表:
- 双11、双12等活动直播大屏
- 对外数据产品:生意参谋等
- 数据化运营
- l 流数据分析:
- 实时计算相关指标反馈及时调整决策
- 内容投放、无线智能推送、实时个性化推荐等
- l 实时仓库:
- 数据实时清洗、归并、结构化
- 数仓的补充和优化
性能比较
首先,我们可以通过下面的性能测试初步了解两个框架的性能区别,它们都可以基于内存计算框架进行实时计算,所以都拥有非常好的计算性能。经过测试,Flink计算性能上****略好****。
-
l 测试环境:
- CPU:7000个;
- 内存:单机128GB;
- 版本:Hadoop 2.3.0,Spark 1.4,Flink 0.9
- 数据:800MB,8GB,8TB;
- 算法:K-means:以空间中K个点为中心进行聚类,对最靠近它们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。
- 迭代:K=10,3组数据
-
测试结果:
纵坐标是秒,横坐标是次数
:K=10,3组数据
-
测试结果:
纵坐标是秒,横坐标是次数
[外链图片转存中…(img-De3M6oet-1650109155992)]
Spark和Flink全部都运行在Hadoop YARN上,性能为Flink > Spark > Hadoop(MR),迭代次数越多越明显,性能上,Flink优于Spark和Hadoop