我们可以在MySQL表中而不是HDFS或S3中存储Spark-SQL-Kafka偏移量

时间:2018-08-30 14:33:41

标签: apache-spark apache-spark-sql spark-structured-streaming

我有一个简单的Spark-SQL-Kafka程序,可从Kafka读取并写入HDFS。

对于检查点,我过去使用过HDFS和S3,它工作正常。

有没有一种方法可以使用MySQL进行检查点设置?

.option("checkpointLocation", ConfigLoader.getValue("checkpointPath"))

我们如何配置到MySQL表?

DataStreamReader kafkaDataStreamReader = sparkSession.readStream()
        .format("kafka")
        .option("kafka.bootstrap.servers", ConfigLoader.getValue("brokers"))
        .option("group.id", ConfigLoader.getValue("groupId"))
        .option("subscribe", ConfigLoader.getValue("topics"))
        .option("failOnDataLoss", false);
Dataset<Row> rawDataSet = kafkaDataStreamReader.load();                         
rawDataSet.createOrReplaceTempView("rawEventView");

sqlCtx.sql("select * from rawEventView")
        .writeStream()
        .partitionBy(JavaConversions.asScalaBuffer(Arrays.asList(("date_year,date_month,date_day,date_hour,date_minute").split(","))))
        .format("csv")
        .option("header", "true")
        .option("compression","gzip")
        .option("delimiter", "~")
        .option("checkpointLocation", ConfigLoader.getValue("checkpointPath"))
        .option("path", ConfigLoader.getValue("recordsPath"))
        .outputMode(OutputMode.Append())
        .trigger(ProcessingTime.create(Integer.parseInt(ConfigLoader.getValue("kafkaProcessingTimeInSeconds")), TimeUnit.SECONDS))
        .start()
        .awaitTermination();

0 个答案:

没有答案