文章目录
一、概述
上一篇文章,我们介绍了Spark Continous连续处理模式,已有流式shuffle的实现,分析了绑定的物理计划和内部创建的writer、reader。
在本文,我们将介绍如何扩展Spark Continous流式shuffle源码,以支持多个下游分区、侧边输出、自动分析侧边输出的依赖、删除ReceiverEpochMarker机制提高并发性能等原理。
Spark 流处理源码版本迭代较快,为了避免应用扩展功能与Spark源码过于耦合,增加Spark版本升级难度,拟在DataSourceV2Strategy处,增加策略的绑定,实现的大部分逻辑仍放在应用层代码org.apache.spark包路径下。
二、核心实现:CoordinatorEndpoint及SlaveEndpoint端点
在下图中DataCleanRDD表示数据清理数据(即Shuffle前数据), 通过我们设计的shuffle数据流向,被分发到api聚合流、host聚合流各分区对应queue中:
(除下图流式数据分发外,流式Dataset#repartition方法也可以通过DataSourceV2Strategy直接绑定这个shuffle策略,流式group by算子执行前的shuffle操作同理)