使用KafkaUtils.createDirectStream

时间:2019-01-14 05:27:16

标签: apache-spark apache-kafka spark-streaming-kafka

如果我使用KafkaUtils.createDirectStream读取消息,如何在Kafka中存储消息偏移量。 每次应用程序关闭时,Kafka都会丢失偏移值。然后,Kafka会读取auto.offset.reset(最新)中提供的值,并且无法在应用程序的停止启动间隔中读取消息。

1 个答案:

答案 0 :(得分:1)

您可以通过手动提交偏移量来避免这种情况。将enable.auto.commit设置为false,然后在成功操作后使用以下代码在kafka中提交偏移量。

  var offsetRanges = Array[OffsetRange]()

          val valueStream = stream.transform {
            rdd =>
              offsetRanges = rdd.asInstanceOf[HasOffsetRanges].offsetRanges
              rdd
          }.map(_.value())
//operation
        stream.asInstanceOf[CanCommitOffsets].commitAsync(offsetRanges)

您还可以阅读此文档,这将使您对偏移量管理https://blog.cloudera.com/blog/2017/06/offset-management-for-apache-kafka-with-apache-spark-streaming/

有很好的了解。