Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Kafka的10道基础面试题

Kafka的10道基础面试题

作者头像
草捏子
发布于 2021-03-01 02:57:11
发布于 2021-03-01 02:57:11
7040
举报
文章被收录于专栏:草捏子草捏子

写在前面

许久不见,各位读者,上次更文已经是去年了,快两个月没发文章了,谢谢大家没有取关。没有加我微信的朋友,可能不知道我于去年12月当上了爸爸,算是我人生的一个重大变化。工作还未满两年,在25岁成为了父亲,还是挺有压力的,会有紧张感,所以也停更了一段时间,好好整理自己。现在我回来啦!今年还是会好好写文章,分享有价值的文章给读者。希望能提高自己的输出频率,多多输出,一起进步!

这次给大家分享的是Kafka的10道面试题,就难度我觉得是比较基础的,但考的知识点还比较全面,可以用来考察自己掌握Kafka基础的程度。

1. Kafka是什么?

Kafka起初是一个多分区、多副本且基于ZooKeeper协调的分布式消息系统,现已被定位为一个分布式流式处理平台

2. Kafka的架构了解吗?

建议按以下顺序讲述:

  1. Kafka是基于发布/订阅的消息系统(引出Producer、Consumer和Broker),所以存在三个角色Producer(生产消息)、Broker(Kafka实例)和Consumer(消费消息)。
  2. 生产者会将消息推送到Kafka的某个Topic上,以此区分消息
  3. 为了高可用性,通过在集群上部署多个Broker,一个Topic将以多副本的形式分布在多个Broker上,基于ZK选出一个Leader副本,而其他Follower副本则负责同步Leader副本,避免单点问题。
  4. 为了高吞吐量,再将Topic划分成多个分区,可让Topic的吞吐量不受单机限制。
  5. 为了高吞吐量,对于多个分区,单个消费者也可变成多个,形成消费组,一个分区由一个消费者负责。

最后可画出下图,如想看逐步的画图过程,可看下《图解Kafka中的基本概念》

3. 了解其他MQ吗?有什么不同?

有了解RadbbitMQ,RabbitMQ由于有消息确认机制,所以数据丢失的可能性更小适合严格的金融场景

而Kafka的优势则在于其吞吐量更大适合处理活跃的流式数据

4. 如何保证消息的有序性?

Kafka只能保证局部有序,即只能保证一个分区里的消息有序。而其具体实现是通过生产者为每个分区的消息维护一个发送队列,我们需要将保证顺序的消息都发送到同一个分区中。并且由于Kafka会同时发送多个消息,所以还需指定max.in.flight.requests.per.connection为1,保证前一个消息发送成功,后一个消息才开始发送。

max.in.flight>1 时能保证有序性吗?

可以,设置幂等能保证。不过max.in.flight不能大于5。这是因为Broker端只会缓存最近5个Batch的SequenceNumber,例如我们发送1到6的报文,其中1发送失败,2-5发送成功,Broker缓存下来,当1重试时,Broker检查到1小于缓存中的最小序号,会抛出异常,而Producer将重试发送1超过最多次数或超时,影响性能。

幂等如何保证有序性?

通过引入ProduceID(PID)和SequenceNumber的概念,每个Producer在初始化时被分配唯一的PID,而<Topic,Partition>的每条有一个从0单调递增的SequenceNumber。在发送消息时,由以下三点保证:

  1. 验证序号连续:Broker会验证Batch的SequenceNumber是否连续,若不连续,抛出异常;
  2. 重试时,batch放置正确位置:Producer请求重试时,会根据SequenceNumber将Batch放在队列中的合适位置;
  3. 重试时,max.in.flight调为1:当请求重试时,会把max.in.flight动态调整为1,保证请求序号小的先发送成功。

5. 如何保证幂等?

Kafka具有幂等机制,但默认不开启,需要设置enable.idempotence为true开启。但只能实现单会话、单分区上的幂等。

为什么只能实现单会话上的幂等?

在Producer初始化时,Kafka会为其重新分配一个新的PID,而Broker端在维护SequenceNumber时是以<ProducerID, Topic, Partition>作为维度,因此当PID变化时Broker将无法获得之前的状态信息,无法做到单会话上的不丢不冲。

如何实现跨会话幂等?

事务机制,通过引入TransactionIDEpoch。不同于PID是由内部进行分配,TrasactionID是由用户提供。而TransactionID与PID会一一对应,这样当Producer宕机时,集群启动一个新的Producer,在初始化时可以通过TransactionID获得PID,便能继续工作。同时会被分配一个单调递增的Epoch,来保证当旧Producer恢复后可能生产出重复消息,Broker段会拒绝旧Epoch的消息。

