Chiriri's blog Chiriri's blog
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)

Iekr

苦逼后端开发
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)
  • Hadoop

  • Zookeeper

  • Hive

  • Flume

  • Kafka

  • Azkaban

  • Hbase

  • Scala

  • Spark

  • Flink

    • Flink 简介
      • 初识 Flink
      • 为什么选择 Flink
      • 哪些行业需要处理流数据
      • 传统数据处理架构
      • 有状态的流式处理
      • 流处理的演变
      • Flink 的主要特点
      • Flink 的其它特点
      • Flink 支持的时间
      • Flink vs Spark Streaming
    • Flink 部署
    • Flink 运行架构
    • Flink 流处理 API
    • Flink 中的 Window
    • Flink 时间语义与 Wartermark
    • ProcessFunction API
  • 离线数仓

  • 青训营

  • DolphinScheduler

  • Doris

  • 大数据
  • Flink
Iekr
2022-11-27
目录

Flink 简介

# Flink 简介

# 初识 Flink

  • Google: Google File System; BigTable; MapReduce
  • Apache: HDFS; HBase; Hadoop

Apache Beam 写一套代码,可以运行在 Spark 和 Flink 的引擎上面

image-20221127200014430

Apache Flink is a framework and distributed processing engine for stateful computations over unbounded and bounded data streams.

Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行状态计算。

# 为什么选择 Flink

  • 流数据更真实地反映了我们的生活方式
  • 传统的数据架构是基于有限数据集的
  • 我们的目标
    • 低延迟(Spark Streaming 的延迟是秒级,Flink 延迟是毫秒级)
    • 高吞吐(阿里每秒钟使用 Flink 处理 4.6PB,双十一大屏)
    • 结果的准确性和良好的容错性(exactly-once)

# 哪些行业需要处理流数据

  • 电商和市场营销
    • 数据报表、广告投放、业务流程需要
  • 物联网(IOT)
    • 传感器实时数据采集和显示、实时报警,交通运输业(自动驾驶)
  • 电信业
    • 基站流量调配
  • 银行和金融业
    • 实时结算和通知推送,实时检测异常行为(信用卡盗卡)

# 传统数据处理架构

  • 事务处理(OLTP) image-20221127201604524

  • 分析处理(Hive) MySQL -> Sqoop -> Hive

    • 将数据从业务数据库复制到数仓,再进行分析和查询(解耦)

    image-20221127201753638

# 有状态的流式处理

image-20221127202022540

  • 无状态的流式处理:Apache Kafka,不保存状态,FIFO 开窗口操作,缓存一段时间的数据的 offset
  • 幂等性:无状态的,函数内部不保存状态
  • 全局变量:有状态的
  • web app 的 session,有状态

函数式编程,要求尽量无状态,纯函数(没有副作用)(如一些 IO 操作,分配内存)

纯函数:输入不变,无论运行多少次,输出都不变相当于幂等性

# 流处理的演变

  • lambda 架构(批处理 + 流处理,由 Twitter 提出) Do not Repeat Yourself:DRY

    • 用两套系统,同时保证低延迟和结果准确
      • 批处理:保证结果的准确性
      • 流处理:保证低延迟

    image-20221127202713408

为何选择 Flink

image-20221127205440891

事件时间,数据湖,实时数仓,docker,k8s

# Flink 的主要特点

  • 事件驱动(Event-driven) image-20221127203741114 spark streaming 是 event-driven 吗?micro-batch 来一条数据(事件),触发一次算子的计算,才算事件驱动 后端的事件驱动的代表:netty,akka,goroutine,协程... Spark SQL,Spark RDD

    前端:RxJs

  • 基于流的世界观(流 / 批统一)

    • 在 Flink 的世界观中,一切都是由流组成的,离线数据是有界的流; 实时数据是一个没有界限的流:这就是所谓的有界流和无界流

    image-20221127211415703

  • 分层 API

    • 越顶层越抽象,表达含义越简明,使用越方便
    • 越底层越具体,表达能力越丰富,使用越灵活

    image-20221127211558143

# Flink 的其它特点

  • 支持事件时间(event-time)和处理时间(processing-time)语义
  • 精确一次(exactly-once)的状态一致性保证
  • 低延迟,每秒处理数百万个事件,毫秒级延迟(实际上就是没有延迟)
  • 与众多常用存储系统的连接(ES,HBase,MySQL,Redis...)
  • 高可用(Zookeeper),动态扩展,实现 7*24 小时全天候运行

# Flink 支持的时间

  • 事件时间:事件真实发生的时间,要求数据中包含时间戳
  • 处理时间:事件到达节点时当前节点的机器时间

spark streaming 只支持处理时间(机器时间) flink 支持事件时间和处理时间


Log file 第一个事件:2019 年 1 月 1 日 00:00:01 第二个事件:2019 年 1 月 2 日 00:00:01 数据计算程序运行时间:2020 年 6 月 8 日 - 10:15:00

滚动窗口:大小是 1 分钟

spark streaming:[2020-06-08:10:15,2020-06-08:10:16]
Flink: [2019-01-01:00:00:00,2019-01-01:00:01:00][2019-01-02:00:00:00,2019-01-02:00:01:00]
1
2

# Flink vs Spark Streaming

  • 流(stream)和微批 (micro-batching:500msx 整数倍) image-20221127212330303

    image-20221127212337286

    stream:1->map(r=>r+1)->1+1=2
    mini-batch:rdd(1,2,3)->map(r=>r+1)->rdd(2,3,4)
    
    1
    2
  • 数据模型

    • spark 采用 RDD 模型,spark streaming 的 DStream 实际上也就是一组 组小批数据 RDD 的集合
    • flink 基本数据模型是数据流,以及事件(Event)序列 (Int、String、Long、Case Class)
  • 运行时架构

    • spark 是批计算,将 DAG 划分为不同的 stage,一个 stage 完成后才可以计算下一个 stage
    • flink 是标准的流执行模式,一个事件在一个节点处理完后可以直接发往下一个节点进行处理

image-20221127212809830

编辑 (opens new window)
上次更新: 2023/12/06, 01:31:48
SparkSQL
Flink 部署

← SparkSQL Flink 部署→

最近更新
01
k8s
06-06
02
进程与线程
03-04
03
计算机操作系统概述
02-26
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Iekr | Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式