设为首页 加入收藏

TOP

spark streaming 集成kafka0.10 offset是如何管理的源码解析
2019-02-12 01:25:23 】 浏览:70
Tags: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包结构

12472907-cc5e910e58192bff.png
这次主要分析的是kafkautils、DirectKafkaInputDstream类。spark streaming +kafka 0.10版本消费kafka消息执行流程分析:1:在spark-streaming 每一次遍历kafkastreamingDstream rdd时提交设置好的offsetRange到kafka中


12472907-eb5ea7b50193f96a.png
offsetRange提交到kafka方法
12472907-e4ea3b0be1a43bbc.png
2、kafkastreamingDstream消费kafka时先判断kc缓存的kakfa consumer是否为空,为空则新创建kafka consumer客户端。只有第一次启动时候为空,后面都不为空。
12472907-01802508b9ffe849.png
3、rdd具体执行函数是compute方法。在compute方法中生成每个partition下offsetRange信息提供给partition下kafka consumer进行消息消费。
12472907-831ccad09b206f9b.png
形成的partition执行信息,分发给各个spark partition
12472907-a1aa28cc35adc7bc.png
4、在compute中生成offsetRange具体方法。其中currentOffsets在第一次初始化时为空,后续给每个spark partition分发执行信息时把生成的untiloffset赋值给currentOffsets
12472907-1e4bfad1892866bf.png
12472907-8920337fe8e74395.png
12472907-bb1aa2d5a53b7aef.png
spark定义每秒 每个分区可以获取消息的最大值乘以窗口时间,来计算每一批次,一个partition可以获取在的消息数量。将currentOffsets中获取的offset+每个批次获取数据量的数据,构成offsetRnage信息。
12472907-4d12247889ff8f78.png
12472907-ba7657e62199e026.png
12472907-c5d5b02280804941.png

编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇spark课程大纲 下一篇Spark系列1 - Spark生态和RDD

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }