Flink高效的容错机制使得系统能够支持高吞吐量和once-once语义的计算。 Flink 能够准确、快速地从故障中恢复,并且数据零丢失。
Flink的容错机制示意图
五。高吞吐量、低延迟
Flink具有高吞吐量和低延迟(能够快速处理大量数据)的特点。下图展示了Apache Flink 和Apache Storm 在完成分布式项目聚合任务时的性能对比。
Flink 与Storm 性能对比
6.扩张
Flink 可以通过Yarn 或Mesos 等资源管理软件进行管理和部署。
基本概念
1.连锁经营任务
Flink 中链式操作任务的分布式执行。每个任务都由一个线程执行。将运算符链接到任务中是一种有用的优化,可以减少线程之间的切换和缓冲开销,提高总体吞吐量,同时减少延迟。链接行为可以配置如下:
Flink链运行图
2. 提交任务
Job Tracker:协调分布式执行,包括调度任务、协调检查点、协调灾难恢复。为了实现高可用性,设置了多个作业管理器,其中一个作业管理器设置为领导者,其他作业管理器作为备用。
任务跟踪器:执行任务(特别是数据流任务)并与缓冲区交换数据流。
客户端:客户端用于准备任务的调度(数据、环境变量等),然后将计算任务提交给作业管理器。任务提交后,客户端可以断开连接或保持连接以接收进度报告。
3. 跑步
Flink集群启动时,首先启动一个JobManager和一个或多个TaskManager。客户端向作业管理器提交任务,作业管理器将任务调度给每个任务管理器执行,任务管理器向作业管理器报告心跳和统计信息。数据以流的形式在任务管理器之间发送。
Flink整体流程图(图片来自Flink官网)
4.任务槽位和资源
每个工作线程(任务管理器)都是一个JVM 进程,可以在单独的线程中运行一个或多个子任务。为了控制一个worker可以接收的任务数量,一个worker有一个所谓的任务槽(至少一个)。
每个任务槽代表任务管理器资源的固定子集。例如,具有三个插槽的任务管理器分别为每个插槽分配1/3 的内存资源。这意味着子任务不会与其他作业的子任务竞争内存。请注意,当前插槽仅隔离托管任务内存,而不隔离CPU。
通过调整任务槽的数量,用户可以定义子任务如何彼此分离。每个任务管理器都有插槽。这意味着每个任务组可以在单独的JVM 中运行(例如,可以在单独的容器中启动)。拥有多个槽意味着更多的子任务共享同一个JVM。同一JVM 内的任务共享TCP 连接(通过多路复用)和心跳消息,还可以共享数据集和数据结构,从而减少每个任务的开销。
Flink 任务槽图
本文摘自《智能运维:从0搭建大规模分布式AIOps系统》,彭东,朱伟,刘军等人,电子工业出版社,2018年7月出版。
本书结合大型企业的智能运维实践,全面、完整地介绍智能运维技术体系,让读者更好地了解运维技术的现状和发展。同时帮助运维工程师对机器学习的常见算法模型以及如何将其应用到运维任务中有所了解。
版权声明:本文由今日头条转载,如有侵犯您的版权,请联系本站编辑删除。