Flink学习--知识梳理

  • 一、Flink 基本介绍

1.1 Flink介绍:

Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行状态计算。Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。

1.2 Flik的应用场景:

  1. 电商和市场营销:实时报表、广告投放、实时推荐。
  2. 物联网:实时数据采集、实时报警。
  3. 物流配送及服务:订单状态跟踪、信息推送。
  4. 银行和金融业:实时结算、风险检测。

1.3 Flink的流处理特性

  1. 支持高吞吐、低延迟、高性能的流处理
  2. 支持带有事件时间的窗口操作
  3. 支持有状态计算的Exactly-one语义
  4. 支持高度灵活的窗口操作,支持基于time、count、session、以及data-driven的窗口操作
  5. 支持具有背压功能的持续流模型
  6. 支持基于轻量级分布式快照实现的容错
  7. 一个运行时同时支持Batch on Streaming处理和Streaming处理
  8. Flink在JVM内部实现了自己的内存管理
  9. 支持迭代计算
  10. 支持程序自动优化,避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存

1.4 Flink的优势

大数据的4代计算引擎

  1. 第一代:Hadoop、MapReduce批处理 Mapper、Reducer2
  2. 第二代:DAG框架(Oozie、Tez),Tez+MapReduce批处理
  3. 第三代:Spark批处理、流处理、SQL高层API支持 自带DAG 内存迭代计算、性能较之前大幅提升
  4. 第四代:Flink批处理、流处理、SQL高层API支持 自带DAG 流式计算性能更高、可靠性更高

                                                      表 1 Flink与Spark的差异

SparkStreaming

Flink

定义

弹性的分布式数据集,并非真正的实时计算

真正的流计算,就像storm一样;但flink同时支持有限的数据流计算(批处理)

高容错

基于RDD和checkpoint,比较沉重

Checkpoint(快照),非常轻量级

内存管理

JVM相关操作暴露给用户

Flink在JVM中实现的是自己的内存管理

延时

中等100ms

低10ms

1.5 flink的四⼤基⽯

  1. checkpoint: 基于chandy-lamport算法实现分布式计算任务的⼀致性语义;
  2. state: flink中的状态机制,flflink天⽣⽀持state,state可以认为程序的中间计算结果或者是历史计算结果;
  3. time: flink中⽀持基于事件时间和处理时间进⾏计算,spark streaming只能按照process time进⾏处理;基于事件时间的计算我们可以解决数据迟到和乱序等问题。
  4. window: flink提供了更多丰富的window,基于时间,基于数量,session window,同样⽀持滚动和滑动窗⼝的计算。

1.6 Flink的流、批处理

  1. Flink将批处理视作一种特殊的流处理,Flink中的所有计算都是流式计算。
  2. Flink分别提供了面向流式处理的接口(DataStream API)和面向批处理的接口(DataSet API)

2.1 Flink的重要角色

  

     图 1 Flink角色关系图

   

JobManger处理器:

类似spark中master,负责资源申请,任务分发,任务调度执⾏,checkpoint的协调执⾏;可以搭建HA,双master。

TaskManager处理器:

类似spark中的worker,负责任务的执⾏,基于dataflflow(spark中DAG)划分出的task;与jobmanager保持⼼跳,汇报任务状态。

2.2 无界数据流与有界数据流

⽆界数据流:数据流是有⼀个开始但是没有结束;

有界数据流:数据流是有⼀个明确的开始和结束,数据流是有边界的。

Flink处理流批处理的思想是:

Flink支持的runtime(core 分布式流计算)支持的是无界数据流,但是对Flink来说可以支持批处理,只是从数据流上来说把有界数据流只是无界数据流的⼀个特例,无界数据流只要添加上边界就是有界数据流。

2.3 Flink的编程模型

Flink提供了不同的抽象级别以开发流式或者批处理应用。

         

 

                                                          图 2 Flink 编程模型

      最底层级的抽象仅仅提供了有状态流,他将通过过程函数(Process Function)被嵌入到DataStream API中。底层过程函数与DataStream API 相集成,使其可以对某些特定的操作进行底层的抽象,他允许用户可以自由地处理来自一个或者多个数据流的时间,并使用一致的容错的状态。除此之外,用户可以注册事件时间并处理时间回掉,从而使程序可以处理复杂的计算。

        实际上,大多数应用并不需要上述的底层抽象,而是针对核心API(Core API)进行编程,比如DataStream API(有界或无界流数据)以及DataSet API(有界数据集)。这些API为数据处理提供了通用的构建模块,比如由用户定义的多种形式的转换(transformations),连接(joins),聚合(aggregations),窗口操作(windows〉等等。DataSet API为有界数据集提供了额外的支持,例如循环与迭代。这些API处理的数据类型以类(classes)的形式由各自的编程语言所表示。

          Table API是以表为中心的声明式编程,其中表可能会动态变化(在表达流数据时)。Table API遵循(扩展的)关系模型:表有二维数据结构(schema)(类似于关系数据库中的表),同时API提供可比较的操作,例如select、project、join、group_by、aggregate等。Table API程序声明式地定义了什么逻辑操作应该执行,而不是准确地确定这些操作代码的看上去如何。尽管Table API可以通过多种类型的用户自定义函数(UDF)进行扩展,其仍不如核心API更具有表达能了,但是使用起来却更加简洁。除此之外,Table API程序在执行之前会经过内置优化器进行优化。

            Flink提供的最高层级的抽象是SQL。这一层抽象在语法与表达能力上与Table API类似,但是是以SQL查询表达式的形式表现程序。SQL抽象与Table API交互密切,同时SQL查询可以直接在Table API定义的表上执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

油豆皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值