Flink 流批一体在模型特征场景的使用
内容提要
本文总结了B站资深开发工程师张杨在Flink Forward Asia 2023中的分享,包括模型特征场景、流批一体、性能优化和未来展望。
延伸解读
双链路架构的痛点与流批一体的必要性
B站原有架构中,实时链路使用Flink,离线链路使用Spark,导致用户需要同时掌握两套技术栈,学习成本高。更关键的是,由于Flink与Spark在SQL标准支持和UDF行为上存在差异,相同逻辑可能产生不同计算结果,造成离线调研效果良好但实时上线后效果不佳的问题。此外,多引擎下UDF的长期维护和升级风险大,这些痛点推动了流批一体方案的落地。
流批一体落地的关键技术适配
为实现流批一体,B站基于Flink 1.15进行了多项适配:支持Hive Module以兼容Hive UDF,减少重复开发;针对流批场景优化语法和UDF行为,例如Now函数在Streaming下非确定性而在Batch下需确定性;对Connector进行流批兼容改造,调整默认参数以适应Batch的高吞吐需求,并优化了单例连接在Batch任务生命周期中的管理问题。
资源错峰与调度优化实践
B站利用流批任务天然的错峰特性,在K8S集群上通过混部框架实现资源复用:在线业务白天占用高,批任务夜间占用高,从而提升整体资源利用率至70%左右。同时,将Streaming和Batch的调度器拆分,Streaming使用K8s默认调度器,Batch使用Volcano调度器,避免批任务频繁申请Container阻塞流任务。此外,升级到JDK17并开启内存返还,节省了超过15%的内存。
性能优化与未来方向
在性能方面,B站采用Apache Celeborn Shuffle替代Netty Shuffle,提升了稳定性和性能,并实现存算分离;在部分场景尝试Pipeline模式,避免数据落盘,提升效率。DAG优化中,减少无用Shuffle,尽量将算子chain在一起。未来计划探索更多特征场景的流批一体,如Interval Join,并优化DAG/Shuffle以提升特征样本计算性能,同时支持更多引擎的UDF。
Q&A
Flink流批一体的主要优势是什么?
Flink流批一体方案通过兼容实时和离线场景,减少了用户的重复开发工作,并优化了资源调度,提高了计算效率。
B站在特征计算中使用了哪些技术?
B站在特征计算中使用了Kafka进行实时数据流处理,Flink进行实时特征计算,Spark进行离线特征计算。
流批一体方案如何解决计算一致性问题?
流批一体方案通过Flink 1.15版本的兼容性优化,减少了实时和离线计算结果之间的差异,提升了计算一致性。
在性能优化方面,B站做了哪些改进?
B站通过采用Apache Celeborn Shuffle替代Netty Shuffle,优化了Shuffle性能,并进行了调度器的拆分以满足不同资源需求。
流批一体方案对资源调度有什么影响?
流批一体方案通过错峰资源利用和K8S集群的优化,提高了资源利用率,确保了流和批任务的高效调度。
未来B站在流批一体方面有哪些展望?
未来B站希望探索更多特征场景的流批一体,提升特征样本计算性能,并支持更多引擎的UDF。