大家好,我是冰河~~

最近,有些读者去头条二面,被面试官问了一个关于Kafka的问题:多个Kafka消费者如何同时消费相同Topic下的相同Partition的数据? 看似一个简单的问题,竟然把这位读者问懵了!

今天,我们就一起来说说这个面试题,好了,开始今天的主题。

题目分析

首先,要明确面试官的问题:多个Kafka消费者如何同时消费相同Topic下的相同Partition的数据? 这个问题问的已经很明显了,我们只要回答出如何让多个Kafka消费者同时消费相同Topic下的相同Partition的数据就可以了。

为了能够回答好这个问题,我们需要理解Kafka中的一个概念,就是 消费者组(Consumer Group)。消费者组是Kafka实现单播和广播两种消息模型的基础和手段。对于同一个Topic(主题)来说,每个消费者组都可以拿到这个Topic中的全部数据。消费者组内的所有消费者协调在一起来订阅并消费Kafka Topic中的所有分区。这里,每个分区只能由同一个消费者组内的一个消费者来消费。

这里,为了更好的理解,我们简单的画一张Kafka消费消息的原理图,如下所示。

在这张图中,一个主题可以配置几个分区,生产者发送的消息分发到不同的分区中,消费者接收数据的时候是按照消费者组来接收的,Kafka确保每个分区的消息只能被同一个消费者组中的同一个消费者消费,如果想要重复消费,那么需要其他的消费者组来消费。Zookeerper中保存每个主题下的每个分区在每个消费者组中消费的offset。

新版kafka把这个offset保存到了一个__consumer_offsert的主题下。 这个__consumer_offsert有50个分区,通过将消费者组的id哈希值%50的值来确定要保存到那一个分区。这样也是为了考虑到Zookeeper不擅长大量数据读写的原因。

所以,如果要一个消费者组用几个消费者来同时消费Kafka中消息的话,需要多线程来读取,一个线程相当于一个消费者实例。当消费者的数量大于分区的数量时,有些消费者线程会读取不到数据。

扩展知识

这里,我们举一个例子:假设一个主题 test 被groupA消费了,现在启动另外一个新的groupB来消费test,默认test-groupB的Offset不是0,而是还是在Kafka中还没有建立这样的一个Offset,除非当test主题有数据的时候,groupB会收到该数据,该条数据也是第一条数据,此时,groupB的Offset也是刚初始化的Offset, 除非用显式的用–from-beginning 来获取从0开始的数据。

题目解答

多个Kafka消费者要想同时消费相同Topic下的相同Partition的数据,则需要将这些Kafka消费者放到不同的消费者组中。

领取福利

CSDN上私信冰河:

  • 回复【并发编程】领取冰河原创全网累计下载 35W+ 的《深入理解高并发编程》电子书。
  • 回复【渗透笔记】获取冰河最新发布的《冰河的渗透实战笔记》电子书。
  • 回复【PDF】领取冰河原创的其他8本超硬核PDF电子书,海量面试资料和简历模板。

写在最后

如果你想进大厂,想升职加薪,或者对自己现有的工作比较迷茫,都可以私信我交流,希望我的一些经历能够帮助到大家~~

推荐阅读:

  • 《高并发场景下一种比读写锁更快的锁,看完我彻底折服了!!(建议收藏)》

  • 《全网最全性能优化总结!!(冰河吐血整理,建议收藏)》

  • 《三天撸完了MyBatis,各位随便问!!(冰河吐血整理,建议收藏)》

  • 《奉劝那些刚参加工作的学弟学妹们:要想进大厂,这些核心技能是你必须要掌握的!完整学习路线!!(建议收藏)》

  • 《奉劝那些刚参加工作的学弟学妹们:这些计算机与操作系统基础知识越早知道越好!万字长文太顶了!!(建议收藏)》

  • 《我用三天时间开发了一款老少皆宜的国民级游戏,支持播放音乐,现开放完整源代码和注释(建议收藏)!!》

  • 《我是全网最硬核的高并发编程作者,CSDN最值得关注的博主,大家同意吗?(建议收藏)》

  • 《毕业五年,从月薪3000到年薪百万,我掌握了哪些核心技能?(建议收藏)》

  • 《我入侵了隔壁妹子的Wifi,发现。。。(全程实战干货,建议收藏)》

  • 《千万不要轻易尝试“熊猫烧香”,这不,我后悔了!》

  • 《清明节偷偷训练“熊猫烧香”,结果我的电脑为熊猫“献身了”!》

  • 《7.3万字肝爆Java8新特性,我不信你能看完!(建议收藏)》

  • 《在业务高峰期拔掉服务器电源是一种怎样的体验?》

  • 《全网最全Linux命令总结!!(史上最全,建议收藏)》

  • 《用Python写了个工具,完美破解了MySQL!!(建议收藏)》

  • 《SimpleDateFormat类到底为啥不是线程安全的?(附六种解决方案,建议收藏)》

