如果我使用KafkaUtils.createDirectStream读取消息,如何在Kafka中存储消息偏移量。 每次应用程序关闭时,Kafka都会丢失偏移值。然后,Kafka会读取auto.offset.reset(最新)中提供的值,并且无法在应用程序的停止启动间隔中读取消息。
答案 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/
有很好的了解。