我们正在尝试在 spark 中实现 Window 功能。Spark 通过 Kafka(有 5 个分区)接收数据,我们使用 Spark Java DStream 进行处理。一旦将来自 kafka 的逗号分隔数据映射到 Spark 中的对象,我们就会创建一个 20 秒的窗口,该窗口以 1 秒的速度滑动。在这个 Java DStream 上,我们计算并打印输出(实际上我们想做更多的处理,但为简单起见只应用了计数)。一切正常,直到处理时间出现峰值,处理一个任务大约需要 40 秒,然后发布,我们得到了一个很长的队列。集群详细信息: - 3 个节点集群 - 每个有 45 个核心(总共 135 个核心) - 每个有 256 GB RAM 测试设置:设置 1:- - 5 个 Kafka 分区 - 20 秒窗口,每个节点45 个执行器(总共 135 个执行器) - 为每个执行器分配1 GB 设置 3:- - 5 个 Kafka 分区 - 20 秒窗口,以 1 秒滑动 -每个节点15 个执行器(总共 45 个执行器) - 为每个执行器分配6 GB设置 4:- - 5 个 Kafka 分区 - 120秒窗口,以 1 秒滑动 - 每个节点 9 个执行器(总共 27 个执行器) - 为每个执行器分配 10 GB 设置 5:- (这是我们的实际场景) - 27个Kafka 分区 - 120秒窗口,以 1 秒滑动 - 每个节点 9 个执行器(总共 27 个执行器) - 为每个执行器分配 10 GB
在所有设置中,在某些时候处理需要太多时间(在大多数处理问题中接近 40 秒)。如果有人有解决方案或任何参数更改建议,那就太好了。