Apache spark Spark流句柄倾斜Kafka分区
场景:Apache spark Spark流句柄倾斜Kafka分区,apache-spark,apache-kafka,spark-streaming,Apache Spark,Apache Kafka,Spark Streaming,场景: 卡夫卡->火花流 每个Spark流媒体微批次中的逻辑(30秒): 阅读Json->解析Json->发送给卡夫卡 我的流媒体工作是读取大约1000个Kafka主题,大约10K个Kafka分区,吞吐量大约500万个事件/s 问题在于Kafka分区之间的流量负载不均衡,一些分区的吞吐量大约是较小分区的50倍,这会导致RDD分区倾斜(因为KafkaUtils创建了从Kafka分区到Spark分区的1:1映射),并真正影响了整体性能,因为对于每个微批次,大多数执行者都在等待负载最大的一个完成,我通
卡夫卡->火花流 每个Spark流媒体微批次中的逻辑(30秒):
阅读Json->解析Json->发送给卡夫卡 我的流媒体工作是读取大约1000个Kafka主题,大约10K个Kafka分区,吞吐量大约500万个事件/s 问题在于Kafka分区之间的流量负载不均衡,一些分区的吞吐量大约是较小分区的50倍,这会导致RDD分区倾斜(因为KafkaUtils创建了从Kafka分区到Spark分区的1:1映射),并真正影响了整体性能,因为对于每个微批次,大多数执行者都在等待负载最大的一个完成,我通过查看Spark UI了解到这一点,在每个微批次的某个点上,只有少数执行者有“活动”任务,所有其他执行者都完成了任务并等待,同样通过查看任务时间分布,最大值为2.5分钟,但中位数仅为20秒 注:
如何使工作负载在Spark执行器之间更均匀地分布,以便更有效地使用资源?性能会更好吗 实际上你已经给出了自己的答案 不要从1000个主题中读取1个流作业。将负载最大的任务放入单独的流作业中。重新配置,很简单。负载平衡,排队论
散乱者是Spark中的一个问题,尽管散乱者在Spark中表现出稍微不同的特征 这个问题仍然有机会被看到和回答。仅仅因为两个人发现它没有用并不意味着它不会被回答。请不要在评论中冒犯我们,这将增加最终有人回答或帮助您的机会。您可以尝试更新问题以使其更好,也可以改变主意并删除它。投票和结束也是我们给你反馈的方式。也许一些卡夫卡专家会来指导你如何提高问题的质量。尽量不要读太多。你不需要因为某人决定否决某个问题就删除它。即使这个问题不受欢迎,也许你的下一个问题也会成功。请不要在你问题下的评论中大喊大叫。如果你有改进的想法,那就把它带到办公室。我很清楚,即使我向你们解释了什么是反对票,你们仍然不明白评级是如何运作的。我可以争辩说,任何想投票的人都应该留下一条强制性的评论,但你可以看到这会变得多么可笑。你把选票看得太个人了。你的生活并不依赖于他们。这种偏斜是如何发生的?来源是什么?你能影响将其放入不同的分区吗?即feed?@thebluephantom偏斜来自Kafka主题,Kafka主题之间的数据量差异非常大(大约50倍),这导致了Spark分区偏斜(因为Spark为每个Kafka分区创建1个RDD分区)