Spark结构化的流式生产就绪版本在spark 2.2.0中发布。 我们的团队很高兴对其进行大规模测试,我们将最大的工作之一更新为流传输,并推动生产每小时处理约6–8 TB的数据。 我们面临一些挑战,详细研究了设计并找到了优化它的方法。
我将在本文中讨论一些低调的成果,重点关注如何加快微批处理以及如何加快结构化流作业输出的读取速度。
Spark中的状态机制
如果您不知道spark如何在结构化流作业中保存状态,请参考我的另一篇文章。
数据传送保证
![e00e38b161d924fec1435a2b040995e6.png](https://img-blog.csdnimg.cn/img_convert/e00e38b161d924fec1435a2b040995e6.png)
显式元数据读取器
Spark流作业在流作业输出目录内的目录中创建_spark_metadata。 该目录包含有关流作业的所有输出批次的提交信息,并且每个第9个文件都是紧凑文件,其中包含自开始日期以来作业生成的所有文件的信息。
情境
我们已经解决了压缩文件大小的问题,并将压缩文件缩减为3 GB,但是,所有下游作业在读取流作业的输入时都花了很长时间,下游作业的吞吐量为 影响。
问题
我们查看了Spark驱动程序日志,发现该驱动程序花了很长时间才能从_spark_metadata目录中读取输入文件列表。 经过进一