很多知识星球球友问过浪尖一个问题:
就是spark streaming经过窗口的聚合操作之后,再去管理offset呢?
对于spark streaming来说窗口操作之后,是无法管理offset的,因为offset的存储于HasOffsetRanges。只有kafkaRDD继承了他,所以假如我们对KafkaRDD进行了转化之后就无法再获取offset了。
还有窗口之后的offset的管理,也是很麻烦的,主要原因就是窗口操作会包含若干批次的RDD数据,那么提交offset我们只需要提交最近的那个批次的kafkaRDD的offset即可。如何获取呢?
对于spark 来说代码执行位置分为driver和executor,我们希望再driver端获取到offset,在处理完结果提交offset,或者直接与结果一起管理offset。
说到driver端执行,其实我们只需要使用transform获取到offset信息,然后在输出操作foreachrdd里面使用提交