使用PySpark使用Kafka进行Spark流式处理-处理时间长(缓慢/延迟)

时间:2019-03-21 04:45:34

标签: apache-spark pyspark apache-kafka

我正在研究一个简单的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的处理时间是否正常?我可以设置任何配置以缩短处理时间吗?

非常感谢。

0 个答案:

没有答案