spark streaming窗口及聚合操作后怎么管理offset


spark streaming窗口及聚合操作后怎么管理offset,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。spark streaming经过窗口的集合操作之后,再去管理offset呢?对于spark streaming来说窗口操作之后,是无法管理offset的,因为offset的存储于 香港云主机HasOffsetRanges,只有kafkaRDD继承了该特质,经过转化的其他RDD都不支持了。所以无法通过其他RDD转化为HasOffsetRanges来获取offset,以便自己管理。kafkaRDD的继承关系如下:HasOffsetRanges只有kafkaRDD继承了他,所以假如我们对KafkaRDD进行了转化之后就无法再获取offset了。HasOffsetRanges就是一个OffsetRange的数组:
‍再看一下,OffsetRange的实现:窗口操作会包含若干批次的RDD数据,窗口操作也往往带有聚合操作,所以KafkaRDD肯定会被转化为其他类型的RDD的,那么之后就无法转化为hasoffsetranges了,也是管理offset变得很麻烦的。实际上,无论是窗口是否有重叠和包含聚合,其实我们只关心本次处理窗口的kafkardds 的offset范围[fromOffset, toOffset),由于fromOffset是上次提交成功的,那么本次处理完只需要提交的toOffset即可,即使处理失败也可以从fromOffset开始重新处理。也就实现了数据的最少一次处理,假如能与结果一起管理,也可以实现仅一次处理。那么提交offset我们只需要提交最近的那个批次的kafkaRDD的toOffset即可。那么如何获取最新的kafkaRDD的toOffset呢?
其实,我们只需要在driver端记录kafkardd转化的hasoffsetrange存储的offset即可。
回顾一下,对于spark 来说代码执行位置分为driver和executor,我们希望再driver端获取到offset,等处理完结果后,再提交offset到kafka或者直接与结果一起管理offset。那么窗口操作之前获取offset方法是什么呢?
就是利用transform操作,完成下面的步骤:上述步骤就完成了,只记录最新kafkardd的hasoffsetranges里存储的offset功能。总结一下:driver端通过使用transform获取到offset信息,然后在输出操作foreachrdd里面完成offset的提交操作。关于spark streaming窗口及聚合操作后怎么管理offset问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注开发云行业资讯频道了解更多相关知识。

相关推荐: Python中怎么利用Torchmoji将文本转换为表情符号

这篇文章将为大家详细讲解有关Python中怎么利用Torchmoji将文本转换为表情符号,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。这些代码并不完全是我的写的,源代码可以在这个链接上找到。该代码将下载约600…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 09/22 17:30
Next 09/22 17:31

相关推荐