Kafka面试

文章内容转自: 华仔聊技术(Kafka 面试连环炮)

目录

一.初级

1.Kafka核心组件图

2.在 Kafka 中 Zookeeper 作用是什么?

3.生产者有哪些发消息的模式?

4.Kafka 如何合理设置分区数,越多越好吗?

Kafka 如何合理设置分区数 

分区设置越多越好吗?

5.如何保证 Kafka 中的消息是有序的? 

6.Kafka 副本有哪两种,作用是什么?

7.Kafka 读写数据这么快是如何做到的? 

顺序追加写 

Page Cache

零拷贝技术

8.Kafka中Offset的作用是什么,如何进行维护?

位移 Offset 管理方式 

__consumer_offsets 创建

二.中级

9.谈谈你对 kafka 的集群架构是如何理解的?

Kafka 整体架构图

Kafka存储机制

Kafka 副本机制 

Kafka 网络模型

谈谈你对 Kafka 消息语义是如何理解的? 

Producer端

Consumer端

谈谈你对 Kafka 副本机制是如何理解的? 

副本同步机制 

副本管理  

ISR 副本集合 

谈谈你对Kafka Leader选举机制是如何理解? 

谈谈你对Kafka控制器及选举机制是如何理解?

控制器机制

控制器数据分布 

控制器故障转移 

控制器触发选举场景

控制器选举机制 

谈谈 kafka 的数据可靠性是怎么保证的?

谈谈Kafka线上大量消息积压你是如何处理的?

优化性能来避免消息积压 

消息积压后如何处理 

三.高级

四.补充 


一.初级

1.Kafka核心组件图

2.在 Kafka 中 Zookeeper 作用是什么?

Kafka 集群能够正常工作,目前还是需要依赖于 ZooKeeper,主要用来「负责 Kafka集群元数据 管理,集群协调工作」,在每个 Kafka 服务器启动的时候去连接并将自己注册到 Zookeeper,类 似注册中心。
Kafka 使用 Zookeeper 存放「集群元数据」、「集群成员管理」、 「Controller 选举」、「其他 管理类任务」等。待 KRaft 提案完成后,Kafka 将完全不依赖 Zookeeper。

3.生产者有哪些发消息的模式?

发后即忘模式「fire-and-forget」,它只管发送消息,并不需要关心消息是否发送成功。本质上也是异步发送的方式, 吞吐量高但会导致消息丢失;

同步发送模式 「sync」,调用 send() 方法会返回一个 Future 对象,再通过调用 Future 对象的 get() 方法,等待结果返回,根据返回的结果可以判断消息是否发送成功, 由于是同步发送会阻塞,只有当消息通过 get() 返回数据时,才会继续下一条消息的发送。

异步发送模式「async」,在调用 send() 方法的时候指定一个 callback 函数,当 Broker 接收到返回的时候,该 callback 函数会被触发执行,通过回调函数能够对异常情况进行处理,当调用了回 调函数时,只有回调函数执行完毕生产者才会结束,否则一直会阻塞。

max_in_flight_requests_per_connection 限制客户端在单个连接上能够发送的未响应请求的个数 

4.Kafka 如何合理设置分区数,越多越好吗?

Kafka 如何合理设置分区数 

分区设置越多越好吗?

Kafka 高吞吐量的原因之一就是通过 Partition 将 Topic 中的消息均衡保存到 Kafka 集群中 不同的 Broker 中。

理论上说,如果一个 Topic 分区越多,整个集群所能达到的吞吐量就越大。 

消耗文件句柄方面分析 

端到端的延迟方面分析 

高可用性方面分析

5.如何保证 Kafka 中的消息是有序的? 

我们知道在 Kafka 中,并不保证消息全局有序,但是可以保证分区有序性分区与分区之间是无 序的。那么如何保证 Kafka 中的消息是有序的呢? 可以从以下三个方面来入手分析:

生产端 Producer 

要严格保证 Kafka 发消息有序,首先要考虑用同步的方式来发送消息, 两种同步发送的方式 如下: 

服务端 Broker 

消费端 Consumer 

在 Consumer 端,根据 Kafka 的模型,一个 Topic 下的每个分区只能从属于这个 Topic 的消费者 组中的某一个消费者。 

当消息被发送分配到同一个 Partition 中,消费者从 Partition 中取出来数据的时候,也一定是有顺 序的,没有错乱。

但是消费者可能会有多个线程来并发来消费消息。如果单线程消费数据,吞吐量太低了,而多个线 程并发消费的话,顺序可能就乱掉了。

此时可以通过写多个内存队列,将相同 key 的消息都写入同一个队列,然后对于多个线程,每个 线程分别消息一个队列即可保证消息顺序。

6.Kafka 副本有哪两种,作用是什么?

为为实现「数据备份」的功能 Kafka 提供了副本机制,一个 Topic 的 每个 Partition 都有若干个副本,一个 Leader 副本和若干个 Follower 副本 .

7.Kafka 读写数据这么快是如何做到的? 

顺序追加写 

kafka 在写数据的时是以「磁盘顺序写」的方式来进行落盘的, 即将数据追加到文件的末尾。对于 普通机械磁盘, 如果是随机写的话, 涉及到磁盘寻址的问题, 导致性能极低, 但是如果只是按照顺序 的方式追加文件末尾的话, 这种磁盘顺序写的性能基本可以跟写内存的性能差不多的

Page Cache

首先 Kafka 为了保证磁盘写入性能,通过 mmap 内存映射的方式利用操

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值