好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,我是冰河,我们下期见~~

头条二面Kafka面经总结:搞懂Kafka的这个问题,你离大厂就不远了!!(建议收藏)相关推荐

  1. 搞懂Kafka的这个问题,你离大厂就不远了!

    最近,有些读者去头条二面,被面试官问了一个关于Kafka的问题:多个Kafka消费者如何同时消费相同Topic下的相同Partition的数据? 看似一个简单的问题,竟然把这位读者问懵了! 今天,我们 ...

  2. 2万长文,一文搞懂Kafka

    作者:erainm 来源:https://blog.csdn.net/eraining/article/details/115860664 1.为什么有消息系统 解耦合 异步处理 例如电商平台,秒杀活 ...

  3. 两万字长文,彻底搞懂Kafka

    点击关注公众号,实用技术文章及时了解 1.为什么有消息系统 1.解耦合 2.异步处理 例如电商平台,秒杀活动. 一般流程会分为: 风险控制 库存锁定 生成订单 短信通知 更新数据 通过消息系统将秒杀活 ...

  4. 开源新作!抖音四面被拒,再战头条终获offer,一文搞懂

    前言 MySQL在过去由于性能高.成本低.可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Internet上的中小型网站中.随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用.非常流行 ...

  5. 带你实现开发者头条(二) 实现左滑菜单

    title: 带你实现开发者头条(二) 实现左滑菜单 tags: 左滑菜单,android 自带侧滑,DrawerLayout grammar_cjkRuby: true --- 今天开始模仿开发者头 ...

  6. 10小时,这回一次搞定 Kafka 源码!

    Kafka 因其优越的特性广泛用于日志收集.用户活动跟踪等方面,也得到越来越多企业的青睐,很多 IT 界前辈更是在技术层面不断深挖.目前,如果你还局限在 Kafka 的基本应用,将很难 cover 住 ...

  7. 四天搞懂生成对抗网络(二)——风格迁移的“精神始祖”Conditional GAN

    点击左上方蓝字关注我们 [飞桨开发者说]吕坤,唐山广播电视台,算法工程师,喜欢研究GAN等深度学习技术在媒体.教育上的应用. 从"自由挥洒"到"有的放矢" 1. ...

  8. 【飞桨PaddlePaddle】四天搞懂生成对抗网络(二)——风格迁移的“精神始祖”Conditional GAN

    从"自由挥洒"到"有的放矢" 1.给GAN加个"按钮" 上一篇<四天搞懂生成对抗网络(一)--通俗理解经典GAN>中,我们实现了 ...

  9. 带你实现开发者头条(二) 实现左滑菜单

    今天开始模仿开发者头条的侧滑菜单,是本系列第二篇文章,相信大家已经看到很多app使用这种侧滑.今天我来教大家用android自带DrawerLayout控件实现. DrawerLayout是Suppo ...

最新文章

  1. C语言重点——指针篇(一篇让你完全搞懂指针)
  2. SQL 2008 R2 启动失败 提示 请求失败或服务未及时响应
  3. mysql Error Code: 1005(errorno:121)解决
  4. jQuery.ajax()方法
  5. 目标检测——neck组件的学习笔记
  6. 控制层@Value注解取不到值
  7. freeCodeCamp:Seek and Destroy
  8. Java 会被新兴语言取代吗?
  9. python风格迁移_图像风格迁移实战(附Python实战)
  10. 【网页设计】基于HTML+CSS+JavaScript制作美食网站舌尖上的美食
  11. win10内存满载测试软件,windows10系统使用自带内存检测工具检测内存好坏的方法...
  12. 微信小程序(一)天气预报
  13. 斯坦福大学开源四足机器人pupper腿部组装(上)
  14. python打印九九乘法表到文件_99乘法表打印_python怎么打印九九乘法表
  15. 【源码】锂电池模型、Simscape语言与Simulink优化设计
  16. python输入姓和名_编程练习1-输入姓,返回名
  17. 机器学习基础---pr曲线的绘制
  18. 计算机开机没有找到引导设备,电脑开机显示没有可以引导的设备
  19. 1024 程序员节“沪深城市嘉年华”,豪华礼包送不停!
  20. 单例模式 恶汉懒汉比较

热门文章

  1. oracle查看执行过的语句,oracle 查询执行过的SQL语句
  2. 数字上变频(DUC)和数字下变频(DDC)
  3. 爬取复仇者联盟4豆瓣短评生成词云
  4. C++程序员的职业寿命比Java长?Java程序员同意吗?
  5. 【干货】微信排版实用经验,看后操作立马上手
  6. 服务器系统c盘只能压缩一半,关于操作系统分区只能压缩出一半的问题
  7. AST实战|ob混淆一键还原开源啦,免安装babel库
  8. vue-axios demo_user 展示数据 删除 修改 新增
  9. 浅谈数据链路层和运输层的流量控制
  10. java 解析ip数据包_ip包,ip数据包,数据包或者包的理解