上周客串了一下面试官,在这里就简单记录一下期间我问到的一些关于 Kafka 的面试题目,这些都是我平时在学习 Kafka 的一些总结要点。

  • 谈谈你对 kafka 的整体认识?

问这个问题主要是想知道面试者对 Kafka 的整体认识如何,能够大致了解清楚面试者对 Kafka 的相关概念的熟悉程度,比如消息、topic、partition、replica、offset、重平衡、leader/follower、ISR 等等。

  • 谈谈 Kafka 吞吐量为何如此高?

多分区、batch send、kafka Reator 网络模型、pagecache、sendfile 零拷贝、数据压缩。

  • 谈谈你对生产者储水池机制的理解

sender 线程工作机制、ByteBuffer 缓冲区的作用等等:

  • 如何提高kafka吞吐量?

生产端调整 batch.size、linger.ms 参数,以及主题分区数合理分配等。

  • 生产者producer是线程安全的吗?多线程实例还是单线程实例优缺点?

  • 消费者 consumer 是线程安全的吗?多线程实例、单线程实例、单 consumer + 多 worker 线程的优缺点?

  • 消息拉取时,什么情况下会造成消息重复消费?谈谈你对位移提交的理解?

理解消息交付语义:

最多一次(atmostonce):消息可能丢失也可能被处理,但最多只会被处理一次;

至少一次(atleastonce):消息不会丢失,但可能被处理多次;

精确一次(exactlyonce):消息被处理且只会被处理一次。

假若消费者在消费前提交位移,那么就是“最多一次”,若在消费后提交位移,那么就是“最少一次”,如果能够保证消费和提交位移同在一个事务中执行,就可保证“精确一次”。__consumer_offsets的一些理解。

  • 什么时候会产生消费组重平衡以及重平衡会涉及到哪些相关参数、频繁重平衡会造成哪些后果?

消费组成员变更、主题数量变更、订阅信息变更;session.timeout.ms、max.poll.interval.ms、hearbeat.interval.ms;

相关文章:Kafka重平衡机制

  • kafka默认不支持自动分区重分配,那么如果让你来执行分区重分配,有哪几个步骤,以及在重分配过程中kafka会有哪些动作?

RAR、OAR、AR、RAR-OAR、OAR-RAR 相关概念,

相关文章:记一次 Kafka 线上扩容Kafka 分区重分配源码分析

  • 谈谈你对 Preferred leader 选举的理解?

在 broker 挂掉之后,分区 leader 会变更,久而久之就会变得不均衡,Kafka 默认序号最小的副本为 Preferred leader,在 broker 重启回来后,Kafka 会重新调整分区的 Preferred leader 成为 leader,Preferred leader 选举分为手动选举和自动选举,涉及参数 auto.leader.rebalance.enable,还有个默认允许 10% 不均衡策略等等。

  • 谈谈你对 ISR 副本同步的理解?ISR副本同步的缺陷有哪些?

相关文章:Kafka ISR 副本同步机制

  • 谈谈你对水印备份机制的理解?LEO 更新机制、HW 更新机制?

相关文章:图解:Kafka 水印备份机制

  • 水印备份机制的一些缺陷?数据丢失、数据离散?如何解决的(leader epoch)

相关文章:图解:Kafka 水印备份机制

  • 谈谈你对 controller 机制的理解?controller 主要有哪些功能?

更新集群元数据信息、创建主题、删除主题、分区重分配、preferred leader 副本选举、主题分区扩展、broker 加入集群、broker 崩溃、受控关闭、controller leader 选举。

  • Kafka 的日志存储机制?

每个分区拥有单独的日志(partition log)、顺序写、到一定大小分成日志段文件(log segment file)、每个 log 文件对应一个索引文件(.index .timeindex)等等。

  • Kafka 分区数越多性能就越好吗?为什么?

我的理解:

  1. 每个分区数都对应一个 log 文件,log 文件是顺序写的,但如果有非常多分区同时刷盘,就会变相成乱序写了,我猜想这也是为什么 RocketMQ 一个 broker 只会拥有一个 CommitLog 的原因之一吧;
  2. 客户端会为每个分区调用一条线程处理,多线程并发地处理分区消息,分区越多,意味着处理的线程数也就越多,到一定程度后,会造成线程切换开销大;
  3. 其中一个 broker 挂掉后,如果此时分区特别多,Kafka 分区 leader 重新选举的时间大大增加;
  4. 每个分区对应都有文件句柄,分区越多,系统文件句柄就越多;
  5. 客户端在会为每个分区分配一定的缓冲区,如果分区过多,分配的内存也越大。

    更多精彩文章请关注作者维护的公众号「后端进阶」,这是一个专注后端相关技术的公众号。
    关注公众号并回复「后端」免费领取后端相关电子书籍。
    欢迎分享,转载请保留出处。

