Uber业务规模快速增长,覆盖了60个国家的600个城市,累计10B的订单。
并且几乎都是通过手机App来使用Uber,而100%都依赖于手机网络,需要近实时的监控网络的可靠性。
而无线网络在各个地方的信号强弱均不一样。
并且随着时间的变化,信号强弱也发生变化;蜂窝网络质量、网络格式的变化等等。
对于网络性能的挑战很多,如维度太多,数据量太大等。
一种不太高效的解决方案是使用批处理重新计算所有数据,但开销太高(重复读取数据)、对相同数据的重复计算、计算结果更新太慢。
使用增量处理,即只处理数据源的更新,增量更新结果,便可更快地计算出结果。
可使用Apache Hudi进行增量拉取
对大数据引入了流式处理,只对变化的数据进行增量处理,减少延迟,扩展性更好。
基于Hudi的实现架构,Hudi会基于统计信息来管理文件,提供不同的视图供不同的上层应用使用,并且更通用。DB的变化会导入kafka,然后每隔数分钟使用Hudi(DeltaStreamer)进行消费,然后写入Hudi数据集,在数据集上提供三种视图(读优化视图、实时视图、增量视图)供上层应用使用。
Hudi在Uber中已经构建了超10PB的数据湖、1000个pipeline/表、每天处理100TB数据。
Hudi的增量模型使用微批任务(数分钟),支持upsert(插入更新)结果集,支持增量拉取数据源变化的数据。
基于Hudi构建的增量pipeline和展示面板
可使用Spark DataSource API 或者DeltaStreamer来读取数据源/写入Hudi数据集。
构建增量pipeline,用来增量更新网络指标
Hudi增量拉取处理后,会合并之前处理的结果
增量更新指标
总体的pipeline使用两阶段增量更新,第一阶段结果在Sketch表(临时表),第二阶段合并为Summary表(最终结果总表),两阶段都涉及结果的合并。
Delta sketch和Delta summary均使用Hudi提供的DeltaStreamer实现。
Hudi在Uber的实践经验总结,包括测试、运维、监控
生产环境的增量pipeline设置
pipeline的运行时介绍,每天100GB,批量更新pipeline使用1200core、增量pipeline使用150core。