6. 支持什么语义?

三种语义:

  1. 最多一次(At Most Once):不会重复发送,可能消息丢失
  2. 最少一次(At Least Once):会重复发送,消息不会丢失(默认)
  3. 只有一次(Exactly Once):不会重复发送,消息不会丢失

7. 如何保证Exactly Once语义?

  1. Producer幂等 + At Least Once = Exactly Once(单分区、单会话)
  2. 事务可实现跨分区、跨会话的Exactly Once语义

8. 消息重复的场景有哪些?如何解决?

Broker在写入消息后,Producer没有收到成功的响应。

解决方法:

  1. 启动幂等;
  2. acks = 0,不重试,但会丢失消息。

9. 消息丢失的场景有哪些?如何解决?

(一)Producer端丢失消息

在调用send方法时,由于网络原因发送失败。

解决办法:设置retries为一个合适的值,一般为3,此外重试的间隔不能太小,避免网络一次波动的区间就把三次重试用完了。

(二)Consumer端丢失消息

自动提交offset时,可能未来得及处理消息,但offset已被提交。

解决办法:关闭自动提交,消费完后手动提交offset。

(三)Broker端丢失消息

Leader副本所在的Broker宕机,而Follower副本还没有完全通过Leader

解决办法:

  1. 设置acks =-1或ALL,保证Follower副本写入消息;
  2. replication.factor > 3,保证分区至少有3个副本,冗余消息;
  3. min.insync.replicas >1,消息至少被写入2个副本才认为成功;
  4. unclean.leader.election.enable=false,避免从非ISR中选举Leader。

10. Kafka吞吐量高的原因

  1. 顺序写:写读数据时,数据直接追加在文件的末尾;
  2. MMAP:数据不实时写入硬盘,以此提高IO效率;
  3. 零拷贝:读数据时,使用了sendfile,磁盘文件读到OS内核缓冲区后,直接转到socket buffer进行网络发送;
  4. 批量压缩:消耗少量的CPU资源,提高IO效率;

一句话贯穿:Kafka把所有的消息都变成一个个批量的文件,并且进行合理的批量压缩,减少网络IO的损耗,写入是通过MMAP提高IO效率,同时由于单个分区是顺序写文件,所以速度最优;读取数据的时候配合sendfile直接暴力输出。

以上就是本次分享的10道Kafka面试题,有问题的地方,欢迎留言交流。

我是草捏子,一只热爱技术和生活的草鱼,我们下期见!

参考资料

[1]

Kafka 面试题:基础 27 问,必须都会的呀: https://xie.infoq.cn/article/6c879c4c3b52e416f251b2909

[2]

八年面试生涯,整理了一套Kafka面试题: https://juejin.cn/post/6844903889003610119

[3]

32 道常见的 Kafka 面试题你都会吗?附答案: https://www.iteblog.com/archives/2605.html

[4]

Kafka面试题与答案全套整理: http://trumandu.github.io/2019/04/13/Kafka%E9%9D%A2%E8%AF%95%E9%A2%98%E4%B8%8E%E7%AD%94%E6%A1%88%E5%85%A8%E5%A5%97%E6%95%B4%E7%90%86/

[5]

大数据Kafka面试题: https://zhuanlan.zhihu.com/p/107350990

[6]

面试官问我如何保证Kafka不丢失消息?我哭了: https://juejin.cn/post/6844904094021189639

[7]

Kafka速度快的原因: https://www.linuxidc.com/Linux/2019-11/161504.htm

[8]

万字长文干货 | Kafka 事务性之幂等性实现: https://cloud.tencent.com/developer/article/1430049

[9]

