Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,提供支‌‌‍‍‍‌‍‌‍‌‍‌‍‍‍‍‌‍‍‍‍‍‍‌‍‍‍‍‍‍‍‍‌‍‍‍‍‍‍‍‍‌‍‌‍‌‍‌‌‍‍‍‍‍‍‍‍‍‍‌‍‌‍‍‌‍‍‍‍‌‍‍‍‌‍‌‍‍‍‌‌‍‍‍‍‍‍‌‍‍‍‌‍‌‍‍‌‍‍‍‍‍‍‌‍‌‍‍‍‍‍‍‌‍‍‍‍‍‍‌‍‍‍‌‍‌‍‌‌‍‍‍‍‍‍‍‍‌‍‍‍‌‍‌‌‍‍‍‍‌‍‌‍‌‍‌‍‌‌‍‍‍‍‌‍‌‍‍‍‍‍‌‍‍‌‍‍‍‍‌‍‌‍‍‍‌‍‌‍‌‌‍‍‍‍‍‍‍‍‌‍‍‍‌‍‍‌‍‍‍‍‍‍‌‍‍‍‌‍‌‍‍‌‍‍‍‍‌‍‌‍‌‍‍‍‍‍‍‌‍‍‍‍‌‍‌‍‌‍‌‍‌‌‍‍‍‍‍‍‌‍‍‍‌‍‌‍‌‌‍‍‍‍‍‍‍‍‌‍‍‍‌‍‌‌‍‍‍‍‍‍‍‍‌‍‍‍‌‍‌‌‍‍‍‍‍‍‍‍‌‍‌‍‌‍‌‌‍‍‍‍‍‍‍‍‌‍‌‍‍‍‍‌‍‍‍‍‍‍‍‍‌‍‍‍‌‌‍‍‍‍‌‍‍‍‍‍‍‍‍‌‍‍‍‍‌‍‍‍‍‍‍‍‍‌‍‍‍‍‍‍‌‍‍‍‍‍‌‍‍‌‍‍‍‍‍‍‌‍‍‍‌‍‌‍‌‌‍‍‍‍‍‍‍‍‌‍‍‍‌‍‍‌‍‍‍‍‍‍‌‍‍‍‌‍‌‍‍‌‍‍‍‍‍‍‌‍‌‍‍‍‍‍‍‌‍‍‍‍‌‍‍‍‍‍‍‍‌‌‍‍‍‍‍‍‍‍‌‍‍‍‌‍‌‌‍‍‍‍‍‍‌‍‍‍‍‍‍‍‍‌‍‍‍‍‍‍‍‍‌‍‌‍‌‍‌‌‍‍‍‍‌‍‌‍‌‍‌‍‌‌‍‍‍‍‍‍‌‍‌‍‌‍‍‌‍‍‍‍‍‍‌‍‍‍‍‍‌‌‍‍‍‍‍‍‌‍‌‍‌‍‌‌‍‍‍‍‍‍‌‍‍‍‍‍‌‌‍‍‍‍‍‍‍‍‌‍‌‍‌‌‍‍‍‍‍‍‌‍‌‍‌‍‌‌‍‍‍‍‍‍‌‍‌‍‌‍‌‌‍‍‍‍‍‍‌‍‌‍‌‍‌‌‍‍‍‍‍‍‌‍‌‍‍‍‍‌‍‍‍‍‍‍‍‍‌‍‌‍‌‌‍‍‍‍‌‍‍‍‍‍‍‍‌‌‍‍‍‍‍‍‍‍‌‍‌‍‌‌‍‍‍‍‍‍‍‍‌‍‌‍‌‌‍‍‍‍‍‍‍‍‌‍‌‍‌‌‍‍‍‍‍‍‌‍‌‍‌‍‌‌‍‍‍‍‍‍‌‍‌‍‌‍‌‌‍‍‍‍‍‍‌‍‍‍‌‍‌‌‍‍‍‍‍‍‌‍‍‍‌‍‍‌‍‌‌持流处理和批处理两种类型应用的功能

Flink是什么

  • Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,提供支持流处理和批处理两种类型应用的功能
  • Apache Flink 的前身是柏林理工大学一个研究性项目, 在 2014 被 Apache 孵化器所接受,然后迅速地成为了Apache Software Foundation的顶级项目之一
  • 代码主要由Java实现,部分代码是Scala
  • Flink主要处理的场景就是流数据,批处理只是流数据的一个极限特例

数据类型

有界流(bounded stream) 批量数据

  • 有界流有定义流的开始,也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序,所以并不需要有序摄取。有界流处理通常被称为批处理。
  • 有界流通常被称为有界数据集,数据的特点为有限不会改变的数据集合

常见的有界流

  • T+1的销售数据
  • 11月的汽车销售数量
  • 2018年全国电影票房

无界流(unbounded stream) 实时数据

  • 有定义流的开始,但没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理,因为输入是无限的,在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取数据,例如事件发生的顺序,以便能够推断结果的完整性。
  • 无界流通常被称为无穷数据集,数据的特点为无穷集成的数据集合

常见的无界流

  • 用户与客户断的实时交互数据
  • 应用时产生的日志
  • 金融市场的实时交易记录

有界流和无界流

数据运算模型

流式计算

  • 只要数据一直在产生,计算就持续的进行
  • 处理无界数据集

    批处理

  • 在预定义的时间内运行计算,当计算完成时释放计算机资源
  • 处理有界数据集

Flink组件栈

Deploy

本地 Local

  • 一个Java虚拟机 Single JVM(IDE中直接运行)

    集群 Cluster

  • Standalone(start-cluster.sh)
  • YARN
  • MESOS
  • K8s

    云 Cloud

  • GCE google
  • AWS/EC2 amazon
  • MapR
  • Aliyun

