在 Spark 批处理作业中读取 Kafka 主题
Read Kafka topic in a Spark batch job
我正在编写一个从 Kafka 主题读取的 Spark (v1.6.0) 批处理作业。
为此,我可以使用 org.apache.spark.streaming.kafka.KafkaUtils#createRDD
但是,
我需要为所有分区设置偏移量,还需要将它们存储在某个地方(ZK?HDFS?)以了解从哪里开始下一个批处理作业。
在 批处理 作业中从 Kafka 读取的正确方法是什么?
我也在考虑编写一个 streaming 作业,它从 auto.offset.reset=smallest
读取并保存检查点
到 HDFS,然后在下一个 运行 中从那里开始。
但在这种情况下,我如何才能只获取一次并在第一批之后停止流式传输?
createRDD
是从 kafka 读取批次的正确方法。
要查询有关最新/最早可用偏移量的信息,请查看KafkaCluster.scala
方法getLatestLeaderOffsets
和getEarliestLeaderOffsets
。该文件是 private
,但在最新版本的 spark 中应该是 public
。
我正在编写一个从 Kafka 主题读取的 Spark (v1.6.0) 批处理作业。
为此,我可以使用 org.apache.spark.streaming.kafka.KafkaUtils#createRDD
但是,
我需要为所有分区设置偏移量,还需要将它们存储在某个地方(ZK?HDFS?)以了解从哪里开始下一个批处理作业。
在 批处理 作业中从 Kafka 读取的正确方法是什么?
我也在考虑编写一个 streaming 作业,它从 auto.offset.reset=smallest
读取并保存检查点
到 HDFS,然后在下一个 运行 中从那里开始。
但在这种情况下,我如何才能只获取一次并在第一批之后停止流式传输?
createRDD
是从 kafka 读取批次的正确方法。
要查询有关最新/最早可用偏移量的信息,请查看KafkaCluster.scala
方法getLatestLeaderOffsets
和getEarliestLeaderOffsets
。该文件是 private
,但在最新版本的 spark 中应该是 public
。