大数据面试题V3.0 -- Kafka面试题
Kafka面试题(约5.5w字)
-
介绍下Kafka,Kafka的作用?Kafka的组件?适用场景?
Kafka是分布式发布-订阅消息系统, 它最初是由LinkedIn公司开发的,之后成为Apache项目的一部分, Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据。
-
Kafka作为消息队列,它可解决什么样的问题?
缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,
kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行慢慢处理。 解耦和扩展性:项目开始的时候,并不能确定具体需求。
消息队列可以作为一个接口层,解耦重要的业务流程。只需要遵守约定,针对数据编程即可获取扩展能力。 冗余:可以采用一对多的方式,一个生产者发布消息,可以被多个订阅topic的服务消费到,供多个毫无关联的业务使用。 健壮性:消息队列可以堆积请求,所以消费端业务即使短时间死掉,也不会影响主要业务的正常进行。 异步通信:很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,
允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。 -
说下Kafka架构
Producer:生产者,负责将客户端生产的消息发送到 Kafka 中
broker:服务代理节点,Kafka 集群中的一台服务器就是一个 broker,
可以水平无限扩展,同一个 Topic 的消息可以分布在多个 broker 中;
Consumer:消费者,通过连接到 Kafka 上来接收消息,用于相应的业务逻辑处理。
ZooKeeper:kafka 依赖于 zookeeper,ZooKeeper
则是 Kafka 集群用来负责集群元数据的管理、控制器的选举等操作的。
Consumer Group:消费者组,指的是多个消费者共同组成一个组来消费一个 Topic 中的消息。
一个 Topic 中的一个分区只能被同一个 Consumer Group 中的一个消费者消费,其他消费者不能进行消费。
这里的一个消费者,指的是运行消费者应用的进程,也可以是一个线程。 前面提到 Kafka 同时支持两种消息传输模型,其中实现点对点模型的方式就是引入了 Consumer Group,目的主要是让多个消费者同时消费,可以加速整个消费者端的吞吐量。 在整个 Kafka 集群中 Producer 将消息发送给 broker,然后 broker 再将接收到的消息存储到磁盘中,然后 Consumer 再从 Broker 订阅并消费消息。 -
说下Kafka的特点,优缺点
1.优点 性能卓越,单机写入TPS约在百万条/秒,最大的优点,就是吞吐量高。 时效性:ms级 可用性:非常高,kafka是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用 消息有序,能够保证所有消息被消费且仅被消费一次; 有优秀的第三方Kafka Web管理界面Kafka-Manager; 在日志领域比较成熟,被多家公司和多个开源项目使用; 功能支持:功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及日志采集被大规模使用 2.缺点: Kafka单机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长 使用短轮询方式,实时性取决于轮询间隔时间; 消费失败不支持重试; 支持消息顺序,但是一台代理宕机后,就会产生消息乱序; 社区更新较慢;
-
Kafka相比于其它消息组件有什么好处?
1. 多生产者 可以无缝地支持多个生产者 2. 多消费者 支持多个消费者从一个消息流上读取数据,且消费者之间互不影响。 3. 基于磁盘的数据存储 支持消费者非实时地读取消息,由于消息被提交到磁盘,根据设置的规则进行保存。 当消费者发生异常时候意外离线,由于有持久化的数据保证可以实现联机后从上次中断的地方继续处理消息。 4. 伸缩性 用户在开发阶段可以先试用单个broker,然后随着数据量不断增长,部署到生产环境的集群可能包含上百个broker。 5. 高性能 100M/s,页缓存,0拷贝
-
Kafka生产者与消费者
-
Kafka分区容错性
partitionCount: 1 代表分区数为1 replicationFactor: 3 代表副本数为3 replicas:3 1 2 代表副本存放的brokerid Isr : 3 1 2 代表活着的是3 1 2 leader: 3 代表broker编号为3 的是leader 理解kafka的容错性:(容错性测试) 当我们kafka有3个,随意删除其2个都不会影响kafka运行 当只剩下一个时,那么默认这个就是leader 输入jps -m 显示三个kafka 进程 我们删除俩个,kafka依然运行
-
Kafka的消费端的数据一致性
一致性定义:若某条消息对client可见,那么即使Leader挂了,在新Leader上这条数据依然可以被正确地读到 HW:HighWaterMark,
Client 可以从 Leader 读到的最大 msg offset,即对外可见的最大 offset,HW = max(replica.offset) 对于 Leader 新收到的 msg,Client 不能立刻消费, Leader 会等待该消息被所有 ISR 中的 replication 同步后,更新 HW,此时该消息才能被client消费, 这样就保证了如果 Leader failed,该消息仍然可以从新选举的 Leader 中获取。 对于来自内部 Broker 的读取请求,没有 HW 的限制。 同时,Follower 也会维护一份自己的 HW , Folloer.HW = min(Leader.HW, Follower.offset) -
Kafka的leader挂掉之后处理方法
新leader的选举是由controller来监控管理。 当旧 leader 挂掉后,controller在 zk 中的监视器将消息发送给 controller,controller开始执行新leader的选举工作。 1.首先确认挂掉的节点上有哪些分区, 然后到相应的路径中获得分区所对应的已经同步的副本队列(ISR) 在controller监控下,多个已同步的副本同时竞争leader。 竞争过程:原先的 leader 节点挂掉后在 zk 中被注销了, 其他 follow 同时在 zk 中重新创建该节点,谁先成功了创建了,谁就是 leader。 zk 只认一个作为创建成功的节点。新leader的数据和挂掉的分区数据一致。这种数据不丢失。 (实际过程可看成为 kafka 集群刚启动时 leader 的选举也是类似机制) 2-1.如果已同步副本中没有相应的分区,可以等待 leader 分区复活。这种数据可能丢失。 2-2.如果已同步副本中没有相应的分区,也可以不等待,直接在ISR外,存活但未同步的副本中选个新 leader。这种数据有缺失。 3.如果ISR和未同步副本都挂了,那么将新leader设置为-1.
-
说下Kafka的ISR机制
kafka怎么解决高延迟的问题? ISR 如果一台 follower 因为某种原因迟迟不肯同步数据, 那么 leader 就需要一直等它而不能发送 ack, 为了解决这个问题,kafka采用了一个 ISR 方案。 leader维护了一个动态的 in-sync-replica 列表 ISR (与leader保持同步的副本集合,该集合中的副本和leader数据是一致的), 当 ISR 中的 follower 和leader 数据同步完成之后, leader就会向 follower 发送 ack, 如果 ISR 中的 follower 长时间未向 leader 发送同步完成消息, leader 会将其从 ISR 中剔除, 等待的时长由 replica.time.max.ms 参数设定。 leader 故障之后,只会从 ISR 中选举出新的leader。
-
Kafka的选举机制
比如3个节点选举leader: 编号为1、2、3。 1先启动,选择自己为leader, 然后2启动,也选择自己为leader, 由于1,2都没过半,选择编号大的为leader, 所以1、2都选择2为leader, 然后3启动,发现1,2已经协商好且数量过半, 于是3也选择2为leader, leader选举结束。
-
Kafka的ISR、OSR和ACK介绍,ACK分别有几种值?
ISR:In-Sync Replicas 副本同步队列 AR:Assigned Replicas 所有副本 ISR是由leader维护,follower从leader同步数据有一些延迟
(包括延迟时间replica.lag.time.max.ms和延迟条数replica.lag.max.messages两个维度, 当前最新的版本0.10.x中只支持replica.lag.time.max.ms这个维度),
任意一个超过阈值都会把follower剔除出ISR, 存入
OSR(Outof-Sync Replicas)列表,新加入的follower也会先存放在OSR中。AR=ISR+OSR。
ACK- 1(默认) 数据发送到Kafka后,经过leader成功接收消息的的确认,就算是发送成功了。在这种情况下,如果leader宕机了,则会丢失数据。
- 0 生产者将数据发送出去就不管了,不去等待任何返回。这种情况下数据传输效率最高,但是数据可靠性确是最低的。
- -1 producer需要等待ISR中的所有follower都确认接收到数据后才算一次发送完成,可靠性最高。当ISR中所有Replica都向Leader发送ACK时,leader才commit,这时候producer才能认为一个请求中的消息都commit了。
-
Kafka的工作原理?
-
Kafka怎么保证数据不丢失,不重复?
数据不丢失: 设置ack=all / -1,保证leader和follower分区都收到之后, 再返回给⽣产者成功。 如果其中有⼀个步骤异常,都会触发kafka的重试机制。 不重复,不丢失: 启动kafka的幂等性 enable.idempotence=true 同时要求 ack=all 且 retries>1。 幂等原理: 每个⽣产者producer都有⼀个唯⼀id,producer每发送⼀条数据, 都会带上⼀个 sequence,当消息落盘,这个 sequence 就会递增1。 那么只需要判断当前 消息的sequence 是否⼤于当前 最⼤sequence, ⼤于就代表此条数据没有落盘过,可以正常落盘。 不⼤于就代表落盘过,这个重发的消息会被服务端拒掉,从⽽避免消息重复落盘
-
Kafka分区策略
-
Kafka如何尽可能保证数据可靠性?
-
Kafka数据丢失怎么处理?
-
Kafka如何保证全局有序?
-
牛产者消费者模式与发布订阅模式有何异同?
-
Kafka的消费者组是如何消费数据的
-
Kafka的offset管理
-
Kafka为什么同一个消费者组的消费者不能消费相同的分区?
-
如果有一条offset对应的数据,消费完成之后,手动提交失败,如何处理?
-
正在消费一条数据,Kafka挂了,重启以后,消费的offset是哪一个
-
Kafka支持什么语义,怎么实现ExactlyOnce?
-
Kafka的消费者和消费者组有什么区别?为什么需要消费者组?
-
Kafka producer的写入数据过程?
-
Kafka producer的ack设署
-
Kafka的ack机制,解决了什么问题?
-
Kafka读取消息是推还是拉的模式?有什么好?
-
Kafka如何实现高吞吐的原理?
-
说下Kafka中的Partition?
-
Kafka是如何进行数据备份的?
-
Kafka里面存的数据格式是什么样的?
-
Kafka是如何清理过期文件的?
-
Kafka的一条message中包含了哪些信息?
-
Kafka如何保证数据的ExactlyOnce?
-
Kafka消费者怎么保证ExactlyOnce
-
Kafka监控实现?
-
Kafka中的数据能彻底删除吗?
-
Kafka复制机制?
-
Kafka分区多副本机制?
-
Kafka分区分配算法
-
Kafka蓄水池机制
-
Kafka如何实现享等性?
-
Kafka的offset存在哪?
-
Kafka中如何保证数据一致性?
-
Kafka新旧API区别
-
Kafka消息在磁盘上的组织方式
-
Kafka在哪些地方会有选举过程,使用什么工具支持选举?
-
Kafka搭建过程要配置什么参数?
-
Kafka的单播和多播
-
Kafka的高水位和Leader Epoch
-
Kafka的分区器、拦截器、序列化器?
-
Kafka连接Spark Streaming的几种方式
-
Kafka的生成者客户端有几个线程?
-
Kafka怎么防止脑裂
-
Kafka高可用体现在哪里
-
Zookeeper在Kafka的作用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~