关于Spark Streaming感知kafka动态分区的问题

本文主要是讲解Spark Streaming与kafka结合的新增分区检测的问题。读本文前关于kafka与Spark Streaming结合问题请参考下面两篇文章:

1,读:再讲Spark与kafka 0.8.2.1+整合

2,必读:Spark与kafka010整合

读本文前是需要了解Spark Streaming的原理和源码结构基础。

Spark Streaming源码系列视频教程请点阅读原文进入浪尖的知识星球:Spark技术学院。

kafka 0.8版本

进入正题,之所以会有今天题目的疑惑,是由于在08版本kafka和Spark Streaming结合的DirectStream这种形式的API里面,是不支持kafka新增分区或者topic检测的。而这个问题,对于很多业务增长比较明显的公司都是会有碰到相应的问题。

比如,原来的公司业务增长比较明显,那么kafka吞吐量,刚开始创建的topic数目和分区数目可能满足不了并发需求,需要增加分区。新增加的分区会有生产者往里面写数据,而Spark Streaming跟kafka 0.8版本结合的API是满足不了动态发现kafka新增topic或者分区的需求的。

这么说有什么依据吗?我们做项目不能人云亦云,所以我们可以从源码入手验证我们的想法。

我们在这里不会详细讲Spark Streaming源码,但是我们可以在这里思考一下,Spark Streaming分区检测是在哪做的?

很明显对于批处理的Spark Streaming任务来说,分区检测应该在每次job生成获取kafkaRDD,来给kafkaRDD确定分区数并且每个分区赋值offset范围的时候有牵扯,而这段代码就在DirectKafkaInputDStream#compute方法中。(看过浪尖Spark Streaming源码视频教程的肯定会知道)

那么我们就贴出这块源码去验证我们的想法,首先compute方法的第一行:

val untilOffsets = clamp(latestLeaderOffsets(maxRetries))

这里面获取的是当前生成KafkaRDD每个分区消费的offset的最大值,那么我们需要进入latestLeaderOffsets进一步去看,可以发现下面一行代码:

val o = kc.getLatestLeaderOffsets(currentOffsets.keySet)

这个是根据currentOffsets信息来获取最大的offset,由此此处继续深入发现,由于它只是根据currentOffsets信息来获取最大的offset,没有去感知新增的分区,所以Spark Streaming与kafka 0.8结合是不能动态感知分区的。

kafka 0.10版本

相似的我们也可以直接去看kafka 0.10这块的源码去检查,他是否会动态生成kafka分区。

进入DirectKafkaInputDStream的compute,看到的第一行代码也是:

val untilOffsets = clamp(latestOffsets())

在latestOffsets里面,有了新的大陆:

到这里本文就算结束了,kafka 0.10版本与SparkStreaming结合支持新增分区检测,这件事告诉我们没事要多看源码,增长见识。

有收获就点个赞吧。

原文发布于微信公众号 - Spark学习技巧(bigdatatip)

原文发表时间:2018-07-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

Spark踩坑记:Spark Streaming+kafka应用及调优

作者:肖力涛 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消...

2295
来自专栏大数据

Spark Streaming入门

本文将帮助您使用基于HBase的Apache Spark Streaming。Spark Streaming是Spark API核心的一个扩展,支持连续的数据流...

7049
来自专栏about云

Hadoop2.x 让你真正明白yarn

问题导读 1.hadoop1.x中mapreduce框架与yarn有什么共同点? 2.它们有什么不同点? 3.yarn中有哪些改变? 4.yarn中有哪些术语...

6948
来自专栏编程

大数据干货系列(六)-Spark总结

本文共计1611字,预计阅读时长八分钟 Spark总结 一、本质 Spark是一个分布式的计算框架,是下一代的MapReduce,扩展了MR的数据处理流程 二、...

2155
来自专栏美团技术团队

HDFS NameNode重启优化

一、背景 在Hadoop集群整个生命周期里,由于调整参数、Patch、升级等多种场景需要频繁操作NameNode重启,不论采用何种架构,重启期间集群整体存在可用...

5687
来自专栏CSDN技术头条

知识分享:详解Hadoop核心架构

  通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖...

2015
来自专栏华章科技

大数据技术Hadoop面试题,看看你能答对多少?答案在后面

a)NameNode b)Jobtracker c)Datanode d)secondaryNameNode e)tasktracker

1452
来自专栏Albert陈凯

大数据面试选择题hadoop

1.1. 下面哪个程序负责 HDFS 数据存储。 a)NameNode b)Jobtracker c)Datanode d)secondaryNa...

1.3K4
来自专栏Albert陈凯

1.1.3 Spark架构与单机分布式系统架构对比

传统的单机系统,虽然可以多核共享内存、磁盘等资源,但是当计算与存储能力无法满足大规模数据处理的需要时,面对自身CPU与存储无法扩展的先天限制,单机系统就力不从心...

3945
来自专栏数据库

爱炫耀的数据库老头儿

作者:刘欣 1 数据库老头儿 我们这个世界很大, 生活着很多人,形形色色,各怀绝技。但是被公认为最拽的一个却是数据库老头儿,年龄挺大,每天都要炫耀几遍他那关系型...

1980

扫码关注云+社区

领取腾讯云代金券