博客
关于我
Apache Flink在 bilibili 的多元化探索与实践
阅读量:698 次
发布时间:2019-03-17

本文共 1465 字,大约阅读时间需要 4 分钟。

万亿级传输分发架构与AI实时Pipeline的落地

B站实时计算的生态与时效

随着大数据技术的不断发展,实时计算的需求日益增长。在B站,实时计算场景主要应用于机器学习、实时推荐、广告搜索、数据分析、实时渠道投放、报表生成、OLAP以及监控等方面。根据B站的数据分布,实时计算占比约20%,离线计算约75%,而增量计算占比约5%。

核心场景与时效性

B站的数据实效性从初期以天为粒度的离线计算发展到现在多样化的实时、增量和离线计算。在实时计算方面,数据的时效性要求较高,但在增量计算中,既需要关注成本又需要兼顾实效性。这些不同的场景对数据处理和存储提出了不同的要求。

数据处理的痛点

在早期,B站的数据处理面临以下痛点:

  • 数据质量与传输不稳定

    • 使用Flume作为数据传输工具时,遇到HDFS不稳定的问题,导致数据重复和丢失,عالienLatency增加。
  • 文件存储格式的限制

    • 采用Lzo格式时,处理分隔符和嵌套结构存在问题。
  • 实时与离线的兼容性不足

    • Flume没有 checkpoint机制,难以提供实时查询和增量处理。
  • 资源管理与调度效率低

    • 调度机制过于依赖NameNode的list API,导致资源编排和调度压力大。
  • 针对上述痛点,B站通过Flink On Yarn构建了一个高效的增量化管道。以下是主要优化点和技术亮点:

    架构优化

    • 数据传输与解析

      采用Kafka作为数据源,通过KafkaSource在Flink中进行解析和处理,避免了传统Flume的不稳定性和瓶颈问题。数据解析过程动态加载模型,提升了Protobuf解析性能,并优化了缓存机制。

    • 分区通知与水标记机制

      引入Watermark机制,基于Event时间生成全局水标记,解决了多条流数据的分区通知问题。通过GlobalWatermark模块实现增量式的分区推进。

    • CDC管道优化

      通过Datax全量同步MySQL到HDFS,结合Canal实现binlog增量同步。利用Flink进行增量更新,确保数据不丢不重。HUDI用于实时的全表更新,Trace系统用于数据校验。

    • 小文件合并与通信优化

      在Flink中引入小文件合并机制,通过并行化处理减少文件数,提升读写效率。此外,优化了HDFS通信机制,降低了资源消耗和延迟。

    • 分区容错机制

      提供PartitionRecover模块,处理水标记延迟情况,确保分区通知的准确性和完整性。

    AI实时处理的工程实践

    在AI领域,Flink搭建了一个实时处理链路,提升了特征工程的效率和模型训练的灵活性。以下是关键优化点:

    特征工程的挑战与解决

  • 实时特征计算的延迟与稳定性

    采用Group By和agg函数替代滑动窗口,提升性能和稳定性。使用RocksDB存储特征结果,保证快速查询和更新。

  • 特征复用机制

    实现实时特征和离线特征共享,统一特征定义,降低开发和维护成本。

  • 特征计算的流批一体化

    通过Flink的流批支持,实现特征在实时和离线场景中的复用,大幅提升特征处理效率。

  • 基于AIFlow的协作框架

    引入AIFlow框架,定义完整的AI工作流,支持Python定义流批DAG。框架提供事件驱动的通知机制,实现科学应对复杂场景,可扩展性和可维护性显著提升。

    未来展望

    在未来,B站将进一步探索以下方向:

  • 数据湖核心场景的落地,结合Flink与Iceberg和HUDI进行更深层次的场景支持。

  • 实时AI平台的进一步完善,打造高效、灵活的AI协作平台,降低算法工程师的开发和维护成本。

  • 转载地址:http://aysez.baihongyu.com/

    你可能感兴趣的文章
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim教程【十二】
    查看>>
    Nim游戏
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>
    NIO三大组件基础知识
    查看>>
    NIO与零拷贝和AIO
    查看>>
    NIO同步网络编程
    查看>>
    NIO基于UDP协议的网络编程
    查看>>
    NIO笔记---上
    查看>>
    NIO蔚来 面试——IP地址你了解多少?
    查看>>
    NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
    查看>>