Apache spark 火花流-运动-接收器数量和碎片之间的相关性

Apache spark 火花流-运动-接收器数量和碎片之间的相关性,apache-spark,spark-streaming,amazon-kinesis,Apache Spark,Spark Streaming,Amazon Kinesis,我们正在spark中消耗一个运动流,并且流中有多个碎片。按照示例中的代码 //创建动态数据流 List streamsList=新阵列列表(numStreams); for(int i=0;i1){ unionStreams=jssc.union(streamsList.toArray(新JavaDStream[0]); }否则{ //否则,只需使用1流 unionStreams=streamsList.get(0); } 最初,我们创建的数据流数量与碎片数量相同 我们发现,我们能够使用较少

我们正在spark中消耗一个运动流,并且流中有多个碎片。按照示例中的代码

//创建动态数据流
List streamsList=新阵列列表(numStreams);
for(int i=0;i1){
unionStreams=jssc.union(streamsList.toArray(新JavaDStream[0]);
}否则{
//否则,只需使用1流
unionStreams=streamsList.get(0);
}
最初,我们创建的数据流数量与碎片数量相同

我们发现,我们能够使用较少数量的数据流(这反过来又被注册为接收器)从所有碎片中消费事件

由于每个接收器在运行时()期间都占用一个核心,因此接收器的数量少于碎片的数量对我们来说是非常有意义的。我们能够在负载一进来就消耗掉所有负载,并且无需排队就可以处理它

我的问题是:

  • 什么控制相对于负载必须创建的数据流的数量
  • 数据流数量少于碎片数量会影响磁盘使用吗 还是堆
  • // Create the Kinesis DStreams
        List<JavaDStream<byte[]>> streamsList = new ArrayList<>(numStreams);
        for (int i = 0; i < numStreams; i++) {
          streamsList.add(JavaDStream.fromDStream(
              KinesisInputDStream.builder()
                  .streamingContext(jssc)
                  .checkpointAppName(kinesisAppName)
                  .streamName(streamName)
                  .endpointUrl(endpointUrl)
                  .regionName(regionName)
                  .initialPosition(new KinesisInitialPositions.Latest())
                  .checkpointInterval(kinesisCheckpointInterval)
                  .storageLevel(StorageLevel.MEMORY_AND_DISK_2())
                  .build(),
              ClassTag$.MODULE$.apply(byte[].class)
          ));
        }
    
        // Union all the streams if there is more than 1 stream
        JavaDStream<byte[]> unionStreams;
        if (streamsList.size() > 1) {
          unionStreams = jssc.union(streamsList.toArray(new JavaDStream[0]));
        } else {
          // Otherwise, just use the 1 stream
          unionStreams = streamsList.get(0);
        }