产生背景
实时流数据的处理需求变多 需要优秀的流处理引擎: 实现低延迟,高吞吐,容错性,窗口时间语义化,编程效率高与运行效果好。
之前的工具
sotrm
优点:低延迟 缺点:其他要求较差
spark streaming
优点:高吞吐量,容错性高 缺点:其他要求较差
flink介绍
功能:
用在要求严格的实时流处理场景。
实现:
数据处理过程抽象,source->Transform->Sink.。
架构设计
分层说明
物理层布署层-deploy层:
负责解决flink的部署模式问题。通过这层可以选择不同的部署平台。
Runtime核心层:
核心实现层,给上层接口提供服务。 将DataStream和DataSet转成统一的可执行的Task Operator,达到在流式计算引擎下同时处理 批量计算和流式计算的目的。
API&Libraries层
负责更好的开发用户体验。 提供了流计算和批处理的接口。(Gelly库,FlinkML机器学习库) API包括DataStreamAPI和DataSetAPI。
运行模式
本地运行模式
用于测试。
standalone模式
纯flink计算场景,商用场景极少。
集群运行模式
运行在yarn或者mesos的等。 session模式 集群生命周期:从客户端连接到集群到手动停止session为止。 资源隔离:TaskManager slot 由 ResourceManager 在提交作业时分配, 并在作业完成时释放。局限在于在出现jobManager错误时,会影响其他作业。 工作流程特征说明:多个flinkJob向一个flinkSession提交作业,并由其管理。 per-job模式 集群生命周期:yarn为提交的作业启动集群 --客户端从集群请求资源启动jobManager --把作业给dispatcher –惰性分配TaskManager --作业完成则拆除flinkjob。 资源隔离:Jobmanager中的错误只影响一个作业。 工作流程特征说明:多个flinkJob向一个yarn生成的flinkSession提交作业,由 作业所属的FlinkSession管理自己的Flink作业。 application模式 集群生命周期:提交jar包到hdfs --jobManager拉取所需资源 --由运行jobManager的集群入口节点 机器调用main方法提取JobGarph,作为解析提供客户端和集群的交互,到作业结束。 资源隔离:ResourceManager和Diapatcher作用于单个的flink程序。 工作流程特征说明:将各个环节更进一步进行专用化处理, 相当于每个FlinkJob都有一套专用的服务角色进程。 ?
本地布署模式:demo、代码测试场景。 Session模式:集群资源充分、频繁任务提交、小作业居多、实时性要求高的场景。 Per-Job模式:作业少、大作业、实时性要求低的场景。 Application模式:实时性要求不太高、安全性有一定要求均可以使用,普遍适用性最强。
运行流程
角色说明
进程:JobManager和TaskManager。 JobManager:决定task调度,失败反馈,恢复失败等。 ResourceManager:提供、回收、分配 - 它管理 task slots,这是 Flink 集群中资源调度的最小单位。 Dispatcher:REST接口,提交flink应用程序执行,给提交的作业启动新JobMaster。 JobMaster:管理单个JobGraph的执行。 TaskManager:缓存交换数据流,至少有一个,最小单位时task slot client:准备数据流发送给JobManager。 actor system:消息传递的中间件。
yarn模式提交任务流程
![图片.png](https://img-blog.csdnimg.cn/img_convert/50523c7e4e8494daa3bdd3a83f1a5c8c.png#clientId=ua94d4479-3c5b-4&from=paste&height=211&id=u4b32aa0b&margin=[object Object]&name=图片.png&originHeight=422&originWidth=854&originalType=binary&ratio=1&size=127333&status=done&style=none&taskId=u213e8d58-f39c-4ef3-8ea0-fbead904109&width=427)
|