如何并行写入火花结构化流中的多个接收器

时间:2019-05-20 07:40:11

标签: apache-spark spark-streaming

enter code here无法并行化结构化流中的多个接收器写入。

我正在使用结构化流从多个Kafka主题读取数据,然后转换数据,然后将其写入MySQL。对于每个输入/转换流,创建不同的接收器。 问题在于,这些中的每一个都会在持续的延迟后得到处理。 Spark似乎并未并行处理不同流的处理。 大部分时间都花在了驱动程序上。

def readStream(topic: String, brokers: String, groupId: String): DataFrame = {
    ss
        .readStream
        .format("kafka")
        .option("kafka.bootstrap.servers", brokers)
        .option("subscribe", topic)
        .option("enable.auto.commit", false)
        .option("group.id", groupId)
        .option("failOnDataLoss", false)
        .option("startingOffsets", startOffset)
        .load()

}

def process(): Unit = {
    val ss = SparkUtil.getAndCreateSparkSession()
    val topics = Array("topic-1", "topic-2")
    val streams = topics.map(t => readStream(t, "localhost:9092", "kafka-reader"))
    val processedStream = streams.map(s => transform(s))

    val queries = processedStream.map(stream => stream.writeStream.outputMode(OutputMode.Append()).foreachBatch(save _).start())
    ss.streams.awaitAnyTermination()

}

0 个答案:

没有答案