我在接收器模型中使用Kafka开发了spark stream(1.6.2),并以15秒的批处理大小运行此作业。
第一批收到很多事件,处理记录非常慢。突然作业失败,然后再次重新启动。请看下面的截图。
它正在缓慢处理记录,但是没有按预期完成所有这些批处理,并且不想看到此队列堆积。
我们如何将输入大小控制为大约15至20k个事件?我尝试启用spark.streaming.backpressure.enabled,但看不到任何改善。
我还如下实现了“数据接收中的并行度”,但仍然看不到输入大小的任何变化。
val numStreams = 5
val kafkaStreams = (1 to numStreams).map { i => KafkaUtils.createStream(...) }
val unifiedStream = streamingContext.union(kafkaStreams)
unifiedStream.print()
我正在使用6个执行程序和20个内核。
我的代码概述:
我正在从Kafka中读取日志并进行处理,并每隔15秒就将其存储在elasticsearch中。
请让我知道如何控制输入尺寸并改善作业性能,或者如何确保批次不堆积。