0

我对 Spark Streaming 很陌生。我有一些基本的疑问。有人可以帮我澄清一下吗:

  1. 我的消息大小是标准的。每条消息 1Kb。

  2. 主题分区数为 30,并使用 dstream 方法从 kafka 消费消息。

  3. 为 spark 作业分配的核心数为:

    (spark.max.cores=6|spark.executor.cores=2)

  4. 据我了解,Kafka 分区数 = RDD 分区数:

     In this case dstream approach:
    
     dstream.forEachRdd(rdd->{
     rdd.forEachPartition{
     }
    
      **Question**:This loop forEachPartiton will execute 30 times??As there are 30 Kafka partitions
    

    }

  5. 另外由于我给了 6 个核心,从 kafka 将并行消耗多少个分区

    问题:一次是6个分区还是一次
    30/6 = 5个分区?有人可以详细说明这在 dstream 方法中是如何工作的。

4

1 回答 1

1

“是一次 6 个分区还是一次 30/6 = 5 个分区?”

正如您已经说过的,Direct Stream 中生成的 RDD 将匹配 Kafka 主题的分区数。

在每个微批处理上,Spark 将创建 30 个任务来读取每个分区。由于您已将最大内核数设置为 6,因此作业能够并行读取 6 个分区。一旦其中一项任务完成,就可以使用新的分区。

请记住,即使分区中没有新数据,生成的 RDD 仍然会得到 30 个分区,所以,是的,循环forEachPartiton将在每个微批次中迭代 30 次。

于 2020-12-23T04:12:54.920 回答