Kafka事务特性详解: https://www.jianshu.com/p/64c93065473e

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 草捏子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
dede怎么取消后台验证码,DEDE取消后台验证码
DEDEv5.5/v5.6怎么取消后台验证码,DEDE取消后台验证码 有些时候,使用DEDECMS的时候,在后台登陆处遇到后台验证码错误,或者嫌弃后台验证码麻烦,我们就可以将后台的验证码取消掉.这篇文章是介绍教你如果取消 DEDECMSv5.5后台验证码的步骤: 找到DEDE后台目录,也就是默认的 /dede/login.php 在Dreamweaver8里面是第44行 找到以下代码
用户1088318
2025/05/21
440
【DEDE后台】织梦网站后台登录页面删除cms广告
DEDE织梦cms常用的参数标签汇总、以及操作过程中的一些bug问题解决方法,dede网站二开,以下龙腾飞网络科技-小吴实操中笔记记录,保存使用非常方便:
攻城狮与产品喵
2025/03/13
3160
【DEDE后台】织梦网站后台登录页面删除cms广告
通过DedeCMS学习php代码审计
织梦(DedeCms)也是一个国产内容管理系统,曾经爆出过众多漏洞,甚至还有人开发了dedecms漏洞一键扫描器
FB客服
2021/08/24
22.2K0
搭建dedecms漏洞靶场练习环境
本文将对dedecms(织梦cms)所存在的漏洞进行分析和复现,因为代码审计较弱,代码这一块的分析借鉴了一些大佬们的思想,在这里对大佬们表示衷心的感谢。
HACK学习
2021/06/24
12.5K1
搭建dedecms漏洞靶场练习环境
DEDECMS织梦修改include和plus重命名防漏洞防篡改防挂马
织梦dedecms是站长使用得比较多的一个建站开源程序,正因如此,也是被被入侵挂马比较多的程序。下面就来跟大家说一下怎么重新命名dedecms的include文件夹以及plus文件夹来提高网站的安全性,减少被黑客软件扫描到漏洞的概率。 dedecms的漏洞主要集中在data、include、plus、dede、member几个文件夹中的php文件里,对于data这个文件夹我们可以把它移到网站的根目录外,dede可以冲命名,member可以删掉,一般用不着,special专题功能 install安装程序(必
米米素材网
2022/07/21
3.1K0
DEDECMS织梦修改include和plus重命名防漏洞防篡改防挂马
【DEDE会员】dedecms禁用了游客评论怎么设置?织梦5.7怎么能让游客评论dede不登陆评论文章方法
DEDE织梦cms常用的参数标签汇总、以及操作过程中的一些bug问题解决方法,dede网站二开,以下龙腾飞网络科技-小吴实操中笔记记录,保存使用非常方便:
攻城狮与产品喵
2025/03/13
1400
【DEDE会员】dedecms禁用了游客评论怎么设置?织梦5.7怎么能让游客评论dede不登陆评论文章方法
DedeCMS的两个小trick
0x00 前言 昨天晚上做了一个神奇的梦,梦到了我高中时候晚自习在偷偷的看《黑客攻防技术宝典》,当年的事情无论是苦是乐,回忆起来总是感觉非常的美好。但是,现实就是现实,梦境还是要被舍友的闹铃声打破,在大梦初醒后,我仿佛有一种“垂死梦中惊坐起”的感觉,是谁为我织出了这么美好的一个梦境?难道织梦CMS(DedeCMS)又要出0day了?于是,我立马从床上跳了下来,打开电脑,从官网下载了最新版的织梦CMS(DedeCMS V5.7 SP2正式版),心想着一定要代码审计一波带走。于是乎,就有了你现在正在阅读的这篇文
ChaMd5安全团队
2018/04/16
1.3K0
DedeCMS的两个小trick
DEDECMS仿站常用模板标签记录 DEDECMS主题模板必备
DEDECMS织梦CMS程序如今官方也不在更新,但是还是有很多人使用。这款内容管理系统的CMS程序曾经确实是非常的火热,基本上企业网站、内容类的网站都会使用这款程序,在于这款程序的结构非常的简单。但是也有一些缺点,比如经常有漏洞,但是如果取消交互功能还是比较安全的。
老蒋
2021/12/27
27.5K0
dedecms数据库内容替换安全确认码不显示怎么解决
  ytkah今天在网站迁移服务器时发现,dedecms数据库内容替换安全确认码无法显示,这个安全码的位置是在核心 - 批量维护 - 数据库内容替换,有个安全码填写,这里教你怎么直接忽略这个验证码。打开dede/sys_data_replace.php,找到以下代码(大约在45行),删除或者注释掉,这个时候我们再次进行数据库内容替换时就无需输入安全确认码了。 // if($validate == "" || $validate != $svali) // { // ShowMsg("安全确认码
ytkah
2018/03/06
2.5K0
dedecms无法登录提示本页面禁止返回
  ytkah最近用dedecms做会员系统,在做登录页面的时候发现登陆的时候提示本页面禁止返回,把登陆模板换回官方原来的,竟然可以登陆,那么应该是模板出错了,又看了index_do.php这个文件,这个就是登陆的处理文件,$fmdo $dopost这两个变量 为空的话,系统就会啥都不做,提示本页面禁止返回。最根本的原因就是,在模板登陆表单里面没有加上 <input type="hidden" name="fmdo" value="login"> <input type="hidden" name="dop
ytkah
2018/03/06
6K0
dedecms无法登录提示本页面禁止返回
重置dedecms管理员后台密码重现及分析
0×00 概述 2018年1月,网上爆出dedecms v5.7 sp2的前台任意用户密码重置和前台任意用户登录漏洞,加上一个管理员前台可修改其后台密码的安全问题,形成漏洞利用链,这招组合拳可以重置管理员后台密码。 先来看看整体利用流程:    重置admin前台密码—>用admin登录前台—>重置admin前后台密码 0×01 前台任意用户密码重置分析 组合拳第一式:重置管理员前台密码 漏洞文件:member\resetpassword.php:75 else if(
奶糖味的代言
2018/04/16
6.9K0
重置dedecms管理员后台密码重现及分析
总结一些防止dedecms系统被攻击的方法
总结一些防止dedecms系统被攻击设置的方法,可有效的防止织梦系统被挂马,仅供各位站长参考。 1.安装时数据库的前缀不用dedecms默认的前缀dede_,可以改成其他的名称如diy_ 2.装好dede织梦cms系统后删除装文件install 3.修改织梦后台文件目录:把默认的dede改成其他名字 4.织梦后台后台密码尽量复杂化:密码应该由大写字母、小写字母和数字组成 5.将系统的data目录迁移到根目录以外:data目录是系统缓存和配置文件的目录,一般都有可以读写的权限,只要是能够写入的目录都可能存在安
ytkah
2018/03/06
2.9K0
dedecms首页调用随机文章全自动时时更新
dedecms织梦系统是全站生成静态html的,这个对搜索引擎比较友好,但是有时我们要调用文章,让蜘蛛每次来访问都感觉像是有添加新内容一样,要如何做到呢?
ytkah
2022/03/14
7.4K0
几个有效方法去掉DedeCMS首页index.html后缀
我们有在使用织梦DedeCMS程序的时候是否有看到在打开网站首页的时候会有index.html这样子的后缀跟着。有些朋友可能忌讳这样的样式,有的会说对网站SEO有影响,实际上影响是不大的,只不过看着确实不是特别好看,如果我们有需要去掉的话也是可以的。
老蒋
2021/12/27
4K0
DEDECMS织梦文章列表标题重复显示解决方案
今天还原数据库后,浏览网页http://www.mimisucai.com/a/wangluobiancheng/list_7_2.html发现列表页标题有重复,先上图:
米米素材网
2022/07/16
4.8K0
DEDECMS织梦文章列表标题重复显示解决方案
dedecms模板文件讲解以及首页标签替换
关于dedecms模板文件,可以参考织梦系统文件夹功能简介或者是之前发布的dedecms的安装介绍.
米米素材网
2022/06/23
16.8K0
dedecms模板文件讲解以及首页标签替换
DedeCMS v5.8.1_beta未授权远程命令执行漏洞分析
深信服公众号前几天发了Dedecms未授权RCE的漏洞通告。地址是这个: 【漏洞通告】DedeCMS未授权远程命令执行漏洞
Deen_
2021/11/12
4.4K0
DedeCMS v5.8.1_beta未授权远程命令执行漏洞分析
织梦CMS安装后的安全优化设置,有效防护木马
织梦CMS在安装完成后,新人往往会直接开始开发使用,忽视了一些安全优化的操作,这样会导致后期整个系统安全系数降低,被黑或者被注入的概率极高,毕竟这世界百分百存在着极多的无聊hacker对全网的网站进行扫描,扫到你这个菜站,尤其是使用率极高的DEDECMS,对你的站点下手的欲望更高,所以在开发前做好安全防范还是很有必要的!
米米素材网
2022/07/15
2.9K0
织梦CMS安装后的安全优化设置,有效防护木马
【DEDE文章】dedecms出现DedeTag Engine Create File False的解决教程
DEDE织梦cms常用的参数标签汇总、以及操作过程中的一些bug问题解决方法,dede网站二开,以下龙腾飞网络科技-小吴在建站实操中笔记记录,织梦dede建站教程保存使用非常方便:
攻城狮与产品喵
2025/03/13
1560
【DEDE文章】dedecms出现DedeTag Engine Create File False的解决教程
杨校老师课堂之DeDeCMS建站_程序安装
织梦程序依托MySQL数据库、PHP开发环境、服务器(Apache或Nginx),初学期间安装这些环境对初学者是极其困难,因此,我们可以借助集成开发环境,也就是通过一个软件完成以上所有环境的配置。 基于Linux操作系统、PHP开发环境、MySQL数据库、Apache服务器的集成开发环境软件还是有很多的,DeDeCMS官方提供了DeDeApZ、还有Apmserver、PHPStudy等软件。
杨校
2021/06/01
3.9K0
杨校老师课堂之DeDeCMS建站_程序安装
推荐阅读
相关推荐
dede怎么取消后台验证码,DEDE取消后台验证码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档