Flink的编程模型与其他框架比较
2021-09-06 本文已影响0人
一生逍遥一生
Flink核心概念
- Streams:分为有界流与无界流.有界流指的是有固定大小,不随时间增加而增长的数据;无界流指的是数据随着时间增加而增长,计算状态持续进行.
- State:状态指的是在进行流式计算过程中的消息。一般用作容错恢复和持久化,流式计算在本质上是增量计算,也就是需要不断地查询过去的状态。
- Time:时间是在进行Flink程序开发时判断业务状态是否滞后和延迟的重要依据。
- API:Flink支持开发流式或者批量处理程序。
Flink集群模型和角色
- JobManager:扮演的是集群管理者的角色,负责调度任务、协调checkpoints、协调故障恢复、收集Job的状态信息,并管理Flink集群中的从节点TaskManager。
- TaskManager:负责执行计算的Worker,在其上执行Flink Job的一组Task,TaskManager还是所在节点的管理员,负责把该节点上的服务器信息上报给JobManager。
- Client:用户提交编写的Flink工程时,会先创建一个客户端再进行提交,Client会根据用户的参数使用yarn per job模式、stand-alone模式还是yarn-session模式
将Flink程序提交到集群。
Flink资源和资源组
在Flink集群中,一个TaskManager就是一个JVM进程,用独立的线程执行task,使用Task slot来控制Task slot接收task个数。
Flink与其他框架的区别
框架名称 | 架构 | 容错 | 反压 |
---|---|---|---|
Storm | 主从模式,强依赖Zookeeper | 支持Record级别的ACK-FAIL,发出去的消息,都可以确定是被成功或者失败处理 | 消费者处理速度跟不上生产者的速度,通知生产者停止生产数据,不能实现逐级反压,会产生OOM。 |
Spark | 微批处理,每个batch都依赖Driver,时间纬度上的Spark DAG | 不能做到只处理一次语义 | 速率控制器,在速率控制器用到了PID算法 |
Flink | 主从模式,Graph->Stream Graph->JobGraph->ExecutionGraph | 基于两阶段提交实现了精确的的一次处理语义 | 传输中分布式阻塞队列 |