关于 Kafka 的一些面试题目的更多相关文章

  1. 2020阿里Java面试题目大汇总,看看你离阿里还有多远,附答案!

    前言 首先说一下情况,我大概我是从去年12月份开始看书学习,到今年的6月份,一直学到看大家的面经基本上百分之90以上都会,我就在5月份开始投简历,边面试边补充基础知识等.也是有些辛苦.终于是在前不久拿 ...

  2. HTML/CS3相关面试题目

    一.HTML/CS3基本面试题目. 1. 常用那几种浏览器测试? 1.1浏览器:IE,Chrome(谷歌),FireFox(火狐),Safari(苹果计算机的最新操作系统Mac OS X中的浏览器,使 ...

  3. PHP面试题目搜集

    搜集这些题目是想在学习PHP方面知识有更感性的认识,单纯看书的话会很容易看后就忘记. 曾经看过数据结构.设计模式.HTTP等方面的书籍,但是基本看完后就是看完了,没有然后了,随着时间的推移,也就渐渐忘 ...

  4. 总结CSS面试题目的考察点及常见布局问题整理

    整理网上流传的若干份面试题目,突发奇想,总结关于CSS面试题目的考察点,发现问题大多围绕几个属性和几种题目,水平有限,仅供参考. 写这个博文内心有种莫名奇妙的自我谴责感,实在不应该把面试层叠样式“应试 ...

  5. 【转】asp.net c# 网上搜集面试题目大全(附答案)

    asp.net c# 网上搜集面试题目大全(附答案) http://www.cnblogs.com/hndy/articles/2234188.html

  6. 2016年Web前端面试题目汇总

    转载: 2016年Web前端面试题目汇总 以下是收集一些面试中经常会遇到的经典面试题以及自己面试过程中未解决的问题,通过对知识的整理以及经验的总结,重新巩固自身的前端基础知识,如有错误或更好的答案,欢 ...

  7. 33条C#、.Net经典面试题目及答案

    33条C#..Net经典面试题目及答案[zt] 本文集中了多条常见的C#..Net经典面试题目例如".NET中类和结构的区别"."ASP.NET页面之间传递值的几种方式? ...

  8. 33条C#、.Net经典面试题目及答案[zt]

    33条C#..Net经典面试题目及答案[zt] 本文集中了多条常见的C#..Net经典面试题目例如“.NET中类和结构的区别”.“ASP.NET页面之间传递值的几种方式?”,并简明扼要的给出了答案,希 ...

  9. C/C++ 笔试、面试题目大汇总 转

    C/C++ 笔试.面试题目大汇总 这些东西有点烦,有点无聊.如果要去C++面试就看看吧.几年前网上搜索的.刚才看到,就整理一下,里面有些被我改了,感觉之前说的不对或不完善. 1.求下面函数的返回值( ...

随机推荐

  1. pat 1035 Password(20 分)

    1035 Password(20 分) To prepare for PAT, the judge sometimes has to generate random passwords for the ...

  2. VS Code 中使用 GitHub pull request 插件提交代码

    VS Code作为一个代码编辑器,受到很多人的喜爱:其中有很多非常有用的插件/扩展功能,也会极大的提高我们的工作效率. 这里介绍一下GitHub pull request,用来向GitHub提交在VS ...

  3. oracle:表重命名

    SQL> rename test1 to test; Table renamed. SQL> alter table test rename to test1; Table altered ...

  4. 稀疏数组 python描述

    什么是稀疏矩阵? 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵. 作用: 在这种情况下,很多0值无疑是很浪费空间的,当我们要把数组存储在磁盘中 ...

  5. windows 10 上源码编译opengv | compile opengv on windows 10 from source

    本文首发于个人博客https://kezunlin.me/post/51cd9fa0/,欢迎阅读! compile opengv on windows 10 from source Series co ...

  6. pyinstaller打包python文件成exe(原理.安装.问题)

    py文件打包成exe文件的方式一共有三种:py2exe.PyInstaller和cx_Freeze 本文分四个步骤来详讲如何用PyInstaller将py文件打包成exe文件 1. PyInstall ...

  7. Linux下用Docker部署接口安全的运行环境

    背景:MySQL数据库运行在宿主机上(Linux) 需求:Redis.服务.页面分别运行在独立的docker中,并处于同一网络,容器内部重要目录要挂载在物理目录,保证数据安全 方法: 一.设置网络环境 ...

  8. Linux下搭建web服务

    第一:安装java 第二:安装tomcat 第三:部署程序 第一:安装java 下载地址: http://www.oracle.com/technetwork/java/javase/download ...

  9. mysql那些事(4)建库建表编码的选择

    mysql建数据库或者建表的时候会遇到选择编码的问题,以前我们都是习惯性的选择utf8,但是在mysql在5.5.3版本后加了utf8mb4的编码,utf8mb4可以存4个字节Unicode,mb4就 ...

  10. 《Windows内核安全与驱动开发》4.3 时间与定时器

    <Windows内核安全与驱动开发>阅读笔记 -- 索引目录 <Windows内核安全与驱动开发>4.3  时间与定时器 一.获取自系统启动以来的毫秒数 /* 函数作用:求自操 ...