10.8 性能考量

批次和窗口大小

总的来说,500 毫秒已经被证实为对许多应用而言是比较好的最小批次大小。

寻找最小批次大小的最佳实践是从一个比较大的批次大小(10 秒左右)开始,不断使用更小的批次大小。

如果 Streaming 用户界面中显示的处理时间保持不变,你就可以进一步减小批次大小。如果处理时间开始增加,你可能已经达到了应用的极限。

并行度

有以下三种方式可以提高并行度:

垃圾回收和内存使用

Java 的垃圾回收机制(简称 GC)也可能会引起问题。

可以通过打开 Java 的并发标志清除收集器(Concurrent Mark-Sweep garbage collector)来减少 GC 引起的不可预测的长暂停。

并发标志—清除收集器总体上会消耗更多的资源,但是会减少暂停的发生。 可以通过在配置参数 spark.executor.extraJavaOptions 中添加 -XX:+UseConcMarkSweepGC来控制选择并发标志—清除收集器。

打开并发标志—清除收集器:
spark-submit --conf spark.executor.extraJavaOptions=-XX:+UseConcMarkSweepGC App.jar

还可以通过减轻 GC 的压力来大幅度改善性能。