大数据面试题——Kafka面试题(一)

1、请说明什么是Apache Kafka?

Apache Kafka是由Apache开发的一种发布订阅消息系统,它是一个分布式的、分区的和重复的日志服务

2、请说明什么是传统的消息传递方法?

传统的消息传递方法包括两种:

队列:在队列中,一组用户可以从服务器中读取消息,每条消息都发送给其中一个人

发布-订阅:在这个模型中,消息被广播给所有的用户

3、请说明Kafka相对于传统的消息传递方法有什么优势?

高性能:单一的Kafka代理可以处理成千上万的客户端,每秒处理数兆字节的读写操作,Kafka性能远超过传统的ActiveMQ、RabbitMQ等,而且Kafka支持Batch操作

可扩展:Kafka集群可以透明的扩展,增加新的服务器进集群

容错性: Kafka每个Partition数据会复制到几台服务器,当某个Broker失效时,Zookeeper将通知生产者和消费者从而使用其他的Broker

4、在Kafka中broker的意义是什么?

在Kafka集群中,broker指Kafka服务器

术语解析

名称 说明
Topic 主题,可以理解为一个队列
Partition 分区,为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序
Offset 偏移量,kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafkaOffset
Broker 一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic
Producer 消息生产者,向kafka broker发消息的客户端
Consumer 消息消费者,向kafka broker取消息的客户端
Consumer Group 消费者组,这是kafka用来实现一个topic消息的广播(发给所有的consumer)和单播(发给任意一个consumer)的手段。一个topic可以有多个CG。topic的消息会复制(不是真的复制,是概念上的)到所有的CG,但每个partion只会把消息发给该CG中的一个consumer。如果需要实现广播,只要每个consumer有一个独立的CG就可以了。要实现单播只要所有的consumer在同一个CG。用CG还可以将consumer进行自由的分组而不需要多次发送消息到不同的topic

5、Kafka服务器能接收到的最大信息是多少?

Kafka服务器可以接收到的消息的最大大小是1000000字节

6、Kafka中的ZooKeeper是什么?Kafka是否可以脱离ZooKeeper独立运行?

Zookeeper是一个开放源码的、高性能的协调服务,它用于Kafka的分布式应用

不可以,不可能越过Zookeeper直接联系Kafka broker,一旦Zookeeper停止工作,它就不能服务客户端请求

Zookeeper主要用于在集群中不同节点之间进行通信,在Kafka中,它被用于提交偏移量,因此如果节点在任何情况下都失败了,它都可以从之前提交的偏移量中获取,除此之外,它还执行其他活动,如: leader检测、分布式同步、配置管理、识别新节点何时离开或连接、集群、节点实时状态等等

7、解释Kafka的用户如何消费信息?

在Kafka中传递消息是通过使用sendfile API完成的。它支持将字节Socket转移到磁盘,通过内核空间保存副本,并在内核用户之间调用内核

8、解释如何提高远程用户的吞吐量?

如果用户位于与broker不同的数据中心,则可能需要调优Socket缓冲区大小,以对长网络延迟进行摊销

9、解释一下,在数据制作过程中,你如何能从Kafka得到准确的信息?

在数据中,为了精确地获得Kafka的消息,你必须遵循两件事:在数据消耗期间避免重复,在数据生产过程中避免重复

这里有两种方法,可以在数据生成时准确地获得一个语义:

每个分区使用一个单独的写入器,每当你发现一个网络错误,检查该分区中的最后一条消息,以查看您的最后一次写入是否成功

在消息中包含一个主键(UUID或其他),并在用户中进行反复制

10、解释如何减少ISR中的扰动?broker什么时候离开ISR?(☆☆☆☆☆)

ISR是一组与leaders完全同步的消息副本,也就是说ISR中包含了所有提交的消息。ISR应该总是包含所有的副本,直到出现真正的故障。如果一个副本从leader中脱离出来,将会从ISR中删除

11、Kafka为什么需要复制?

Kafka的信息复制确保了任何已发布的消息不会丢失,并且可以在机器错误、程序错误或更常见些的软件升级中使用

12、如果副本在ISR中停留了很长时间表明什么?

