Apache spark 卡夫卡流到火花不会减少计数

Apache spark 卡夫卡流到火花不会减少计数,apache-spark,streaming,apache-kafka,Apache Spark,Streaming,Apache Kafka,我正在尝试一个从kafka到spark的基本流媒体示例。我对spark非常陌生,没有什么经验 我的程序如下(复制自apache spark中的示例): if(args.lengthArrays.asList(SPACE.split(x)).iterator()); JavaPairDStream wordCounts=words.mapToPair(s->new Tuple2(s,1)) .还原基((i1,i2)->i1+i2); wordCounts.print(); jssc.start()

我正在尝试一个从kafkaspark的基本流媒体示例。我对spark非常陌生,没有什么经验

我的程序如下(复制自apache spark中的示例):

if(args.length<4){
System.err.println(“用法:JavaKafkaWordCount”);
系统出口(1);
}
字符串zkQuorum=args[0];
字符串groupId=args[1];
字符串topicsToListen=args[2];
字符串numothread=args[3];
StreamingExamples.setStreamingLogLevels();
SparkConf SparkConf=new SparkConf().setAppName(“JavaKafkaWordCount”);
//创建具有2秒批大小的上下文
JavaStreamingContext jssc=新的JavaStreamingContext(sparkConf,新的持续时间(2000));
int numThreads=Integer.parseInt(numthread);
Map topicMap=newhashmap();
String[]topics=topicsToListen.split(“,”);
for(字符串主题:主题){
put(主题,numThreads);
}
JavaPairReceiverInputStream消息=
创建流(jssc、zkQuorum、groupId、topicMap);
JavadStreamLines=messages.map(Tuple2::2);
JavaDStream words=lines.flatMap(x->Arrays.asList(SPACE.split(x)).iterator());
JavaPairDStream wordCounts=words.mapToPair(s->new Tuple2(s,1))
.还原基((i1,i2)->i1+i2);
wordCounts.print();
jssc.start();
jssc.aittimination();
然后启动我的kafka代理,并通过生成以下命令来运行构建的jar:

$SPARK_HOME/bin/SPARK submit--class“JavaKafkaWordCount”--主本地[2]路径_TO_JAR/kafka-SPARK-streaming-1.0-SNAPSHOT-JAR-with-dependencies.JAR本地主机:2181测试消费者组测试1

当我从《卡夫卡》制作人那里制作一些单词时,我希望一个单词的数量会增加很多倍,但我看到的只是单词和的数量,因为每一次新的发布都会打印一个单词:

(你好,1)

当我不止一次地发表同一个词时,我希望数量会增加

(你好,2)

但事实并非如此。我到底理解错了什么?这与我传递给这份工作的论点有关,还是与这份工作的目的有关

有人能提供一些见解吗

谢谢
SHabir

读了几遍代码后,我设法找出了为什么每个单词的计数总是为1,而不是合计总数

在以下行中:

// Create the context with 2 seconds batch size
JavaStreamingContext jssc = new JavaStreamingContext(sparkConf, new Duration(2000));
我将流中连续读取之间的间隔设置为2秒。我意识到,在生产者端,我没有在这个间隔(2秒)内生成足够多的相同字符串内容来获得聚合结果

但是,当我将这个间隔增加到10000毫秒(10秒)时,我可以从卡夫卡制作者那里产生多行数据。作业会适当地处理这些行,并在特定的时间间隔内很好地聚合类似的字符串计数

(你好,4)

(世界,6)

非常感谢
Shabir

读了几遍代码后,我设法找出了为什么每个单词的计数总是为1,而不是合计总数

在以下行中:

// Create the context with 2 seconds batch size
JavaStreamingContext jssc = new JavaStreamingContext(sparkConf, new Duration(2000));
我将流中连续读取之间的间隔设置为2秒。我意识到,在生产者端,我没有在这个间隔(2秒)内生成足够多的相同字符串内容来获得聚合结果

但是,当我将这个间隔增加到10000毫秒(10秒)时,我可以从卡夫卡制作者那里产生多行数据。作业会适当地处理这些行,并在特定的时间间隔内很好地聚合类似的字符串计数

(你好,4)

(世界,6)

非常感谢 沙比尔