《3、韩飞-流批一体在京东的探索与实践.pdf》由会员分享,可在线阅读,更多相关《3、韩飞-流批一体在京东的探索与实践.pdf(28页珍藏版)》请在三个皮匠报告上搜索。
1、韩 飞京东高级技术专家流批一体在京东的探索与实践流批一体在京东的探索与实践Exploration and Practice of Unifying Batch and Streaming in JD 整体思考整体思考#1技术方案及优化技术方案及优化Technical Solutions and Optimizations#2落地案例落地案例#3未来规划未来规划#4Overall ThinkingOverall ThinkingCasesFuture Plan#1#1整体思考整体思考Overall Thinking流批一体认知计算统一计算统一存储统一存储统一Cognition of Unifyi
2、ng Batch and Streaming落地面临的挑战端到端数据时延本质性能问题数据实时性数据实时性开发层面兼容调度问题兼容“批”兼容“批”流批混部弹性伸缩资源问题资源问题风险与收益用户视角用户观念用户观念Challenges#2#2技术方案及优化及优化Technical Solutions and OptimizationsFlinkJDOSHDFS/CFSZookeeperSQLJARLoggingMetricsConfigDebuggingMetadataJRC(JD Realtime Computing)JDQJMQHBaseJimDBHiveRelational DBDatala
3、keClickhouseDorisElasticSearch技术方案-整体架构JDQ离线数仓统一模型流批统一计算FlinkSQL+UDF流批统一存储IcebergTopicHive Table流存储批存储统一模型Overall Architecture流批统一存储Iceberg技术方案-兼容“批”exe_bdm_xxxexe_fdm_xxxexe_gdm_xxxexe_adm_xxxexe_gdm_xxx_1gdm_biz_order_mgdm_biz_order_morder_iditem_idseller_ido_amountsgdm_rt_order_mgdm_rt_order_mord
4、er_id_mitem_idseller_idorder_amountsgdm_order_morder_iditem_idseller_idorder_amountsFlinkSQL+UDFu 统一模型解决字段映射问题u SQL开发面向统一模型层u 打通调度系统u 支持Flink批任务作为数据加工环节u 支持自定义Hive UDF、UDAF、UDTF复用u 临时注册Functioncreate catalog xxxuse catalog xxx(drop function xxx)create function xxxinsert into xxx(call function)upload
5、 UDF jarHive MetastoreExtFunctionModuleCompatibility of Batch ProcessingHive TableTopic技术方案-混部及弹性Metrics SystemFlink Cluster on JDOS AutoScalingServiceJRC fabricu 计算资源占用天然错峰(0-8点,流低峰批高峰)u 流批任务混部的JDOS Zoneu 统一Flink引擎+自动弹性能力metricsmetricsenableresultadjustHybrid Deploy and Auto Scaling#2#2技术方案及技术方案及优化
6、维表优化Join优化Window优化Iceberg Connector优化Technical Solutions and Optimizations维表优化 Rebalance依赖平台预览拓扑功能通过并行度调整实现Forward-RebalanceRebalance-Dynamic Rebalanceuapus.dynamic.rebalance.enable=trueDimension Table Optimization-Rebalance维表优化 KeybyStreamExecSinkStreamExecCalcStreamExecLoopupJoinStreamExecTableSou
7、rceScanStreamExecSinkStreamExecCalcStreamExecLoopupJoinStreamExecChangeStreamExecTableSourceScan需求场景:u 如何基于维表缓存优化提高缓存命中率u 洪峰数据情况下减少数据的缓存淘汰操作方案:uJoin Key作为Hash条件u增加优化规则StreamExecLookupHashJoinRuleu添加到FlinkStreamRuleSets#PHYSICAL_REWRITE阶段create table hbaseDimTable(user_id bigint,d row)with(lookup.has
8、h.enable=true)Dimension Table Optimization-Keyby维表优化 Mini-Batchkey 1DBget需求场景:u 单条记录查询效率低下u AsyncIO无法解决访问量高的问题方案:create table hbaseDimTable(user_id bigint,d row)with(lookup.async.batch.size=500,lookup.async.batch.linger=2s)key 2key 3getgetkey 1key 2key 3DBgetDimension Table Optimization Mini-BatchJo
9、in优化 Interval join状态关联优化需求场景:u 高流量Interval join场景大状态u RocksDB作为Statebackend性能下降u Flink Job吞吐下降,发生背压方案:精确构建数据扫描边界u keyGroup+joinKey+namespace+timestamplower,upperrange scanJoin Optimization State Optimization of Interval Join k0+a+ts0k0+a+ts1k0+a+ts2k0+a+ts3k0+a+ts4k0+a+ts5k0+a+ts6k0+a+ts7k0+a+ts8Roc
10、ksDBprefix scank0+a+ts3k0+a+ts4k0+a+ts5Join优化 Regular inner join大状态需求场景:u 实时流 regular inner join超大状态u table.exec.state.ttl设置大窗口时间方案:uJoin算子以mini-batch方式将数据存至JimDBu借助Jimdb TTL机制实现过期数据清理utable.join.state.jimdb.enable=true Join Operator JimDBTTLJoin Optimization Huge State Optimization of Regular Join
11、Window优化 窗口偏移量&增量窗口u根据设置的增量间隔触发,输出窗口的当前计算结果uHOP、TUMBLEuTUMBLE(time_attr,window_size,window_offsets,trigger_interval)0122021-12-0400:00:002021-12-0408:00:002021-12-0500:00:002021-12-0508:00:00TUMBLE(processing_time,interval 24 hour)TUMBLE(processing_time,interval 24 hour,interval 8 hour)1210u解决本地非0时区
12、跨天级别窗口统计错误问题(1.12 processing time)u灵活设置窗口开始结束时间uHOP、TUMBLEuTUMBLE(time_attr,window_size,window_offsets)Window Optimization Window Offset and Incremental Window Interval Ntrigger sinktrigger sinktrigger sinktrigger sinkIceberg Connector优化 小文件合并需求场景:u Iceberg社区未提供基于Flink算子的小文件合并功能u 大量小文件影响NameNode性能方案
13、:create table icebergTable(user_id bigint,category_id bigint)with(auto-compact=true,mits=5)Iceberg FilesCommitterIceberg CompactCoordinatorIceberg CompactOperatorIceberg CompactOperator.Iceberg CompactCommitterIceberg Connector Optimization Merging small filesIceberg Connector优化 PruningTableSchemaTa
14、bleSchemaIceberg SchemaTableSourceScanPruningTableSchemaTableSchemaprojectFieldsIceberg SchemaTableSourceScan需求场景:u Iceberg Connector读取复杂嵌套结构扫描大量无效数据u CPU、网络带宽负载高方案:u根据查询对嵌套结构进行列裁剪Iceberg Connector Optimization PruningTableSchemaInterval outer join优化UDF复用Keyby语法扩展维表预加载Iceberg Connector从指定Snapshot读取其
15、他优化Other Optimizations#3 3落地案例落地案例CasesFlinkSQL现状任务数任务数700+700+15%15%1.11.1亿亿+任务占比任务占比FlinkSQLFlinkSQL任务处理峰值任务处理峰值FlinkFlink版本版本1.121.12Current Status of FlinkSQL in Production实时通用数据层RDDM建设BDMFDMDIMAPPRFDMRDDMAPPu 服务黄金眼/商智、JDV、广告算法、搜推算法等核心业务u RDDM已有实时业务模型与离线GDM、ADM层业务加工逻辑一致u 流量大、实时性要求高、定制化逻辑离线数仓实时数仓
16、GDMADMFlinkSQL实现计算统一Real-time Common Data Layer RDDM实时通用数据层RDDM建设u 当前消息需要参与计算的所有相关数据一次性加载进内存Load dataHBase Index Table HBase Dim Table u维表预加载+维表Keybyu定制Connector实现二级索引查询u 部分计算逻辑关联180天的历史数据KVStateBackendStatesStatesStatesuJoin场景定制优化u支持KV类型的状态后端Real-time Common Data Layer RDDM流量买卖黑产舆情分析数据爬取JMQJDQJDQJM
17、Q管理系统HDFSHDFSFlinkDTSHive数据爬取JMQIcebergIcebergJMQ管理系统FlinkFlinkFlinkODSODSDWDDWDODSODSDWDDWD业务特点:u端到端接受分钟级时延u离线、实时模型相同达成效果:u端到端时延1分钟左右u小文件合并提升性能u存储、计算成本显著降低u开发、维护成本降低30%+Public Option Analysis of Traffic Deal in Black MarketOLAP、离线#4 4未来规划未来规划Future Plan未来规划#1 业务拓展FlinkSQL任务推广探索更多流批一体业务场景流批一体产品形态打磨便捷的元数据管理#2 平台能力Join场景优化大状态场景优化KV类型的State Backend端到端实时性提升探索Future Plan