searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

初识分布式实时处理引擎—Flink_01

2023-07-25 10:26:38
26
0

第一章 Flink简介

1.1 什么是Flink

Flink是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态计算,可部署再各种集群环境,对各种大小的数据规模进行快速计算

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

为什么要选择Flink?

  1. 流数据更真是的反映了我们的生活方式
  2. 传统的数据架构是基于有限数据集的
  3. 我们的目标是 低延迟 高吞吐 结果的准确性和良好的容错性

1.2 Flink的特点

  1. 批流统一
  2. 支持高吞吐,低延迟,高性能的流处理
  3. 支持带有事件时间的窗口(Window)操作
  4. 支持有状态计算的Exactly-once语义 ----- 精确一次性语义
  5. 支持高度灵活的窗口操作,支持基于time,count,session窗口操作
  6. 只是具有Backpressure(倍压)功能的持续流模型
  7. 支持基于轻量级分布式快照(snapshot)实现的容错
  8. 支持迭代计算
  9. 支持在JVM内部实现自己的内存管理上
  10. 支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存

主要特点:

  1. 事件驱动
  2. 基于流的世界观
  3. 分层API
  4. 支持多种时间语义
  5. Exactly Once的状态一次性保证(出现故障也能保证数据正确)
  6. 低延迟大吞吐量
  7. 高可用 动态扩展

1.3 Flink解析

Core(核心):

Filnk的核心core是Runtime(最重要的)

Deploy(Flink的部署模式)

Local模式 : 适用于本地开发和测试环境,占用资源较少

原理:主节点JobManager(Master)和从节点TaskManager(Slave)在一台机器上模拟

1、Flink程序由JobClient进行提交

2、JobClient将任务提交给JobManager

3、JobManager只负责协调分配资源和分发任务,资源分配完成后将任务提交给相应的TaskManager

4、TaskManager启动一个线程开始执行任务,TaskManager会向JobManager报告状态的变更,

例如:开始执行、正在执行、执行完成

5、作业执行完成后,结果将发送回客户端(JobClient)

Standalone Cluster模式 : 需要在集群中完成 至少需要3台主机 一个master和两个worker节点

原理:node1作为主节点JobManager(master),node1、node2、node3作为从节点TaskManager(Slave)

1、client客户端提交任务给JobManager

2、JobManager负责申请分配任务所需资源并管理任务任务和资源

3、JobManager分发任务给TaskManager执行

4、TaskManager定期向JobManager汇报状态

Standalone-HA高可用集群模式

原理:

Standalone只有一个主节点,由于主节点负责调度和分配资源,如果主节点出现意外情况(例如宕机),集群就死掉了

但是Standalone-HA高可用集群会有多个主节点,他们都会想zookeeper注册并创建一个临时节点

(一个处于active活跃(工作状态)状态,其他处于standby状态,也就是应急状态),

如果活跃状态的主机出现意外和zookeeper心跳检测超时,临时节点就会被删除,

zookeeper就会从处于standby状态的节点选一个新的主节点,删除standby的临时节点添加active的临时节点

YARN模式 : 使用YARN进行调度

原理:

1、Client上传Flink的jar包和配置文件到HDFS集群上

2、Client向Yarn的ResourceManager提交任务和申请资源

3、ResourceManager分配Container资源并启动ApplicationMaster

4、ApplicationMaster加载Flink的jar包和配置文件构建环境启动Flink-JobManager

5、ApplicationMaster向ResourceManager申请任务资源,

6、NodeManager加载Flink的jar包和配置文件构建环境并启动TaskManager

7、TaskManager启动后会向JobManager发送心跳,并等待JobManager向其分配任务

Flink On Yarn模式也存在两种模式

Session模式(适合小任务使用) 和 Per-Job模式(适合使用大任务,且资源充足)

Session模式 :(小规模,执行时间短)

  1. 需要先申请资源,启动JobManager和TaskManager
  2. 不需要每次提交任务再去申请资源,而是使用已经申请好的资源,从而提高执行效率
  3. 任务提交完资源不会被释放,因此一直会占用资源
  4. 共享Dispatcher和Resource Manager

Per-Job模式 :(执行时间较长的大作业)

  1. 每次提交任务都需申请资源,申请资源需要时间,所有影响执行效率(但是在大数据面前都是小事)
  2. 每次执行完任务资源就会立刻被释放,不会占用资源
  3. 独享Dispatcher和Resource Manager

API&Libraries

  1. DataStream API 流计算
  2. DataSet API 批处理
  3. Table 前提是
  4. Gelly 图计算

1.4 Filnk编程模型

编程模型:

Flink提供了不同级别的编程抽象,通过调用抽象的数据集调用算子构建DataFlow就可以实现对分布式的数据进行流式计算和离线计算,DataSet是批处理的抽象数据集,DataStream是流式计算的抽象数据集,他们的方法都分别为Source、Transformation、Sink

Source :主要负责数据的读取 添加数据源 可以是文件,网络数据流,MySQL

Transformation: 主要负责对数据的转换操作(数据转换,数据处理),比如WordCount里的处理逻辑

