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 是一个 框架分布式处理引擎,用于对 无界有界 数据流进行 有状态计算

有界流与无界流

  1. 无界数据流
    • 有定义流的开始,但没有定义流的结束
    • 它们会无休止的产生数据
    • 无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理,因为输出是无限的
  2. 有界数据流
    • 有定义流的开始,也有定义流的结束
    • 有界流可以在摄取所有数据后再进行计算
    • 有界流所有数据可以被排序,所以并不需要有序摄取
    • 有界流数据通常被称为批处理

有状态流处理

把流处理需要的 **额外数据保存成一个”状态”**,然后针对这条数据进行处理,并且 更新状态。这就是所谓的 **”有状态流处理”**。

状态在内存中:

  • 优点:速度快
  • 缺点:可靠性差

状态在分布式系统中:

  • 优点:可靠性高
  • 缺点:速度慢

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在国内各个企业中大量使用。一些行业中的典型应用有:

  1. 电商和市场营销
    • 举例:实时数据报表广告投放、实时推荐
  2. 物联网(IOT)
    • 举例:传感器实时数据采集和显示、实时报警、交通运输业
  3. 物流配送和服务业
    • 举例:订单状态实时更新、通知信息推送
  4. 银行和金融业
    • 举例:实时结算和通知推送,实时检测异常行为

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-简介/
作者
Lepeng
发布于
2021年3月8日
许可协议