flink(flink sql)
本篇文章给大家谈谈flink,以及flink sql对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、flink是干嘛的
- 2、Flink工作原理
- 3、Flink 原理详解
flink是干嘛的
Flink是一个框架和分布式处理引擎,用于对无限制和有限制的数据留进行有状态的计算。Flink被设计为可在所有常见的集群环境中运行,以内存速度和任何规模执行计算。
任何类型的数据都是作为事件流产生的。信用卡交易,传感器测量,机器日志或网站移动应用程序上的用户交互,所有这些数据均作为流生成。
Flink擅长处理无边界和有界的数据集。对事件和状态的精确控制使Flink的运行时能够在无限制的流上运行任何类型的应用程序。有界流由专门为固定大小的数据集设计的算法和数据结构在内部进行处理,从而产生出色的性能。
随罩卜部署应用程序:
Flink是一个分布式系统,需要计算资源才能执行应用程序物帆穗。Flink与所有常见的集权资源管理器(如Hadoop YARN,Mesos和Kubernetes)集成,但也可以设置为作为独立集群运行。
Flink旨在与前面列出的每个资源管理器兼容。这是通过特定于资源管理器的部署模式实现的,该模式允轿丛许Flink惯用方式与每个资源管理器进行交互。
部署Flink应用程序时,Flink会根据应用程序配置的并行性自动识别所需的资源,并向资源管理器请求它们。如果发生故障,Flink会通过请求新资源来替换发生故障的容器。提交或控制应用程序的所有通信均通过REST调用进行。简化了Flink在许多环境中的集成。
Flink工作原理
Task 执行
Spark中每个Stage中的Task会被分配到一个Worker中的 - Executor容器里面的 - 一个线程池中被执升陪手行,Flink称每个Executor为一个TaskManager,每个TaskManager中会有多个slot作为内存隔离:
Spark:吵嫌Worker —— Executor —— 线程池 —— 线程
Flink: Worker —— TaskManager —— Slot —— 线程
Slot是TaskManager资源粒度的划分,每个Slot都有自己独立的内存。所有Slot平均分配TaskManger的内存,比如TaskManager分配给Solt的内存为8G,两个Slot,每个Slot的内存为4G,四个Slot,每个Slot的内存为2G,值得注意的是,Slot仅划分内存,不涉及cpu的划分。同时Slot是Flink中的任务执行器(类似Storm中Executor),每个Slot可以运行多个task,而且一个task会以单独的线程来运行。Slot主要的好处有以下几点:
可以起到隔离内存的作用,防止多个不同job的task竞争内存。
Slot的个数就代表了一个Flink程序的最高并行度,简化了性能调优的过程
允许多个Task共享Slot,提升了资源利用率,举一个实际的例子,kafka有3个partition,对应flink的source有3个task,而keyBy我们设乱扮置的并行度为20,这个时候如果Slot不能共享的话,需要占用23个Slot,如果允许共享的话,那么只需要20个Slot即可(Slot的默认共享规则计算为20个)。
[img]Flink 原理详解
Flink 是一个流处理框架,支持流处理和批处理,特点是流处理有限,可容错,可扩展,高吞吐,低延迟。
流处理是处理一条,立马下一个节点会从缓存中取出,在下一个节点进行计算
批处理是只有处理一批完成后,才会经过网络传输到下一个节点
流处理的优点是低延迟 批处理的优点是高吞吐
flink同时支持两种,flink的网络传输是设计固定的缓存块为单位,用户可以设置缓存块的超时值来决定换存块什么时候进行传输。 数据大于0 进行处理就是流式处理。
如果设置为无限大就是批处理模型。
Flink 集群包括 JobManager 和 TaskManager .
JobManager 主要负责调度 Job 并协调 Task 做 checkpoint,职责上很像 Storm 的 Nimbus。从 Client 处接收到 Job 和 JAR 包 等资源后,会生成优化后的执行计知埋高划,并以 Task 的单元调度到各个 TaskManager 去执行。
TaskManager 在启动的时候就设置好了槽位数(Slot),每个 slot 能启动一个 Task,Task 为线程。从 JobManager 处接收需要 部署的 Task,部署启动后,与自己的上游建立 Netty 连接,接收数据并处理。
flink on yarn 是由client 提交 app到 RM 上, 然后RM 分配一个 AppMaster负责运行 Flink JobManager 和 Yarn AppMaster, 然后 AppMaster 分配 容器去运行 Flink TaskManger
SparkStreaming 是将流处液埋理分成微批处理的作业, 最后的处理引擎是spark job
Spark Streaming把实时输入数据流以时间搭尺片Δt (如1秒)为单位切分成块,Spark Streaming会把每块数据作为一个RDD,并使用RDD操作处理每一小块数据。每个块都会生成一个Spark Job处理,然后分批次提交job到集群中去运行,运行每个 job的过程和真正的spark 任务没有任何区别。
JobScheduler, 负责 Job的调度通过定时器每隔一段时间根据Dstream的依赖关系生一个一个DAG图
ReceiverTracker负责数据的接收,管理和分配
ReceiverTracker在启动Receiver的时候他有ReceiverSupervisor,其实现是ReceiverSupervisorImpl, ReceiverSupervisor本身启 动的时候会启动Receiver,Receiver不断的接收数据,通过BlockGenerator将数据转换成Block。定时器会不断的把Block数据通会不断的把Block数据通过BlockManager或者WAL进行存储,数据存储之后ReceiverSupervisorlmpl会把存储后的数据的元数据Metadate汇报给ReceiverTracker,其实是汇报给ReceiverTracker中的RPC实体ReceiverTrackerEndpoin
spark on yarn 的cluster模式, Spark client 向RM提交job请求, RM会分配一个 AppMaster, driver 和 运行在AppMAster节点里, AM然后把Receiver作为一个Task提交给Spark Executor 节点, Receive启动接受数据,生成数据块,并通知Spark Appmaster, AM会根据数据块生成相应的Job, 并把Job 提交给空闲的 Executor 去执行。
1:需要关注流数据是否需要进行状态管理
2:At-least-once或者Exectly-once消息投递模式是否有特殊要求
3:对于小型独立的项目,并且需要低延迟的场景,建议使用storm
4:如果你的项目已经使用了spark,并且秒级别的实时处理可以满足需求的话,建议使用sparkStreaming
5:要求消息投递语义为 Exactly Once 的场景;数据量较大,要求高吞吐低延迟的场景;需要进行状态管理或窗口统计的场景,建议使用flink
Flink 提供的Api右 DataStream 和 DataSet ,他们都是不可变的数据集合,不可以增加删除中的元素, 通过 Source 创建 DataStream 和 DataSet
在创建运行时有:
Flink的每一个Operator称为一个任务, Operator 的每一个实例称为子任务,每一个任务在JVM线程中执行。可以将多个子任务链接成一个任务,减少上下文切换的开销,降低延迟。
source 和 算子map 如果是 one by one 的关系,他们的数据交换可以通过缓存而不是网络通信
TaskManager 为控制执行任务的数量,将计算资源划分多个slot,每个slot独享计算资源,这种静态分配利于任务资源隔离。
同一个任务可以共享一个slot, 不同作业不可以。
这里因为 Source 和 Map 并行度都是4 采用直连方式,他们的数据通信采用缓存形式
所以一共需要两个TaskManager source,Map 一个,reduce一个, 每个TaskManager 要3个slot
JobManager 将 JobGraph 部署 ExecutionGraph
设置的并行度,可以让一个ExecJobVertex 对应 多个并行的ExecVertex 实例。
Flink通过状态机管理 ExecGraph的作业执行进度。
Flink 将对象序列化为固定数量的预先分配的内存段,而不是直接把对象放在堆内存上。
Flink TaskManager 是由几个内部组件组成的:actor 系统(负责与 Flink master 协调)、IOManager(负责将数据溢出到磁盘并将其读取回来)、MemoryManager(负责协调内存使用。
数据源:
Sink:
时间:
处理时间:取自Operator的机器系统时间
事件时间: 由数据源产生
进入时间: 被Source节点观察时的系统时间
如果数据源没有自己正确创建水印,程序必须自己生成水印来确保基于事件的时间窗口可以正常工作。。
DataStream 提供了 周期性水印,间歇式水印,和递增式水印
关于flink和flink sql的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。