spark streaming 集成kafka0.10 offset是如何管理的源码解析

       spark streaming+kafka 0.10集成默认spark partition和kafka partition数量是1:1,这样可以使得每个spark partition对应一个kafka partition。将spark partition中kafka consumer进行缓存,在每次获取新数据时可以利用CachedKafkaConsumer消费,只需要修改offsetRange值。附:spark-streaming-kafka-0.10 jar包结构

spark streaming 集成kafka0.10 offset是如何管理的源码解析_第1张图片
这次主要分析的是kafkautils、DirectKafkaInputDstream类。spark streaming +kafka 0.10版本消费kafka消息执行流程分析:1:在spark-streaming 每一次遍历kafkastreamingDstream rdd时提交设置好的offsetRange到kafka中


spark streaming 集成kafka0.10 offset是如何管理的源码解析_第2张图片
offsetRange提交到kafka方法
spark streaming 集成kafka0.10 offset是如何管理的源码解析_第3张图片
2、kafkastreamingDstream消费kafka时先判断kc缓存的kakfa consumer是否为空,为空则新创建kafka consumer客户端。只有第一次启动时候为空,后面都不为空。
spark streaming 集成kafka0.10 offset是如何管理的源码解析_第4张图片
3、rdd具体执行函数是compute方法。在compute方法中生成每个partition下offsetRange信息提供给partition下kafka consumer进行消息消费。
spark streaming 集成kafka0.10 offset是如何管理的源码解析_第5张图片
形成的partition执行信息,分发给各个spark partition
spark streaming 集成kafka0.10 offset是如何管理的源码解析_第6张图片
4、在compute中生成offsetRange具体方法。其中currentOffsets在第一次初始化时为空,后续给每个spark partition分发执行信息时把生成的untiloffset赋值给currentOffsets
spark streaming 集成kafka0.10 offset是如何管理的源码解析_第7张图片
spark streaming 集成kafka0.10 offset是如何管理的源码解析_第8张图片
spark streaming 集成kafka0.10 offset是如何管理的源码解析_第9张图片
spark定义每秒 每个分区可以获取消息的最大值乘以窗口时间,来计算每一批次,一个partition可以获取在的消息数量。将currentOffsets中获取的offset+每个批次获取数据量的数据,构成offsetRnage信息。
spark streaming 集成kafka0.10 offset是如何管理的源码解析_第10张图片
spark streaming 集成kafka0.10 offset是如何管理的源码解析_第11张图片
spark streaming 集成kafka0.10 offset是如何管理的源码解析_第12张图片

你可能感兴趣的:(spark streaming 集成kafka0.10 offset是如何管理的源码解析)