Sink : 负责最终计算好的结果数据输出 将处理好的结果,输出(或下沉)到目标系统,

Java在堆内存中实际上new ArrayList 实际上存储的是真正的集合

Scala或Flink在堆内存中new DataStream<Integer> 装的实际上是描述信息,是一个抽象数据集

main{
//可以对抽象数据集进行编程
 //Source
    val lines:DataStream  = env.socketTextStream("localhost",8888)
        
 //调用Transformation(s)
        val words:DataStream = lines.flatMap(_.split(","))
 //调用Sink
        words.print()

}

Source 实际上并不存数据,装的是描述信息

Transformation 也不存数据, 实际上装的是计算逻辑 调用了什么方法,写了什么函数

开发者感觉像是写了一个单机程序,但是实际上生成了DataFlowGraph 会提交到集群中执行 集群中的JobManager会将DataFlowGraph进行解析,然后根据提交并行度,生成subTask(类的实例,flink最小的任务执行单元),JobManager将多个subTask 通过网络流发送给TaskManager,subTask在TaskManager中的槽中工作,进入槽中,就不出去了

1.5 Flink运行时的组件

JobManager: 作业管理器(一个)

控制一个应用程序的主进程,也就是说,每个应用程序都会被一个不同的JobManager所控制执行

JobManager会向资源管理器ResourceManager请求执行任务必要的资源,也就是任务管理器TaskManager上的插槽slot,一旦获取到足够的资源,就会将执行图分发到真正运行它们的TaskManager上.运行过程中,JobManager会负责所有需要中央协调的操作,比如检查点checkpoints的协调

TaskManager: 任务管理器(多个)

在Flink的工作进程中,通常会由多个TaskManager运行,每一个TaskManager都包含了一定数量的插槽(slots),插槽的数量限制了TaskManager能够执行的任务数量

启动后,TaskManager会向资源管理器注册它的插槽;收到资源管理器的指令后,TaskManager会将一个或多个插槽提供给JobManager调用,JobManager就可以向插槽分配任务tasks来执行

执行过程中,一个TaskManager可以跟其他运行同一应用程序的TaskManager交互数据(轮询)

ResourceManager: 资源管理器

主要负责管理TaskManager的插槽slot,插槽是Flink中国定义的处理资源单元

Dispacher: 分发器

当一个应用被提交执行时,分发器就会启动并将应用交给一个JobManager

可能不是必须的,取决于应用提交运行的方式

 

0条评论
作者已关闭评论
D****m
2文章数
0粉丝数
D****m
2 文章 | 0 粉丝
D****m
2文章数
0粉丝数
D****m
2 文章 | 0 粉丝
原创

初识分布式实时处理引擎—Flink_01

2023-07-25 10:26:38
26
0

第一章 Flink简介

1.1 什么是Flink

Flink是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态计算,可部署再各种集群环境,对各种大小的数据规模进行快速计算

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

为什么要选择Flink?

  1. 流数据更真是的反映了我们的生活方式
  2. 传统的数据架构是基于有限数据集的
  3. 我们的目标是 低延迟 高吞吐 结果的准确性和良好的容错性

1.2 Flink的特点

  1. 批流统一
  2. 支持高吞吐,低延迟,高性能的流处理
  3. 支持带有事件时间的窗口(Window)操作
  4. 支持有状态计算的Exactly-once语义 ----- 精确一次性语义
  5. 支持高度灵活的窗口操作,支持基于time,count,session窗口操作
  6. 只是具有Backpressure(倍压)功能的持续流模型
  7. 支持基于轻量级分布式快照(snapshot)实现的容错
  8. 支持迭代计算
  9. 支持在JVM内部实现自己的内存管理上
  10. 支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存

主要特点:

  1. 事件驱动
  2. 基于流的世界观
  3. 分层API
  4. 支持多种时间语义
  5. Exactly Once的状态一次性保证(出现故障也能保证数据正确)
  6. 低延迟大吞吐量
  7. 高可用 动态扩展

1.3 Flink解析

Core(核心):

Filnk的核心core是Runtime(最重要的)

Deploy(Flink的部署模式)

Local模式 : 适用于本地开发和测试环境,占用资源较少

原理:主节点JobManager(Master)和从节点TaskManager(Slave)在一台机器上模拟

1、Flink程序由JobClient进行提交

2、JobClient将任务提交给JobManager

3、JobManager只负责协调分配资源和分发任务,资源分配完成后将任务提交给相应的TaskManager

4、TaskManager启动一个线程开始执行任务,TaskManager会向JobManager报告状态的变更,

例如:开始执行、正在执行、执行完成

5、作业执行完成后,结果将发送回客户端(JobClient)

Standalone Cluster模式 : 需要在集群中完成 至少需要3台主机 一个master和两个worker节点

原理:node1作为主节点JobManager(master),node1、node2、node3作为从节点TaskManager(Slave)

1、client客户端提交任务给JobManager

2、JobManager负责申请分配任务所需资源并管理任务任务和资源

3、JobManager分发任务给TaskManager执行

4、TaskManager定期向JobManager汇报状态

Standalone-HA高可用集群模式

原理:

Standalone只有一个主节点,由于主节点负责调度和分配资源,如果主节点出现意外情况(例如宕机),集群就死掉了

但是Standalone-HA高可用集群会有多个主节点,他们都会想zookeeper注册并创建一个临时节点

(一个处于active活跃(工作状态)状态,其他处于standby状态,也就是应急状态),

如果活跃状态的主机出现意外和zookeeper心跳检测超时,临时节点就会被删除,

zookeeper就会从处于standby状态的节点选一个新的主节点,删除standby的临时节点添加active的临时节点

YARN模式 : 使用YARN进行调度

原理:

1、Client上传Flink的jar包和配置文件到HDFS集群上

2、Client向Yarn的ResourceManager提交任务和申请资源

3、ResourceManager分配Container资源并启动ApplicationMaster

4、ApplicationMaster加载Flink的jar包和配置文件构建环境启动Flink-JobManager

5、ApplicationMaster向ResourceManager申请任务资源,

6、NodeManager加载Flink的jar包和配置文件构建环境并启动TaskManager

7、TaskManager启动后会向JobManager发送心跳,并等待JobManager向其分配任务

Flink On Yarn模式也存在两种模式

Session模式(适合小任务使用) 和 Per-Job模式(适合使用大任务,且资源充足)

Session模式 :(小规模,执行时间短)

  1. 需要先申请资源,启动JobManager和TaskManager
  2. 不需要每次提交任务再去申请资源,而是使用已经申请好的资源,从而提高执行效率
  3. 任务提交完资源不会被释放,因此一直会占用资源
  4. 共享Dispatcher和Resource Manager

Per-Job模式 :(执行时间较长的大作业)

  1. 每次提交任务都需申请资源,申请资源需要时间,所有影响执行效率(但是在大数据面前都是小事)
  2. 每次执行完任务资源就会立刻被释放,不会占用资源
  3. 独享Dispatcher和Resource Manager

API&Libraries

  1. DataStream API 流计算
  2. DataSet API 批处理
  3. Table 前提是
  4. Gelly 图计算

1.4 Filnk编程模型

编程模型:

Flink提供了不同级别的编程抽象,通过调用抽象的数据集调用算子构建DataFlow就可以实现对分布式的数据进行流式计算和离线计算,DataSet是批处理的抽象数据集,DataStream是流式计算的抽象数据集,他们的方法都分别为Source、Transformation、Sink

Source :主要负责数据的读取 添加数据源 可以是文件,网络数据流,MySQL

Transformation: 主要负责对数据的转换操作(数据转换,数据处理),比如WordCount里的处理逻辑

Sink : 负责最终计算好的结果数据输出 将处理好的结果,输出(或下沉)到目标系统,

Java在堆内存中实际上new ArrayList 实际上存储的是真正的集合

Scala或Flink在堆内存中new DataStream<Integer> 装的实际上是描述信息,是一个抽象数据集

main{
//可以对抽象数据集进行编程
 //Source
    val lines:DataStream  = env.socketTextStream("localhost",8888)
        
 //调用Transformation(s)
        val words:DataStream = lines.flatMap(_.split(","))
 //调用Sink
        words.print()

}

Source 实际上并不存数据,装的是描述信息

Transformation 也不存数据, 实际上装的是计算逻辑 调用了什么方法,写了什么函数

开发者感觉像是写了一个单机程序,但是实际上生成了DataFlowGraph 会提交到集群中执行 集群中的JobManager会将DataFlowGraph进行解析,然后根据提交并行度,生成subTask(类的实例,flink最小的任务执行单元),JobManager将多个subTask 通过网络流发送给TaskManager,subTask在TaskManager中的槽中工作,进入槽中,就不出去了

1.5 Flink运行时的组件

JobManager: 作业管理器(一个)

控制一个应用程序的主进程,也就是说,每个应用程序都会被一个不同的JobManager所控制执行

JobManager会向资源管理器ResourceManager请求执行任务必要的资源,也就是任务管理器TaskManager上的插槽slot,一旦获取到足够的资源,就会将执行图分发到真正运行它们的TaskManager上.运行过程中,JobManager会负责所有需要中央协调的操作,比如检查点checkpoints的协调

TaskManager: 任务管理器(多个)

在Flink的工作进程中,通常会由多个TaskManager运行,每一个TaskManager都包含了一定数量的插槽(slots),插槽的数量限制了TaskManager能够执行的任务数量

启动后,TaskManager会向资源管理器注册它的插槽;收到资源管理器的指令后,TaskManager会将一个或多个插槽提供给JobManager调用,JobManager就可以向插槽分配任务tasks来执行

执行过程中,一个TaskManager可以跟其他运行同一应用程序的TaskManager交互数据(轮询)

ResourceManager: 资源管理器

主要负责管理TaskManager的插槽slot,插槽是Flink中国定义的处理资源单元

Dispacher: 分发器

当一个应用被提交执行时,分发器就会启动并将应用交给一个JobManager

可能不是必须的,取决于应用提交运行的方式

 

文章来自个人专栏
dyy的日记
2 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0