如果一个副本在ISR中保留了很长一段时间,那么它就表明,***无法像在leader收集数据那样快速地获取数据

13、请说明如果首选的副本不在ISR中会发生什么?

如果首选的副本不在ISR中,控制器将无法将leadership转移到首选的副本

14、Kafka有可能在生产后发生消息偏移吗?

在大多数队列系统中,作为生产者的类无法做到这一点,它的作用是触发并忘记消息。broker将完成剩下的工作,比如使用id进行适当的元数据处理、偏移量等

作为消息的用户,你可以从Kafka broker中获得补偿。如果你注视SimpleConsumer类,你会注意到它会获取包括偏移量作为列表的MultiFetchResponse对象。此外,当你对Kafka消息进行迭代时,你会拥有包括偏移量和消息发送的MessageAndOffset对象

15、请说明Kafka 的消息投递保证(delivery guarantee)机制以及如何实现?(☆☆☆☆☆)

Kafka支持三种消息投递语义:

1)At most once:消息可能会丢,但绝不会重复传递

2)At least one:消息绝不会丢,但可能会重复传递

3)Exactly once:每条消息肯定会被传输一次且仅传输一次,很多时候这是用户想要的

consumer在从broker读取消息后,可以选择commit,该操作会在Zookeeper中存下该consumer在该partition下读取的消息的offset,该consumer下一次再读该partition时会从下一条开始读取。如未commit,下一次读取的开始位置会跟上一次commit之后的开始位置相同

可以将consumer设置为autocommit,即consumer一旦读到数据立即自动commit。如果只讨论这一读取消息的过程,那Kafka是确保了Exactly once。但实际上实际使用中consumer并非读取完数据就结束了,而是要进行进一步处理,而数据处理与commit的顺序在很大程度上决定了消息从broker和consumer的delivery guarantee semantic

读完消息先commit再处理消息。这种模式下,如果consumer在commit后还没来得及处理消息就crash了,下次重新开始工作后就无法读到刚刚已提交而未处理的消息,这就对应于At most once

读完消息先处理再commit消费状态(保存offset)。这种模式下,如果在处理完消息之后commit之前Consumer crash了,下次重新开始工作时还会处理刚刚未commit的消息,实际上该消息已经被处理过了,这就对应于At least once

如果一定要做到Exactly once,就需要协调offset和实际操作的输出。经典的做法是引入两阶段提交,但由于许多输出系统不支持两阶段提交,更为通用的方式是将offset和操作输入存在同一个地方。比如,consumer拿到数据后可能把数据放到HDFS,如果把最新的offset和数据本身一起写到HDFS,那就可以保证数据的输出和offset的更新要么都完成,要么都不完成,间接实现Exactly once。(目前就high level API而言,offset是存于Zookeeper中的,无法存于HDFS,而low level API的offset是由自己去维护的,可以将之存于HDFS中)

总之,Kafka默认保证At least once,并且允许通过设置producer异步提交来实现At most once,而Exactly once要求与目标存储系统协作,Kafka提供的offset可以较为容易地实现这种方式

16、如何保证Kafka的消息有序(☆☆☆☆☆)

Kafka对于消息的重复、丢失、错误以及顺序没有严格的要求

Kafka只能保证一个partition中的消息被某个consumer消费时是顺序的,事实上,从Topic角度来说,当有多个partition时,消息仍然不是全局有序的

17、kafka数据丢失问题,及如何保证?

1)数据丢失

acks=1的时候(只保证写入leader成功),如果刚好leader挂了。数据会丢失

acks=0的时候,使用异步模式的时候,该模式下kafka无法保证消息,有可能会丢

2)brocker如何保证不丢失

acks=all : 所有副本都写入成功并确认

retries = 一个合理值

min.insync.replicas=2 消息至少要被写入到这么多副本才算成功

unclean.leader.election.enable=false 关闭unclean leader选举,即不允许非ISR中的副本被选举为leader,以避免数据丢失

3)Consumer如何保证不丢失

如果在消息处理完成前就提交了offset,那么就有可能造成数据的丢失

enabel.auto.commit=false关闭自动提交offset

处理完数据之后手动提交

18、kafka的balance是怎么做的?

