簡體   English   中英

Kafka結構化流檢查點

[英]Kafka Structured Streaming checkpoint

我正在嘗試從Kafka中進行結構化流式傳輸。 我打算將檢查點存儲在HDFS中。 我讀了一個Cloudera博客,建議不要在HDFS中將檢查點存儲在Spark流中。 結構流檢查點是否存在相同問題? https://blog.cloudera.com/blog/2017/06/offset-management-for-apache-kafka-with-apache-spark-streaming/

在結構化流中,如果我的spark程序在特定時間內關閉,如何從檢查點目錄中獲取最新的偏移量,並在該偏移量之后加載數據。 我將檢查點存儲在目錄中,如下所示。

 df.writeStream\
        .format("text")\
        .option("path", '\files') \
        .option("checkpointLocation", 'checkpoints\chkpt') \
        .start()

更新:

這是我的結構化流程序,讀取Kafka消息,解壓縮並寫入HDFS。

df = spark \
        .readStream \
        .format("kafka") \
        .option("kafka.bootstrap.servers", KafkaServer) \
        .option("subscribe", KafkaTopics) \
        .option("failOnDataLoss", "false")\
         .load()
Transaction_DF = df.selectExpr("CAST(value AS STRING)")
Transaction_DF.printSchema()

decomp = Transaction_DF.select(zip_extract("value").alias("decompress"))
#zip_extract is a UDF to decompress the stream

query = decomp.writeStream\
    .format("text")\
    .option("path", \Data_directory_inHDFS) \
    .option("checkpointLocation", \pathinDHFS\) \
    .start()

query.awaitTermination()

首選將Checkpoint存儲在長期存儲(HDFS,AWS S3等)上。 我想在此補充一點,不應將屬性“ failOnDataLoss”設置為false,因為這不是最佳實踐。 數據丟失是沒人願意承擔的。 休息,您在正確的道路上。

在查詢中,嘗試在將結果以鑲木地板等某種格式寫入某些持久性存儲(如HDFS)時應用檢查點。 對我來說很好。

據我了解,它建議在以下位置維護偏移量管理:Hbase,Kafka,HDFS或Zookeeper。

“值得一提的是,您還可以將偏移量存儲在HDFS之類的存儲系統中。與上述選項相比,將偏移量存儲在HDFS中是一種不太流行的方法,因為與其他系統(如ZooKeeper和HBase)相比,HDFS的延遲更高。”

您可以在Spark文檔中找到如何從現有檢查點重新啟動查詢, 網址為: http : //spark.apache.org/docs/latest/structured-streaming-programming-guide.html#recovering-from-failures-with-checkpointing

在結構化流中,如果我的spark程序在特定時間內關閉,如何從檢查點目錄中獲取最新的偏移量,並在該偏移量之后加載數據。

在您的checkpointdir文件夾下,您會找到一個名為“ offsets”的文件夾。 文件夾“偏移”會保留下一個要從kafka請求的偏移。 打開“偏移量”文件夾下的最新文件(最新批處理文件),下一個預期的偏移量將采用以下格式

{"kafkatopicname":{"2":16810618,"1":16810853,"0":91332989}}

要在該偏移量之后加載數據,請將以下屬性設置為您的火花讀取流

 .option("startingOffsets", "{\""+topic+"\":{\"0\":91332989,\"1\":16810853,\"2\":16810618}}")

0,1,2是主題中的分區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM