目录

  • Kafka的基本介绍
  • Kafka的设计原理分析
  • Kafka数据传输的事务特点
  • Kafka消息存储格式
  • 副本(replication)策略
  • Kafka消息分组,消息消费原理
  • Kafak顺序写入与数据读取
  • 消费者(读取数据)

Kafka的基本介绍

Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

主要应用场景是:日志收集系统和消息系统。

Kafka主要设计目标如下:

  • 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。
  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输。
  • 支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。
  • 同时支持离线数据处理和实时数据处理。

Kafka的设计原理分析

一个典型的kafka集群中包含若干producer,若干broker,若干consumer,以及一个Zookeeper集群。Kafka通过Zookeeper管理集群配置,选举leader,以及在consumer group发生变化时进行rebalance。producer使用push模式将消息发布到broker,consumer使用pull模式从broker订阅并消费消息。

Kafka专用术语:

  • Broker:消息中间件处理结点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。
  • Topic:一类消息,Kafka集群能够同时负责多个topic的分发。
  • Partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。
  • Segment:partition物理上由多个segment组成。
  • offset:每个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每个消息都有一个连续的序列号叫做offset,用于partition唯一标识一条消息。
  • Producer:负责发布消息到Kafka broker。
  • Consumer:消息消费者,向Kafka broker读取消息的客户端。
  • Consumer Group:每个Consumer属于一个特定的Consumer Group。

Kafka数据传输的事务特点

  • at most once:最多一次,这个和JMS中"非持久化"消息类似,发送一次,无论成败,将不会重发。消费者fetch消息,然后保存offset,然后处理消息;当client保存offset之后,但是在消息处理过程中出现了异常,导致部分消息未能继续处理。那么此后"未处理"的消息将不能被fetch到,这就是"at most once"。
  • at least once:消息至少发送一次,如果消息未能接受成功,可能会重发,直到接收成功。消费者fetch消息,然后处理消息,然后保存offset。如果消息处理成功之后,但是在保存offset阶段zookeeper异常导致保存操作未能执行成功,这就导致接下来再次fetch时可能获得上次已经处理过的消息,这就是"at least once",原因offset没有及时的提交给zookeeper,zookeeper恢复正常还是之前offset状态。
  • exactly once:消息只会发送一次。kafka中并没有严格的去实现(基于2阶段提交),我们认为这种策略在kafka中是没有必要的。

通常情况下"at-least-once"是我们首选。

Kafka消息存储格式

Topic & Partition

一个topic可以认为一个一类消息,每个topic将被分成多个partition,每个partition在存储层面是append log文件。

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。

  • 每个partion(目录)相当于一个巨型文件被平均分配到多个大小相等segment(段)数据文件中。但每个段segment file消息数量不一定相等,这种特性方便old segment file快速被删除。
  • 每个partiton只需要支持顺序读写就行了,segment文件生命周期由服务端配置参数决定。

这样做的好处就是能快速删除无用文件,有效提高磁盘利用率。

  • segment file组成:由2大部分组成,分别为index file和data file,此2个文件一一对应,成对出现,后缀".index"和“.log”分别表示为segment索引文件、数据文件.
  • segment文件命名规则:partion全局的第一个segment从0开始,后续每个segment文件名为上一个segment文件最后一条消息的offset值。数值最大为64位long大小,19位数字字符长度,没有数字用0填充。

最后

在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例
感兴趣的朋友可以点击Java学习免费获取。


由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

大家看完有什么不懂的可以在下方留言讨论也可以关注。

觉得文章对你有帮助的话记得关注我点个赞支持一下!

截图出来粗略的介绍,每个小节点里面都有更细化的内容!**

大家看完有什么不懂的可以在下方留言讨论也可以关注。

觉得文章对你有帮助的话记得关注我点个赞支持一下!

