Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 使用Spark Streaming时限制Kafka批次大小_Apache Spark_Apache Kafka_Spark Streaming_Kafka Consumer Api - Fatal编程技术网

Apache spark 使用Spark Streaming时限制Kafka批次大小

Apache spark 使用Spark Streaming时限制Kafka批次大小,apache-spark,apache-kafka,spark-streaming,kafka-consumer-api,Apache Spark,Apache Kafka,Spark Streaming,Kafka Consumer Api,是否可以限制Kafka消费者返回的用于Spark流媒体的批次的大小 我这样问是因为我得到的第一批记录有数亿条,处理和检查它们需要很长时间。我想你的问题可以通过火花流式背压解决 检查spark.streaming.backpressure.enabled和spark.streaming.backpressure.initialRate 默认情况下,spark.streaming.backpressure.initialRate未设置,spark.streaming.backpressure.ena

是否可以限制Kafka消费者返回的用于Spark流媒体的批次的大小


我这样问是因为我得到的第一批记录有数亿条,处理和检查它们需要很长时间。

我想你的问题可以通过火花流式背压解决

检查
spark.streaming.backpressure.enabled
spark.streaming.backpressure.initialRate

默认情况下,
spark.streaming.backpressure.initialRate
未设置,
spark.streaming.backpressure.enabled
默认情况下为禁用,因此我认为spark将尽可能多地使用

spark.streaming.backpressure.enabled

这使得Spark Streaming能够基于数据流控制接收速率 对当前批量调度的延迟和处理时间进行分析,以便 系统接收的速度与系统处理的速度一样快。 在内部,这将动态设置 接受者。此速率由值的上限确定
spark.streaming.receiver.maxRate
spark.streaming.kafka.maxRatePerPartition
如果已设置(请参见下文)

由于您想要控制第一批,或者更具体地说,第一批中的消息数量,我认为您需要
spark.streaming.backpressure.initialRate

spark.streaming.backpressure.initialRate

这是每个接收器将接收的初始最大接收速率 当背压机构关闭时,接收第一批数据 启用

当您的Spark job(分别是Spark workers)能够处理来自kafka的10000条消息,但kafka代理为您的工作提供100000条消息时,这条消息是很好的


除了上述答案之外,您可能还想查看spark.streaming.kafka.maxRatePerPartition,以及一些关于这些属性的研究和建议。

。批量大小是3个参数的乘积

  • batchDuration
    :将流式数据划分为批的时间间隔(以秒为单位)
  • spark.streaming.kafka.maxRatePerPartition
    :设置每秒每个分区的最大消息数。当与
    batchDuration
    结合使用时,将控制批次大小。您希望设置
    maxRatePerPartition
    ,并将其设置为较大(否则会有效地限制作业)和
    batchDuration
    非常小
  • kafka主题中的分区数

  • 为了更好地解释背压启用/禁用()时该产品的工作原理,限制最大批处理大小将大大有助于控制处理时间,但会增加消息的处理延迟

    通过以下属性的设置,我们可以控制批量大小 spark.streaming.receiver.maxRate= spark.streaming.kafka.maxRatePerPartition=

    通过启用背压,您甚至可以根据处理时间动态设置批处理大小 火花.流.背压.启用:真
    spark.streaming.backpressure.initialRate:

    这就是我要找的,谢谢。不幸的是,spark.streaming.backpressure.initialRate、spark.streaming.backpressure.enabled、spark.streaming.receiver.maxRate和spark.streaming.receiver.initialRate都没有更改我获得的记录数(我尝试了许多不同的组合)。唯一有效的配置是“spark.streaming.kafka.maxRatePerPartition”。这总比什么都不做要好,但如果能为自动缩放启用背压,我会很有用。你知道为什么背压不起作用吗?如何调试这个?也许
    spark.streaming.backpressure.initialRate
    可以工作,但正如Jeroen van Wilgenburg在他的博客中所注意到的,“设置最大值是个好主意,因为背压算法不是即时的(这是不可能的)…当卡夫卡决定在最初几秒钟内每秒给我们50000条记录时,卡夫卡输入的作业可能会处理大约1000个事件。”。。但是我很困惑,因为它不起作用。
    spark.streaming.backpressure.enabled
    应该在最新的流媒体文档上“在内部动态设置接收器的最大接收速率”,它提到设置
    spark.streaming.backpressure.enabled
    动态地处理速率。“在Spark 1.5中,我们引入了一种称为背压的功能,无需设置此速率限制,因为Spark Streaming会自动计算速率限制,并在处理条件发生变化时动态调整。”,这可以解释为什么属性设置为true时速率不起作用。我使用的是spark 1.6.1和createStream API,我也无法利用spark.streaming.backpressure.enabled=true它对我也不起作用,唯一适合我的设置是spark.streaming.receiver.MaxRate这种方法适用于spark结构化流媒体吗?您当前的批处理间隔是多少?如果更多的话,试着缩短批处理间隔,这样你可以得到更少的数据。忽略你的问题,你提到的第一批。这个答案比公认的答案更准确。这真的很有意义。谢谢你的澄清。但我的情况却没有什么不同。在我的工作中,我从多个主题进行消费。所以,问题是:NumberOfTopics X NumberOfPartitions X MaxRatePerPartition X BatchDuration,我想设置最大值。使用Spark 2.4和直接卡夫卡流。