Apache spark 火花流-运动-接收器数量和碎片之间的相关性
我们正在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); } 最初,我们创建的数据流数量与碎片数量相同 我们发现,我们能够使用较少
//创建动态数据流
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);
}