字节跳动面试官:java架构师培训对比相关推荐

  1. java面试 上传文件_字节跳动面试官,我也实现了大文件上传和断点续传

    前言 前几天看到一个文章,感触很深 作者从0实现了大文件的切片上传,断点续传,秒传,暂停等功能,深入浅出的把这个面试题进行了全面的剖析 彩虹屁不多吹,我决定蹭蹭热点,录录视频,把作者完整写代码的过程加 ...

  2. 作为字节跳动面试官,这篇文章可以满足你80%日常工作!附小技巧

    前言 下面的题目都是楼主在Android交流群大家在面试字节跳动时遇到的,如果大家有好的题目或者好的见解欢迎分享,楼主将长期维护此帖. 参考解析:郭霖.鸿洋.玉刚.极客时间.腾讯课堂- 内容特点:条理 ...

  3. “作为字节跳动面试官,有些话我不得不说!”

    转载自字节跳动 由于肺炎疫情的影响,不少同学年初跳槽的计划被搁置.虽然计划被打乱,但是这也给我们留出时间更好的准备面试.随着企业复工时间的延长,不少公司裁员.降薪甚至倒闭,之后只会更难. 看了不少「面 ...

  4. 面试京东Java架构师,竟然被问这些题,学到了!

    前言 其实收到jd的面试邀请的时候,我真心有点小激动.因为在地理位置上,jd应该是最合适我也是最想去的.但是我在看到方向的时候其实心里有很多的问题,也做好了被拒的准备. 面试过程及感受 因为是开车去, ...

  5. java架构师培训:java最佳测试框架JBehave的基本介绍

    我们都知道行为驱动开发(BDD).此类测试以对业务用户透明的方式描述了验收测试.JBehave是另一个用于BDD测试的Java测试框架,主要与SeleniumWebDriverforJava一起使用. ...

  6. 一份字节跳动面试官给你的Java技术面试指南,彻底帮你搞懂

    MySQL 数据库最佳学习线路脑图: 一. 对MySQL 的认识 认识Mysql数据库 下载安装MySQL软件 在Linux系统环境下安装MySQL MySOL体系结构与存储引擎 MySQL体系结构 ...

  7. 字节跳动面试官:java范例完全自学手册

    前言 JVM 内存模型一共包括三个部分: 堆 ( Java代码可及的 Java堆 和 JVM自身使用的方法区). 栈 ( 服务Java方法的虚拟机栈 和 服务Native方法的本地方法栈 ) 保证程序 ...

  8. 字节跳动面试官问我看过哪些源码,然后就没有然后了

    最近,我的一位朋友在找工作,已经拿到了美团.快手等公司的Offer,准备选择其中一家入职了. 后来他又接到了字节跳动的电话,通知他去参加三面.从二面到三面之间隔了挺久的,他以为都没戏了,结果就收到了通 ...

  9. 字节跳动面试:java编程思想电子版非pdf

    第一个暴击:Spring 上一份Spring的手绘思维脑图(就像是个知识大纲总结),预览一下Spring的知识点,心里有个谱.不过这边我是采用的截图方式,为了把全部的内容都截取出来,所以整个就比较小, ...

最新文章

  1. Spring Boot 配置文件的加载优先级
  2. python使用esmre代替ahocorasick实现ac自动机[多模匹配]
  3. linux下卸载已安装的软件
  4. 最牛逼的开源机器学习框架,你知道几个
  5. 使用Nodejs实现的小说爬虫
  6. OpenStack安装Neutron组件最后进行验证后发现Metadata agent ct节点不显示
  7. 如何绘制逻辑图 — 7.逻辑的表达:业务逻辑
  8. cron表达式 每天0点10分和30分_查找特定时间段cron任务方法
  9. Beetl学习总结(2)——基本用法
  10. mysql读写分离错_MySQL主从同步、读写分离配置步骤、问题解决
  11. 使用迁移学习在(选定)农业作物中的自动疾病分类
  12. Julia: 基于CTA策略的回测可视化分析的尝试
  13. ajax上传文件时显示进度
  14. VM14 启动Ubutun16.04 黑屏,实用解决办法
  15. 从零开始学USB(八、USB的数据流模型)
  16. mysql没有卸载干净服务还启动着,MySQL卸载不干净,真的让人很头大
  17. C语言运算符的优先级与结合性
  18. 2017深度学习装机清单 (附京东链接)
  19. 让荣之学告诉你Shopee选品思路及运营方法!
  20. 如何用数据库可视化工具:DataGrip导入数据

热门文章

  1. es6,es7,es8语法总结
  2. C语言实现TCP服务端
  3. 从入门到入土:在kali中安装Nessus详细操作
  4. 取代浏览器插件调试,VS Code 整合 JS 调试工具
  5. 四年磨一剑:我是如何拿到蚂蚁 Offer 的?
  6. 13 年 29 款手机,从激进到求稳,iPhone 都经历什么?
  7. 魅族回应 “暗中给手机植入木马”;前谷歌AI伦理专家遭解雇或因论文;GoLand 2020.3发布|极客头条...
  8. 2020 年微服务领域开源数字化报告发布,阿里扛起微服务大旗
  9. ​炸裂!万字长文拿下 HTTP 我在字节跳动等你!
  10. 突破性能极限,阿里云神龙最新ASPLOS论文解读