我编写了一个结构化的流媒体应用程序,将数据实时推送到S3。我们接收来自卡夫卡的数据,并在使用结构化流处理数据后将数据推送到S3。
我知道星火流支持资源的动态分配。但在JIRA https://issues.apache.org/jira/browse/SPARK-24815之后发现,结构化流不支持资源的动态分配。
想知道在当前结构化流不支持动态资源分配时如何处理数据尖峰。
不实现动态分配的推理如下(来自JIRA):,如果我们设置spark.dynamicAllocation.enabled=true并运行结构化流作业,批处理动态分配算法就会启动。如果任务积压有一定的大小,它会请求更多的执行程序,如果任务待机一段时间,它就会移除执行程序。它基本上是指批处理,而不是连续处理。在批处理模式下,我们关心的是numRunningOrPendingTasks,而流的比率是: averageBatchProcTime.toDouble /批处理,即每单位时间平均批处理时间,所以在空闲时缩小系统不是一个有效的解决方案。
问题:当不提供动态资源分配时,如何处理尖峰。
发布于 2022-02-04 06:08:40
因此,通过将minPartitions设置为高于主题分区的数目,假设主题中有10个分区,并且设置了minPartitions=1000,任务数量上下缩放以满足触发间隔。然而,当负载下降时,Kafka源仍然考虑消费者缓存和循环所有执行器上的任务。因此,执行者永远不会因为dynamicAllocation空闲时间而保持空闲状态。
https://stackoverflow.com/questions/60780637
复制相似问题