我正在研究一个简单的POC,如何利用Spark和Kafka。在此POC中,我将PySpark用于流应用程序(我选择了Direct Approach)。
数据源:我创建了3个简单的nodejs应用程序,以继续为名为“ messagetopic-a”的同一kafka主题生成数据。这些应用每2秒分别产生一个字符“ A”,“ B”和“ C”。
火花流应用程序:
def start():
sconf=SparkConf()
sconf.set('spark.cores.max' , 8)
sconf.set('spark.executor.cores',4)
sconf.set('spark.driver.memory','2g')
sc=SparkContext(appName='PythonStreamingDirectKafkaWordCount',conf=sconf)
ssc=StreamingContext(sc,2)
brokers="localhost:9092"
topic='messagetopic-a'
topicPartion = TopicAndPartition(topic, 0)
fromOffset = {topicPartion: 1}
kvs = KafkaUtils.createDirectStream(ssc,[topic],kafkaParams={"metadata.broker.list": brokers},fromOffsets = fromOffset)
lines = kvs.map(lambda x: x[1])
counts = lines.flatMap(lambda line: line.split(" ")).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a+b)
counts.pprint()
ssc.start()
ssc.awaitTermination()
if __name__ == '__main__':
start()
用于启动spark应用程序的命令:
bin\spark-submit --packages org.apache.spark:spark-streaming-kafka-0-8_2.11:2.2.0 D:\spark-2.3.3-bin-hadoop2.7\python\sparkStreaming_directApproach.py
我的问题:
当我访问SparkUI并检查处理时间时,对于第一个批处理作业,需要42秒才能处理8064条记录。对于第一个作业之后的作业,大约需要6到8秒才能完成10到12秒。
我正在使用便携式计算机进行POC,并且我使用的Windows 10内存为16GB。
我想知道此POC的处理时间是否正常?我可以设置任何配置以缩短处理时间吗?
非常感谢。