我在Spark Streaming中遇到严重的性能问题。对于10秒的批处理间隔,程序大约需要2分钟。我尝试调试时没有来自kafka主题的0条消息。即使没有消耗/处理的消息,大多数转换也要花费30秒以上的时间。即使decodeMessagesDF中没有消息,下面的命令也将花费大约40秒。
val enrichedDF: DataFrame = decodeMessagesDF.join(broadcast(customer), (decodeMessagesDF( "rowkey") === customer("rowkey")) && (customer("mkt_opto_flag") === "N") && (customer("ads_opto_flag") === "N"))
下面的发布代码也需要大约30秒的时间来发布0条消息
message.foreachPartition{ part =>
val producer = new KafkaProducer[String, String](props)
part.foreach{ msg =>
val message = new ProducerRecord[String, String](topic, msg._1, msg._2)
producer.send(message)
}
producer.close()
}
请让我知道代码中是否有错误。谢谢
答案 0 :(得分:0)
如果'customer'拥有大量数据,广播会很昂贵。也许您应该将广播(customer)排除在这样的联接操作之外:
val consumerBroadcast = sc.broadcast(customer)
val enrichedDF: DataFrame = decodeMessagesDF.join(broadcast(consumerBroadcast), (decodeMessagesDF( "rowkey") === customer("rowkey")) && (customer("mkt_opto_flag") === "N") && (customer("ads_opto_flag") === "N"))
此代码仅广播一次客户,但是您的代码将每批广播一次。