Flink 简介
Flink 官网主页地址:https://flink.apache.org
Flink 官方中文地址:https://nightlies.apache.org/flink/flink-docs-stable/zh/
1、Flink是什么
Flink 核心目标,是 “数据流上的有状态计算” (Stateful Computations over Data Streams)。
具体说明:Apache Flink 是一个 框架 和 分布式处理引擎,用于对 无界 和 有界 数据流进行 有状态计算。
有界流与无界流
- 无界数据流
- 有定义流的开始,但没有定义流的结束
- 它们会无休止的产生数据
- 无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理,因为输出是无限的
- 有界数据流
- 有定义流的开始,也有定义流的结束
- 有界流可以在摄取所有数据后再进行计算
- 有界流所有数据可以被排序,所以并不需要有序摄取
- 有界流数据通常被称为批处理
有状态流处理
把流处理需要的 **额外数据保存成一个”状态”**,然后针对这条数据进行处理,并且 更新状态。这就是所谓的 **”有状态流处理”**。
状态在内存中:
- 优点:速度快
- 缺点:可靠性差
状态在分布式系统中:
- 优点:可靠性高
- 缺点:速度慢
2、Flink 发展历史
Flink 起源于一个叫做 Stratosphere 的项目,它是由 3 所地处柏林的大学和欧洲其他一些大学在 2010~2014 年共同进行的研究项目,由 柏林理工大学的教授沃克尔·马尔科(Volker Markl)领衔开发。2014 年 4 月,Stratosphere 的代码被复制并捐赠给了 Apache 软件基金会,Flink 就是在此基础上被重新设计出来的。
在德语中,”flink” 一次表示 “快速、灵巧“。项目的 logo 是一只彩色的松鼠。
- 2014 年 08 月,Flink 第一个版本 0.6 正式发布,与此同时 Flink 的几位核心开发者创办 Data Artisans 公司
- 2014 年 12 月,Flink 项目完成孵化
- 2015 年 04 月,Flink 发布了里程碑式的重要版本0.9.0
- 2019 年 01 月,长期对 Flink 投入研发的阿里巴巴,以 9000 万欧元的价格收购了 Data Artisans 公司
- 2019 年 08 月,阿里巴巴将内部版本 Blink 开源,合并入 Flink 1.9.0 版本
3、Flink 特点
Flink 处理数据的目标是:低延迟、高吞吐、结果的准确性和良好的容错性。
Flink 主要特点如下:
- 高吞吐和低延迟。每秒处理数百万个事件,毫秒级延迟。
- 结果的准确性。Flink 提供了 事件时间(event-time)和处理时间(processing-time)语义。对于乱序事件流,事件时间语义仍然能提供一致且准确的结果。
- 精准一次(exactly-once)的状态一致性保证。
- 可以连接到最常用的存储系统,如 Kafka、Hive、JDBC、HDFS、Redis 等
- 高可用。本身高可用的设置,加上与 K8s,YARN 和 Mesos 的紧密集成,再加上从故障中快速恢复和动态扩展任务的能力,Flink 能做到以极少的停机时间 7X24 全天候运行。
4、Flink vs SparkStreaming
Spark 以批处理为根本
- Spark 数据模型:Spark 采用 RDD 模型,Spart Streaming 的 DStream 实际上也就一组组小批数据 RDD 的集合
- Spark 运行时架构:Spark 是批计算,将 DAG 划分为不同的 stage,一个完成后才可以计算下一个
Flink与流处理为根本
- Flink 数据模型:Flink 基本数据模型是 数据流,以及事件(Event)排序
- Flink 运行时架构:Flink 是标准的流执行模式,一个事件在一个节点处理完成后可以直接发往下一个节点进行处理
Flink 和 Streaming 对比:
Flink | Streaming | |
---|---|---|
计算模型 | 流计算 | 微批处理 |
时间语义 | 事件事件、处理时间 | 处理时间 |
窗口 | 多、灵活 | 少、不灵活(窗口必须是批次的整数倍) |
状态 | 有 | 没有 |
流式SQL | 有 | 没有 |
5、Flink 的应用场景
Flink在国内各个企业中大量使用。一些行业中的典型应用有:
- 电商和市场营销
- 举例:实时数据报表、广告投放、实时推荐
- 物联网(IOT)
- 举例:传感器实时数据采集和显示、实时报警、交通运输业
- 物流配送和服务业
- 举例:订单状态实时更新、通知信息推送
- 银行和金融业
- 举例:实时结算和通知推送,实时检测异常行为
6、Flink 分层 API
- 越底层越抽象,表达含义越简明,使用越方便
- 越底层越具体,表达能力越丰富,使用越灵活
- 有状态流处理:通过底层 API(处理函数),对最原始数据加工处理。底层 API 与 DataStream API 相集成,可以处理复杂的计算。
- DataStream API(流处理)和 DataSet API(批处理) 封装了底层处理函数,提供了通用的模块,比较转换(transformations,包括 map、flatmap 等)连接(joins),聚合(aggregations),窗口(windows)操作等。注意:Flink1.12 以后,DataSteam API 已经实现真正的流批一体,所以 DataSet API已经过时。
- Table API 是以表为中心的声明式编程,其中表可能会动态变化。Table API 遵循关系模型:表有二位数据结构,类似于关系数据库中的表;同时 API 提供可比较的操作,例如(select、project、join、group-by、aggregate)等。我们可以在表与DataStream/DataSet 之间无缝切换,以允许程序将 Table API 与 DataStream 以及 DataSet 混合使用。
- SQL 这一层在语法与表达能力上与 Table API 类似,但是是以 SQL 查询表达式的形式表达程序。SQL 抽象与 Table API 交互密切,同时 SQL 查询可以直接在 Table API 定义的表上执行。
Flink 简介
https://flepeng.github.io/044-Flink-00-简介-Flink-简介/