概述
所谓的手动管理偏移量就是用户自己定义消息何时被真正处理完,并在提交偏移量之前一般会用偏移量做一些其他的操作,好处是用户可以确保只有消息被真正处理完成后再提交偏移量。所以需要我们在代码逻辑中得到实时的偏移量,并且保证<<任务处理完成之后再提交偏移量>>这种时序性。
手动管理kafka偏移量有以下优点:
a)一般情况下,保证数据不丢失,不重复被消费
b)可以方便地查看offset信息
操作的api是OffsetRange这个类,它有untilOffset()方法,这个方法可以得到该批次数据中操作的分区对应的终止偏移量。另外还有fromOffset()方法,对应起始偏移量。
大致的操作思路如下
- 在Kafka DirectStream初始化时,取得当前所有partition的中数据的offset
- 读取offset数据,处理并存储结果。
- 提交offset,并将其持久化在可靠的外部存储中。
同时要注意的是在当前普遍用的是较新版本的kafka,但有的环境用的0.10左右的kafka,在Kafka 0.10开始的版本中,offset的默认存储由ZooKeeper移动到了kafka一个自带的topic中,名为__consumer_offsets,因此Spark Streaming也专门提供了commitAsync API用于提交offset
提交的核心代码如下
//stream是streaming数据集
stream.foreachRDD
最后
以上就是凶狠手链为你收集整理的SparkStreaming消费Kafka数据手动提交偏移量维护在自定义环境的方式的全部内容,希望文章能够帮你解决SparkStreaming消费Kafka数据手动提交偏移量维护在自定义环境的方式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复