繁体   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