【Flink】【第四章 Flink理论部分】Flink运行时架构

一个完整的例子

此示例将有关人员的记录流作为输入,并将其过滤为仅包括成年人。

import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.api.common.functions.FilterFunction;

public class Example {

    public static void main(String[] args) throws Exception {
        final StreamExecutionEnvironment env =
                StreamExecutionEnvironment.getExecutionEnvironment();

        DataStream<Person> flintstones = env.fromElements(
                new Person("Fred", 35),
                new Person("Wilma", 35),
                new Person("Pebbles", 2));

        DataStream<Person> adults = flintstones.filter(new FilterFunction<Person>() {
            @Override
            public boolean filter(Person person) throws Exception {
                return person.age >= 18;
            }
        });

        adults.print();

        env.execute();
    }

    public static class Person {
        public String name;
        public Integer age;
        public Person() {}

        public Person(String name, Integer age) {
            this.name = name;
            this.age = age;
        }

        public String toString() {
            return this.name.toString() + ": age " + this.age.toString();
        }
    }
}

Stream execution environment

在这里插入图片描述

在这里插入图片描述
Flink运行时架构主要包括四个不同的组件,它们会在运行流处理应用程序时协同工作:

  1. 作业管理器(JobManager,管理job的执行,一个job一个jobManager
  2. 任务管理器(TaskManager)
  3. 资源管理器(ResourceManager,flink集群自己的,不要和yarn的RM混淆;用于申请资源,如果flink部署在yarn上,会向yarn的RM申请资源,standalone模式下自己分配资源)
    4) 分发器(Dispatcher,当job提交的时候,用于给job分配jobManager,有的模式没有该组件)。

因为Flink是用Java和Scala实现的,所以所有组件都会运行在Java虚拟机上。每个组件的职责如下:

1.作业管理器(JobManager)

(1) 1对1

  • 一个JobManager控制一个应用程序执行的主进程.
  • 也就是说,每个应用程序(application,ExecutionEnvironment)都会被不同的JobManager所控制执行。

(2) 接收应用程序
应用程序包括:两图+资源
作业图(JobGraph)、逻辑数据流图(logical dataflow graph)+ 打包了所有的类、库和其它资源的JAR包。
JobManager会把JobGraph转换成“执行图”(ExecutionGraph)。

(3) 向资源管理器(ResourceManager)请求资源
资源 = 任务管理器(TaskManager)中的插槽(slot)。

(4) JobManager到了足够的资源将执行图分发到真正运行它们的TaskManager上。

(5) 责所有需要中央协调的操作,比如说检查点(checkpoints)的协调。

2.资源管理器(ResourceManager)

(1)管理任务执行需要的插槽(slot)
插槽是Flink中定义的计算资源的单元。

(2)多种类
Flink提供了多种类的资源管理器,为了适用于将flink部署在各种资源管理框架上,比如YARN、Mesos、K8s,以及standalone部署。(flink的ResourceManager需要向资源管理框架申请资源,因此需要符合通信协议,比如yarn,mesos这些框架里面通信协议是不同的)

(3)请外援
当JobManager申请插槽资源时,ResourceManager会将有空闲插槽的TaskManager分配给JobManager。如果ResourceManager没有足够的插槽来满足JobManager的请求,它还可以向资源提供平台发起会话,以提供启动TaskManager进程的容器。

(4)释放计算资源
ResourceManager还负责终止空闲的TaskManager

3. 任务管理器(TaskManager)

  • Flink中的工作进程。通常在Flink中会有多个TaskManager运行,每一个TaskManager都包含了一定数量的插槽(slots)。
  • 插槽的数量限制了TaskManager能够执行的任务数量。
  • 启动之后,TaskManager会向资源管理器注册它的插槽;
  • 收到资源管理器的指令后,TaskManager就会将一个或者多个插槽提供给JobManager调用。JobManager就可以向插槽分配任务(tasks)来执行了。在执行过程中,一个TaskManager可以跟其它运行同一应用程序的TaskManager交换数据。

4.分发器(Dispatcher)

  • 当一个应用被提交执行时,分发器就会启动并将应用移交给一个JobManager。
  • 可以跨job运行,它为应用提交提供了REST接口。由于是REST接口,所以Dispatcher可以作为集群的一个HTTP接入点,这样就能够不受防火墙阻挡。
  • Dispatcher也会启动一个Web UI,用来方便地展示和监控作业执行的信息。
  • Dispatcher在架构中可能并不是必需的,这取决于应用提交运行的方式。(standalone 和 yarn session模式有,pro-job没有此组件)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值