生产者将数据发布到他们选择的主题。生产者可以选择在主题中分配哪个分区的消息。这可以通过循环的方式来完成,只是为了平衡负载,或者可以根据一些语义分区功能(比如消息中的一些键)来完成。更多关于分区在一秒钟内的使用

19、kafka的消费者方式?

consumer采用pull(拉)模式从broker中读取数据

push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。它的目标是尽可能以最快速度传递消息,但是这样很容易造成consumer来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而pull模式则可以根据consumer的消费能力以适当的速率消费消息

对于Kafka而言,pull模式更合适,它可简化broker的设计,consumer可自主控制消费消息的速率,同时consumer可以自己控制消费方式——即可批量消费也可逐条消费,同时还能选择不同的提交方式从而实现不同的传输语义

pull模式不足之处是,如果kafka没有数据,消费者可能会陷入循环中,一直等待数据到达。为了避免这种情况,我们在我们的拉请求中有参数,允许消费者请求在等待数据到达的“长轮询”中进行阻塞


#面试题##面试题目##大数据开发工程师#
全部评论
offset在0.9版本后offset就存在broker的Comsume_offset分区(默认是50个分区)里了,
1 回复 分享
发布于 2022-07-20 23:48
感谢分享,希望能用到
点赞 回复 分享
发布于 2022-05-14 22:16

相关推荐

