spark结构化流--kafka

我们的场景是通过spark-streaming读取kafka数据,实时持久化到hdfs上。并按day和hour分区。就像这种格式:

kafka:0.10.2.0

hdfs:2.7.3

spark:2.2.0


核心代码如下:

spark结构化流--kafka_第1张图片

repartition是由于生成文件数量过多,合理合并分区能减少。如果用coalesce会导致任务不能并行(如果是1, 就那就只有一个node运行)。

checkpoint能保证任务挂掉,在kafka数据没有过期前重启能继续正确的运行。但是超过时间会报错Kafka OffSetOutOfRange而导致失败。如果此时你删掉checkpoint dir,任务能正常执行但是会发现它并不会去读取kafka分区的数据。这是因为还有一个地方记录着你的流式处理元信息。

spark结构化流--kafka_第2张图片

它记录着你流式批次信息,如果不删除,spark-streaming会认为你一直在提交过期的job,导致数据不被处理。


当然,这只是结构化流一点使用心得。更多的文档信息在https://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html

你可能感兴趣的:(spark结构化流--kafka)