我已经为Apache Kafka中的流中的传入事件设置了管道。
Spark连接到Kafka,从主题中获取信息流并处理一些“简单”的聚合任务。
当我尝试构建应该具有低延迟刷新(在1秒以下)的服务时,我已经在Scala中构建了一个简单的Spark流媒体应用。
val windowing = events.window(Seconds(30), Seconds(1))
val spark = SparkSession
.builder()
.appName("Main Processor")
.getOrCreate()
import spark.implicits._
// Go into RDD of DStream
windowing.foreachRDD(rdd => {
// Convert RDD of JSON into DataFrame
val df = spark.read.json(rdd)
// Process only if received DataFrame is not empty
if (!df.head(1).isEmpty) {
// Create a view for Spark SQL
val rdf = df.select("user_id", "page_url")
rdf.createOrReplaceTempView("currentView")
val countDF = spark.sql("select count(distinct user_id) as sessions from currentView")
countDF.show()
}
它按预期工作。我担心的是此时的性能。出于测试目的,Spark在4个CPU的Ubuntu服务器上运行。
CPU使用率一直保持在35%左右。我想知道流中的传入数据是否为500 msg / s,CPU使用率将如何变化?它会增长经验。或以线性方式?
如果您能在这种情况下与Apache Spark交流经验,
最后一个开放的问题是,是否将滑动窗口间隔设置为500ms(如我所愿)?我的意思是,Spark流功能似乎是新鲜的,并且批处理架构可能是真正实时数据处理的限制,不是吗?