程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

Kafka 最新面试题(10道-附答案)(kafuka面试)

balukai 2025-07-08 16:30:54 文章精选 4 ℃

每天给大家写一些面试题,希望能够帮助大家,利用业余时间好好提示自己吧。

1.Kafka的设计是什么样的呢?

- Kafka将消息以topic为单位进行归纳

- 将向Kafka topic发布消息的程序成为producers.

- 将预订topics并消费消息的程序成为consumer.

- Kafka以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker.

- producers通过网络将消息发送到Kafka集群,集群向消费者提供消息

2.数据传输的事物定义有哪三种?

数据传输的事务定义通常有以下三种级别:

(1) 最多一次: 消息不会被重复发送,最多被传输一次,但也有可能一次不传输

(2) 最少一次: 消息不会被漏发送,最少被传输一次,但也有可能被重复传输.

(3) 精确的一次(Exactly once): 不会漏传输也不会重复传输,每个消息都传输被一次而且仅仅被传输一次,这是大家所期望的

3.Kafka判断一个节点是否还活着有那两个条件?

(1) 节点必须可以维护和ZooKeeper的连接,Zookeeper通过心跳机制检查每个节点的连接

(2) 如果节点是个follower,他必须能及时的同步leader的写操作,延时不能太久

4.producer是否直接将数据发送到broker的leader(主节点)?

producer直接将数据发送到broker的leader(主节点),不需要在多个节点进行分发,为了帮助producer做到这点,所有的Kafka节点都可以及时的告知:哪些节点是活动的,目标topic目标分区的leader在哪。这样producer就可以直接将消息发送到目的地了

5、Kafa consumer是否可以消费指定分区消息?

Kafa consumer消费消息时,向broker发出"fetch"请求去消费特定分区的消息,consumer指定消息在日志中的偏移量(offset),就可以消费从这个位置开始的消息,customer拥有了offset的控制权,可以向后回滚去重新消费之前的消息,这是很有意义的

6、Kafka消息是采用Pull模式,还是Push模式?

Kafka最初考虑的问题是,customer应该从brokes拉取消息还是brokers将消息推送到consumer,也就是pull还push。在这方面,Kafka遵循了一种大部分消息系统共同的传统的设计:producer将消息推送到broker,consumer从broker拉取消息

一些消息系统比如Scribe和Apache Flume采用了push模式,将消息推送到下游的consumer。这样做有好处也有坏处:由broker决定消息推送的速率,对于不同消费速率的consumer就不太好处理了。消息系统都致力于让consumer以最大的速率最快速的消费消息,但不幸的是,push模式下,当broker推送的速率远大于consumer消费的速率时,consumer恐怕就要崩溃了。最终Kafka还是选取了传统的pull模式

Pull模式的另外一个好处是consumer可以自主决定是否批量的从broker拉取数据。Push模式必须在不知道下游consumer消费能力和消费策略的情况下决定是立即推送每条消息还是缓存之后批量推送。如果为了避免consumer崩溃而采用较低的推送速率,将可能导致一次只推送较少的消息而造成浪费。Pull模式下,consumer就可以根据自己的消费能力去决定这些策略

Pull有个缺点是,如果broker没有可供消费的消息,将导致consumer不断在循环中轮询,直到新消息到t达。为了避免这点,Kafka有个参数可以让consumer阻塞知道新消息到达(当然也可以阻塞知道消息的数量达到某个特定的量这样就可以批量发

7.Kafka存储在硬盘上的消息格式是什么?

消息由一个固定长度的头部和可变长度的字节数组组成。头部包含了一个版本号和CRC32校验码。

- 消息长度: 4 bytes (value: 1+4+n)

- 版本号: 1 byte

- CRC校验码: 4 bytes

- 具体的消息: n bytes

8.Kafka高效文件存储设计特点:

(1) Kafka把topic中一个parition大文件分成多个小文件段,通过多个小文件段,就容易定期清除或删除已经消费完文件,减少磁盘占用。

(2) 通过索引信息可以快速定位message和确定response的最大大小。

(3) 通过index元数据全部映射到memory,可以避免segment file的IO磁盘操作。

(4) 通过索引文件稀疏存储,可以大幅降低index文件元数据占用空间大小。

9.Kafka 与传统消息系统之间有三个关键区别

(1) Kafka 持久化日志,这些日志可以被重复读取和无限期保留

(2) Kafka 是一个分布式系统:它以集群的方式运行,可以灵活伸缩,在内部通过复制数据提升容错能力和高可用性

(3) Kafka 支持实时的流式处理

10.Kafka创建Topic时如何将分区放置到不同的Broker中

- 副本因子不能大于 Broker 的个数;

- 第一个分区(编号为0)的第一个副本放置位置是随机从 brokerList 选择的;

- 其他分区的第一个副本放置位置相对于第0个分区依次往后移。也就是如果我们有5个 Broker,5个分区,假设第一个分区放在第四个 Broker 上,那么第二个分区将会放在第五个 Broker 上;第三个分区将会放在第一个 Broker 上;第四个分区将会放在第二个 Broker 上,依次类推;

- 剩余的副本相对于第一个副本放置位置其实是由 nextReplicaShift 决定的,而这个数也是随机产生的

最近发表
标签列表