4.9投递 4.10约一面4.14一面面试35min1、自我介绍2、你说大一学Java大二就去找实习,为什么有这种想法3、你说你是自学的Java,学校应该有Java课程吧4、老师课堂上讲的Java课程和你自己学的有什么区别啊5、手撕:出了两道题,一个链表题一个两数之和,任选其一(我选了两数之和)6、JVM概念,有哪些东西构成7、除了运行时数据区那五个还有哪些组成部分8、JUC概念9、JUC包里有哪几类东西10、实现多线程有哪几种方式11、线程池用过吗,怎么用的12、具体用的哪个类型的线程池13、线程池的参数14、线程池执行原理(工作流程)15、线程池这个参数怎么设计,具体什么情况参数又该怎么设计呢16、为什么IO密集的情况要调大线程数呢17、那你实习用的公司封装好的线程池提交任务的方法叫什么还记得吗18、线程安全问题是什么意思19、实习或者写项目的时候有没有遇到过哪些令你印象深刻的问题吗,怎么解决的20、这个问题有引发你什么思考吗21、哪个技术栈你感觉了解的最深入,咱们来聊一聊22、Redis哪个部分了解的比较多23、Redis是单线程还是多线程的24、单线程和多线程有什么区别25、Redis做什么事的时候是单线程,什么时候是多线程呢26、Redis的持久化机制27、RDB和AOF具体在哪些场景适用呢28、上一段实习为啥不干了呢29、那你是觉得上一段实习带给你的挑战,你能学到的东西还是不够?30、反问:这个岗位总共几轮面试31、反问:具体什么业务
查看29道真题和解析
点赞 评论 收藏
分享
04-21 12:52
已编辑
华东师范大学 Java
一面 (3.30)1.CQRS介绍2.分布式事务有哪些 优缺点3.Seata AT 跟 kafka加本地消息表 对比4.聚簇索引跟非聚簇索引5.回表是什么?6.MVCC机制7.Redis的几种持久化机制8.算法 二维DP   二维网格 0 表示路 1 表示障碍 求能否从0,0 走到 n-1,m-1当天约二面二面 (4.01)1.围绕项目问DDD四层架构,为什么使用DDD ?2.四层相比三层的优势3.CQRS是怎么使用的?4.多级缓存一致性怎么保证的?5.网关调用应该放在代码结构的哪里?拿到数据之后的逻辑又应该放在哪里?6.算法 字符串解码 leetcode 394  追问如果是流式输入怎么办(非常长,无法等到终止符)?面试官临时有事 三面拖到清明后三面 (4.07)1.项目部署上线了吗? 是自发开发的吗?2.项目的难点? 怎么进行秒杀场景的建模3.DDD的好处有哪些?4.DDD的应用场景是那些?5.DDD跟微服务的关系?6.充血模型对比贫血模型7.项目CQRS解决了哪些问题?8.使用过AI coding 吗?一般怎么使用的9.你觉得在AI时代下 后端的核心竞争力是什么?10.读研跟工作怎么选择?为什么?三面完了,过了几天告诉我上海没HC了 让我转Base直接三面 还是同一个岗位四面 (4.14)1.挑一个项目讲讲2.分布式事务怎么解决的3.Seata简单介绍一下 干什么用的4.秒杀怎么保证并发安全的5.怎么设计一个高性能的分布式锁 会遇到哪些问题?6.消息可靠性怎么保证7.ISR副本是什么,有什么用8.Kafka高性能的原因9.Raft跟Paxos的区别10.Lua脚本怎么保证原子性11.MySQL索引为什么用B+树,跟B树相比优势在哪12.Leetcode 152 乘积最大的子数组 要求输出对应的起始结束下标13.Leetcode 4 寻找两个正数数组的中位数 复杂度要求log(n+m)14.思维题: 一个可以产生很多随机数的计算机 怎么用它估算圆周率面完当天过  又告诉我表现的不错要给我加面(表现的不错加什么面试。。。)五面 (4.15)1.开局聊天 什么时候到岗,这学期有什么课2.DDD是什么3.DDD的模型怎么跟接口,数据库进行交互4.数据模型跟领域模型怎么交互5.秒杀场景怎么使用DDD进行建模6.Raft跟Paxos的区别7.设计一个点赞系统8.分布式的环境下怎么提高点赞的并发量(分片即可)9.如果要降低成本怎么修改方案 (冷热分离即可)10.为什么redis快?11.Mysql所有数据都是直接写入磁盘吗? (BufferPool 以及 WAL 技术)12.那为什么redo log也是直接写磁盘  但就是比数据写入快呢?(环形缓冲区,顺序写入)13.算法 是一道贪心+堆的组合 不算难面完秒过HR面(4.16)告诉我面试全部通过  目前等OC中  许愿OC4.21更新  已offer
发面经攒人品
点赞 评论 收藏
分享
04-17 16:18
厦门大学 Java
项目相关问题1. 介绍美食点评服务平台的业务场景、核心链路及基本实现。2. 美食点评服务平台的用户角色有哪些?不同角色可在平台上进行哪些操作?3. 美食点评服务平台除了优惠券秒杀模块,还有哪些功能?4. 美食点评服务平台的优惠券是由商家自主发放还是系统管理员添加?5. 做美食点评服务平台时面临的较大挑战有哪些?如何解决?6. 热点 Key 场景下,独立线程池异步重建是单机维度还是其他维度?请展开介绍。7. 异步线程重建的过程是怎样的?8. 美食点评服务平台是分布式服务还是单机服务?9. 分布式场景下,多台机器请求过期 Key 时,分布式锁何时释放?业务执行完的具体含义是什么?10. 访问 Redis Key 时,是请求进来就获取分布式锁,还是发现逻辑过期才获取?11. 介绍企业级知识库问答系统(RAG 项目)的整体流程。12. 企业级知识库问答系统中,哪些组件是手动代码串联实现,哪些是直接使用现有能力?13. 了解 Langchain 等现成工具的能力吗?它们能做到什么程度?14. 了解 Redis 的底层数据结构吗?跳表的实现原理是什么?编程能力相关问题1. 借助 AI coding 实现支持“增”和“查”功能的有序链表(增:插入数值;查:判断某值是否在链表中)。2. 插入 1、5、3、3、3 这 5 个数字后,有序链表会呈现什么样子?3. 手写 count 函数,返回目标值在链表中出现的次数,说明实现思路。4. 单纯从代码编写角度,如何优化 count 函数的性能(不引入其他数据结构)?其他问题1. 日常开发中常用的 AI coding 模型或工具是什么?2. 有什么想了解的地方吗?一点八股都没问,项目问的也奇怪,ai coding 后要我分析一下生成的代码质量,不知道怎么分析,求助一下贴友ai coding 是怎么个prompt 会让面试官满意,因为感觉我写不好提示词,然后要怎么评审这个代码的准确性,请教万能的贴友
查看20道真题和解析
点赞 评论 收藏
分享
评论
10
85
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务