1、刘建刚腾讯大数据实时平台 Flink 引擎负责人整体规模整体规模机器核数:百万级别作业个数:上万级别流量峰值:十亿级别应用场景应用场景实时报表特征生产湖仓一体数据同步整体架构基于基于 Apache Flink Apache Flink 打造打造 Oceanus Oceanus 一站式实时计算解决方案一站式实时计算解决方案,集实时应用的创建、调试、部署、运行、运维和监控为一体,为实时应用提供全生命周期的服务,覆盖微信支付、腾讯视频、腾讯广告等集团所有业务。目录从零断流到智能自治的一体化架构FlinkFlink介绍介绍:以流计算为内核的新一代计算引擎,提供基于数据流的有状态计算。:以流计算为内核的
2、新一代计算引擎,提供基于数据流的有状态计算。相比storm(流计算开创者),flink有以下优势:保障数据exactly-once,通过local state和基于Chandy-Lamport算法的快照来保障数据的不丢不重。完善的Event-time机制,通过watermark解决了无限流的触发、延迟等问题。低延迟、高吞吐,主要通过资源管理、网络优化等来实现。Flink是有状态的long-running在线计算,具备以下特征:1.时间维度上,作业流量呈潮汐规律变化,有上涨或者下降的趋势。2.空间维度上,不同pod的负载不同,资源需求也不一样SLA要求高在支付/直播等场景,稳定性要求至少99.9
3、9%,重启断流、资源不足导致的failover&lag严重影响SLA。成本压力大在数据同步、实时报表等场景,按最大值配置资源会导致严重浪费,业内资源利用率普遍低于40%。运维成本高流式计算自身复杂性导致问题排查困难,低延迟要求做到724h随时响应方案:原地修改pod资源,支持个性化配置。缺点:内存修改需要重启pod,影响flink进程,导致全局重启。方案:流式系统一般支持水平伸缩,比如flink。缺点:需要全局重启,不支持精准预测、异常处理等方案。方案:K8s提供了node级别的水平伸缩。缺点:stateful作业需要全局重启,断流时间长。Proactive ML ModelAutomated
4、Anomaly HandlerJob AutoScale ManagerPodTaskManagerPodOperator metricsGC eventsCPU&MemoryusageExceptionInfoLog infoVerticalHorizontalJobMaster弹性架构Oceanus核心技术突破核心技术突破垂直伸缩:业内首创零断流,支持“千pod千面”。水平伸缩:强扩展性的秒级伸缩。AIAI驱动的资源全托管驱动的资源全托管模型精准预测,实现reactive向proactive的跨越自动化异常处理,提供标准化的自愈方案。显著的业务价值显著的业务价值资源利用率提升30%+作业f
5、ailover率下降70%运维成本降低50%垂直与水平弹性本质上,所有的弹性伸缩都由以下操作组成:垂直伸缩:表示原地变更pod的资源。水平伸缩:表示变更服务使用的节点数。背景垂直伸缩表示原地变更pod的资源,主要为CPU和Memory。如果资源不支持动态变更(比如内存),就需要重启pod,将无可避免的影响上面的stateful服务。挑战为了做到原地修改资源(CPU&Memory),流式平台需要给出一整套自底而上的解决方案:1.JDK层面,修改内存必须要重启JVM,进而导致Flink重启。2.k8s层面,没有专门的语义支持,无法保障全局资源一致性。3.Flink层面,默认所有的算子处理性能一致,
6、不支持异构资源。PodPodPodTaskManagerTaskManagerJobManager技术实现:Flink支持异构资源弹性伸缩1.AutoScaleService组件负责管理异构资源的弹性伸缩。2.资源对应关系为,保障Task重调度时资源视图不变。3.资源变更会被持久化,保障job failover、taskfailover、master failover后不丢失。技术实现:K8s支持原地修改pod资源1.K8s通过PodSpec来声名资源变更,通过Proposed等状态来标识过程。2.Kubelet本地通过CRI接口调用实现pod cfs_quota和limit_in_bytes