我正在尝试运行Spark Streaming作业来读取来自Kafka的消息。为了测试,我向Kafka插入了几千兆字节的消息,然后启动了流媒体作业(python)。
from spark import SparkContext, SparkConf
from pyspark.streaming import StreamingContext
conf = SparkConf()
conf.setMaster("spark://master1:7077,master2:7077,master3:7077")
sc = SparkContext(conf=conf)
ssc = StreamingContext(sc, 1)
from pyspark.streaming.kafka import KafkaUtils
directKafkaStream = KafkaUtils.createDirectStream(ssc, ["test_topic"], {"metadata.broker.list": "kafka1:9092,kafka2:9092,kafka3:9092", "auto.offset.reset": "smallest"})
directKafkaStream.count().pprint()
ssc.start()
ssc.awaitTermination()
我希望这份工作能够每秒更新一次,并记录到目前为止的消息(流媒体)。但是,作业会计算队列中的所有消息(无论何时消耗),并且只有在计算完所有消息之后,才会看到更新(批处理)。
拜托,有谁能告诉我这里错过了什么。
更新: 我期待看到的是:
-------------------------------------------
Time: 2016-01-28 16:23:42
-------------------------------------------
1000000
-------------------------------------------
Time: 2016-01-28 16:23:43
-------------------------------------------
10000000
我实际看到的是什么:
16/01/28 16:25:10 INFO JobScheduler: Added jobs for time 1453994710000 ms
16/01/28 16:25:11 INFO JobScheduler: Added jobs for time 1453994711000 ms
16/01/28 16:25:12 INFO JobScheduler: Added jobs for time 1453994712000 ms
16/01/28 16:25:13 INFO JobScheduler: Added jobs for time 1453994713000 ms
16/01/28 16:25:14 INFO JobScheduler: Added jobs for time 1453994714000 ms
16/01/28 16:25:15 INFO JobScheduler: Added jobs for time 1453994715000 ms
16/01/28 16:25:16 INFO JobScheduler: Added jobs for time 1453994716000 ms
...