Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。Flink以数据并行和流水线方式执行任意流数据程序,Flink的流水线运行时系统可以执行批处理和流处理程序。此外,Flink的运行时本身也支持迭代算法的执行。

    一, Flink的优点
    (1)同时支持高吞吐、低延迟、高性能;
    Flink 是目前唯一能同时集高吞吐、低延迟、高性能三者于一身的分布式流式数据处理框架。Apache Spark 只有高吞吐、高性能。因为Spark Stream 做不到低延迟,本质还是微批处理。Apache Storm 只有低延迟、高性能,但达不到高吞吐。
    Spark 近实时的流处理框架

    (2)支持事件事件(Event Time)概念
    (3)支持有状态计算
    (4)支持高度灵活的窗口(Window)操作
    (5)基于轻量级分布式快照实现的容错
    (6)基于JVM实现独立的内存管理
    (7)Save Points的实现

    二,Flink应用场景
    (1)实时推荐
    (2)复杂事件处理
    (3)实时欺诈检测
    (4)实时数仓与ETL
    (5)流数据分析
    (6)实时报表分析

    https://zhuanlan.zhihu.com/p/76761474
    https://codeantenna.com/a/zIBGrdgWCh

    flink架构
    Flink架构可以分为4层,包括Deploy层、Core层、API层和Library层
    image.png

    • Deploy层:该层主要涉及Flink的部署模式,Flink支持多种部署模式——本地、集群(Standalone/YARN)和云服务器(GCE/EC2)。
    • Core层:该层提供了支持Flink计算的全部核心实现,为API层提供基础服务。
    • API层:该层主要实现了面向无界Stream的流处理和面向Batch的批处理API,其中流处理对应DataStream API,批处理对应DataSet API。
    • Library层:该层也被称为Flink应用框架层,根据API层的划分,在API层之上构建的满足特定应用的实现计算框架,也分别对应于面向流处理和面向批处理两类。面向流处理支持CEP(复杂事件处理)、基于SQL-like的操作(基于Table的关系操作);面向批处理支持FlinkML(机器学习库)、Gelly(图处理)、Table 操作。

    1、watermark
    watermark是一种衡量Event Time进展的机制,它是数据本身的一个隐藏属性。通常基于Event Time的数据,自身都包含一个timestamp;
    1)作用:
    watermark是用于处理乱序事件的,通常用watermark机制结合window来实现。流处理从事件产生、到流经source、再到operator,中间是有一个过程和时间。大部分情况下,流到operator的数据都是按照事件产生的时间顺序来的,但是也不排除由于网络等原因,导致乱序的产生(out-of-order或late element)。对于late element,我们又不能无限期的等下去,必须要有个机制来保证一个特定的时间后,必须触发window去进行计算了。这个机制就是watermark。

    2、 CheckPoint
    (2.1)概述
    为了保证State的容错性,Flink需要对State进行CheckPoint。CheckPoint是Flink实现容错机制的核心功能,它能够根据配置周期性地基于Stream中各个Operator/Task的状态来生成快照,从而将这些状态数据定期持久化存储下来。Flink程序一旦意外崩溃,重新运行程序时可以有选择地从这些快照进行恢复,从而修正因为故障带来的程序数据异常。
    (2.2)使用说明
    1)Checkpoint 在默认的情况下仅用于恢复失败的作业,并不保留,当程序取消时 checkpoint 就会被删除。
    2) 默认情况下,CheckPoint功能是Disabled(禁用)的,使用时需要先开启它。
    (2.3)目录结构
    checkpoint 由元数据文件、数据文件(与 state backend 相关)组成。可通过配置文件中 “state.checkpoints.dir” 配置项来指定元数据文件和数据文件的存储路径,另外也可以在代码中针对单个作业特别指定该配置项。

    3、Flink基本组件
    Flink中提供了3个组件,包括DataSource、Transformation和DataSink。

    • DataSource:表示数据源组件,主要用来接收数据,目前官网提供了readTextFile、socketTextStream、fromCollection以及一些第三方的Source。
    • Transformation:表示算子,主要用来对数据进行处理,比如Map、FlatMap、Filter、Reduce、Aggregation等。
    • DataSink:表示输出组件,主要用来把计算的结果输出到其他存储介质中,比如writeAsText以及Kafka、Redis、Elasticsearch等第三方Sink组件。因此,想要组装一个Flink Job,至少需要这3个组件。

    即Flink Job=DataSource+Transformation+DataSink sink表示下沉,state表示状态