首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >火花流卡夫卡背压

火花流卡夫卡背压
EN

Stack Overflow用户
提问于 2016-04-15 07:57:16
回答 1查看 4.8K关注 0票数 6

我们有一个Spark流应用程序,它从接收端的Kafka队列中读取数据,并对HDFS进行一些转换和输出。间歇间隔为1 1min,我们已经对背压和spark.streaming.receiver.maxRate参数进行了调整,所以大部分时间工作得很好。

但我们还有一个问题。当HDFS完全关闭时,批处理作业将挂起很长时间(假设HDFS不工作4小时,作业挂起4小时),但接收方不知道作业未完成,因此仍在接收下4个小时的数据。这会导致OOM异常,并且整个应用程序被关闭,我们丢失了大量的数据。

所以,我的问题是:是否可以让接收者知道作业没有完成,所以它会收到更少的(甚至没有)数据,当工作完成时,它会开始收到更多的数据来追赶。在上述情况下,当HDFS关闭时,接收方从Kafka读取较少的数据,在接下来的4小时内生成的块非常小,接收器和整个应用程序都没有关闭,HDFS正常后,接收器将读取更多数据并启动追赶。

EN

回答 1

Stack Overflow用户

发布于 2016-12-04 12:36:49

可以通过设置属性spark.streaming.backpressure.enabled=true来启用背压。这将动态地修改批处理大小,并将避免从队列构建中获得OOM的情况。它有几个参数:

  • spark.streaming.backpressure.pid.proportional -对上一批大小错误的响应信号(默认为1.0)
  • spark.streaming.backpressure.pid.integral -对累积误差的响应信号-有效的阻尼器(默认为0.2)
  • spark.streaming.backpressure.pid.derived -对错误趋势的响应(用于快速响应更改,默认为0.0)
  • spark.streaming.backpressure.pid.minRate -批处理频率所暗示的最低速率,将其更改为减少高吞吐量作业中的不足(默认为100)。

缺省值很好,但我模拟了算法对各种参数这里的响应。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36641401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档