Program Code

  • Flink应用程序代码

    Job Client

  • 任务执行起点,负责接受用户的程序代码、创建数据流、提交数据流给Job Manager、返回结果

    Job Manager

  • 作业管理器协调管理程序

    Task Manager

  • 从Job Manager接受需要部署的Task

Runtime

Runtime层提供了支持Flink计算的全部核心实现,比如:支持分布式Stream处理、JobG‌‌‍‍‍‌‍‌‍‌‍‌‍‍‍‍‌‍‍‍‍‍‍‌‍‍‍‍‍‍‍‍‌‍‍‍‍‍‍‍‍‌‍‌‍‌‍‌‌‍‍‍‍‍‍‍‍‍‍‌‍‌‍‍‌‍‍‍‍‌‍‍‍‌‍‌‍‍‍‌‌‍‍‍‍‍‍‌‍‍‍‌‍‌‍‍‌‍‍‍‍‍‍‌‍‌‍‍‍‍‍‍‌‍‍‍‍‍‍‌‍‍‍‌‍‌‍‌‌‍‍‍‍‍‍‍‍‌‍‍‍‌‍‌‌‍‍‍‍‌‍‌‍‌‍‌‍‌‌‍‍‍‍‌‍‌‍‍‍‍‍‌‍‍‌‍‍‍‍‌‍‌‍‍‍‌‍‌‍‌‌‍‍‍‍‍‍‍‍‌‍‍‍‌‍‍‌‍‍‍‍‍‍‌‍‍‍‌‍‌‍‍‌‍‍‍‍‌‍‌‍‌‍‍‍‍‍‍‌‍‍‍‍‌‍‌‍‌‍‌‍‌‌‍‍‍‍‍‍‌‍‍‍‌‍‌‍‌‌‍‍‍‍‍‍‍‍‌‍‍‍‌‍‌‌‍‍‍‍‍‍‍‍‌‍‍‍‌‍‌‌‍‍‍‍‍‍‍‍‌‍‌‍‌‍‌‌‍‍‍‍‍‍‍‍‌‍‌‍‍‍‍‌‍‍‍‍‍‍‍‍‌‍‍‍‌‌‍‍‍‍‌‍‍‍‍‍‍‍‍‌‍‍‍‍‌‍‍‍‍‍‍‍‍‌‍‍‍‍‍‍‌‍‍‍‍‍‌‍‍‌‍‍‍‍‍‍‌‍‍‍‌‍‌‍‌‌‍‍‍‍‍‍‍‍‌‍‍‍‌‍‍‌‍‍‍‍‍‍‌‍‍‍‌‍‌‍‍‌‍‍‍‍‍‍‌‍‌‍‍‍‍‍‍‌‍‍‍‍‌‍‍‍‍‍‍‍‌‌‍‍‍‍‍‍‍‍‌‍‍‍‌‍‌‌‍‍‍‍‍‍‌‍‍‍‍‍‍‍‍‌‍‍‍‍‍‍‍‍‌‍‌‍‌‍‌‌‍‍‍‍‌‍‌‍‌‍‌‍‌‌‍‍‍‍‍‍‌‍‌‍‌‍‍‌‍‍‍‍‍‍‌‍‍‍‍‍‌‌‍‍‍‍‍‍‌‍‌‍‌‍‌‌‍‍‍‍‍‍‌‍‍‍‍‍‌‌‍‍‍‍‍‍‍‍‌‍‌‍‌‌‍‍‍‍‍‍‌‍‌‍‌‍‌‌‍‍‍‍‍‍‌‍‌‍‌‍‌‌‍‍‍‍‍‍‌‍‌‍‌‍‌‌‍‍‍‍‍‍‌‍‌‍‍‍‍‌‍‍‍‍‍‍‍‍‌‍‌‍‌‌‍‍‍‍‌‍‍‍‍‍‍‍‌‌‍‍‍‍‍‍‍‍‌‍‌‍‌‌‍‍‍‍‍‍‍‍‌‍‌‍‌‌‍‍‍‍‍‍‍‍‌‍‌‍‌‌‍‍‍‍‍‍‌‍‌‍‍‍‌‌‍‍‍‍‍‍‌‍‌‍‍‍‌‌‍‍‍‍‍‍‌‍‍‍‍‍‌‌‍‍‍‍‍‍‌‍‌‍‍‍‍‌‍‌‌raph到ExecutionGraph的映射、调度等等,为上层API层提供基础服务

API&Libaries

核心APIs

  • DataSet API:批处理,处理有界的数据集
  • DataStream API:流式处理,处理有界或无界的数据集

    Table API

  • 以表为中心声明的DSL
  • select、project、join、group-by、aggregate操作
  • 支持与DataStream/DataSet混合使用

    SQL

  • Flink提供的最高级抽象
  • 支持与DataStream/DataSet混合使用

    面向批处理的Lib

  • FlinkML 机器学习
  • Gelly 图处理

    面向流处理的类库

  • CEP 复杂事件处理
  • SQL-Like Table的关系操作

    Flink的基本编程模型

Source 数据输入

  • 基于文件
  • 基于本地集合
  • 基于网络套接字
  • 自定义:Apache Kafka、RabbitMQ

    Transformation 数据转换

  • Map、FlatMap、Filter、Reduce、Window

    Sink 数据输出

  • 写文件
  • 打印
  • socket
  • 自定义:Apache Kafka、HDFS、MySQL

大数据框架对比(流式/实时数据处理)

大数据Lamdba框架

评论