Flink 的基本介绍

Flink 的核心特性

1、高吞吐和低延迟。每秒处理数百万个事件,毫秒级延迟。
 2、结果的准确性。Flink 提供了事件时间(event-time)和处理时间(processing-time)
语义。对于乱序事件流,事件时间语义仍然能提供一致且准确的结果。
3、精确一次(exactly-once)的状态一致性保证。  可以连接到最常用的存储系统,如 Apache Kafka、Apache Cassandra、Elasticsearch、 JDBC、Kinesis 和(分布式)文件系统,如 HDFS 和 S3。
4、高可用。本身高可用的设置,加上与 K8s,YARN 和 Mesos 的紧密集成,再加上从故
障中快速恢复和动态扩展任务的能力,Flink 能做到以极少的停机时间 7×24 全天候 运行。
5、能够更新应用程序代码并将作业(jobs)迁移到不同的 Flink 集群,而不会丢失应用
程序的状态。

分层 API

数据流分类

1. 无界数据流(Unbounded Data Stream)
所谓无界数据流,就是有头没尾,数据的生成和传递会开始但永远不会结束。我们无法等待所有数据都到达,因为输入是无界的,永无止境,数据没有“都到达”的时候。所以对于无界数据流,必须连续处理,也就是说必须在获取数据后立即处理。在处理无界流时,为了保证结果的正确性,我们必须能够做到按照顺序处理数据。
2. 有界数据流(Bounded Data Stream)
对应的,有界数据流有明确定义的开始和结束,所以我们可以通过获取 所有数据来处理有界流。处理有界流就不需要严格保证数据的顺序了,因为总可以对有界数据 集进行排序。有界流的处理也就是批处理。

Flink相比Spark的优势

Flink 的延迟是毫秒级别,而 Spark Streaming 的延迟是秒级延迟。
Flink 提供了严格的精确一次性语义保证。
Flink 的窗口 API 更加灵活、语义更丰富。
Flink 提供事件时间语义,可以正确处理延迟数据。
Flink 提供了更加灵活的对状态编程的 API。

Flink整体构成

Flink 的运行时架构中,最重要的就是两大组件:作业管理器(JobManger)和任务管理器
(TaskManager)。对于一个提交执行的作业,JobManager 是真正意义上的“管理者”(Master),负责管理调度,所以在不考虑高可用的情况下只能有一个;而 TaskManager 是“工作者”(Worker、Slave),负责执行任务处理数据,所以可以有一个或多个。

         这里首先要说明一下“客户端”。其实客户端并不是处理系统的一部分,它只负责作业的
提交。具体来说,就是调用程序的 main 方法,将代码转换成“数据流图”(Dataflow Graph),
并最终生成作业图(JobGraph),一并发送给 JobManager。提交之后,任务的执行其实就跟客
户端没有关系了;我们可以在客户端选择断开与 JobManager 的连接, 也可以继续保持连接。
之前我们在命令提交作业时,加上的-d 参数,就是表示分离模式(detached mode),也就是断
开连接。
作业管理器(JobManager):

JobManager 是一个 Flink 集群中任务管理和调度的核心,是控制应用执行的主进程。也就
是说,每个应用都应该被唯一的 JobManager 所控制执行。当然,在高可用(HA)的场景下,
可能会出现多个 JobManager;这时只有一个是正在运行的领导节点(leader),其他都是备用
节点(standby)。
JobManger 又包含 3 个不同的组件

(1)JobMaster

        JobMaster 是 JobManager 中最核心的组件,负责处理单独的作业(Job)。所以 JobMaster
和具体的 Job 是一一对应的,多个 Job 可以同时运行在一个 Flink 集群中, 每个 Job 都有一个
自己的 JobMaster。需要注意在早期版本的 Flink 中,没有 JobMaster 的概念;而 JobManager
的概念范围较小,实际指的就是现在所说的 JobMaster。
        在作业提交时,JobMaster 会先接收到要执行的应用。这里所说“应用”一般是客户端提
交来的,包括:Jar 包,数据流图(dataflow graph),和作业图(JobGraph)。
        JobMaster 会把 JobGraph 转换成一个物理层面的数据流图,这个图被叫作“执行图”
(ExecutionGraph),它包含了所有可以并发执行的任务。 JobMaster 会向资源管理器
(ResourceManager)发出请求,申请执行任务必要的资源。一旦它获取到了足够的资源,就会
将执行图分发到真正运行它们的 TaskManager 上。
        而在运行过程中,JobMaster 会负责所有需要中央协调的操作,比如说检查点(checkpoints)的协调。

(2)资源管理器(ResourceManager)

        ResourceManager 主要负责资源的分配和管理,在 Flink 集群中只有一个。所谓“资源”,
主要是指 TaskManager 的任务槽(task slots)。任务槽就是 Flink 集群中的资源调配单元,包含
了机器用来执行计算的一组 CPU 和内存资源。每一个任务(Task)都需要分配到一个 slot 上
执行。

(3)分发器(Dispatcher)

        Dispatcher 主要负责提供一个 REST 接口,用来提交应用,并且负责为每一个新提交的作
业启动一个新的 JobMaster 组件。Dispatcher 也会启动一个 Web UI,用来方便地展示和监控作
业执行的信息。

任务管理器(TaskManager)
        TaskManager 是 Flink 中的工作进程,数据流的具体计算就是它来做的,所以也被称为
“Worker”。Flink 集群中必须至少有一个 TaskManager;当然由于分布式计算的考虑,通常会
有多个 TaskManager 运行,每一个 TaskManager 都包含了一定数量的任务槽(task slots)。Slot
是资源调度的最小单位,slot 的数量限制了 TaskManager 能够并行处理的任务数量。
        启动之后,TaskManager 会向资源管理器注册它的 slots;收到资源管理器的指令后,
TaskManager 就会将一个或者多个槽位提供给 JobMaster 调用,JobMaster 就可以分配任务来执
行了。
        在执行过程中,TaskManager 可以缓冲数据,还可以跟其他运行同一应用的 TaskManager
交换数据。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值