【Java后端面试】Kafka原来这么水,背完赶超90%竞争者

0 阅读4分钟

Kafka面试题库

  • Kafka 是什么
  • partition 的数据文件 (ffset, MessageSize, data)
  • 数据文件分段segment(顺序读写、分段命令、二分查找)
  • 负载均衡(partition会均衡分布到不同 broker上)
  • 批量发送
  • 压缩 (GZIP 或 Snappy)
  • 消费者设计
  • Consumer Group
  • 如何获取 topic主题的列表
  • 生产者和消费者的命令行是什么?
  • consumer是推还是拉?
  • 讲讲kafka维护消费状态跟踪的方法
  • 讲一下主从同步
  • 为什么需要消息系统,mysq|不能满足需求吗?
  • Zookeeper 对于 Kafka 的作用是什么?
  • Kafka判断一个节点是否还活着有那两个条件?
  • Kafka与传统MQ消息系统之间有三个关键区别
  • 讲一讲 kafka 的 ack 的三种机制

..........................................................................................

接下来,让我们进入这些真实的场景。需要的同学点赞+关注 【2026Java题库】! 加油!Java后端佬们!

1、Kafka 是什么

Kafka 是一种高吞吐量、分布式、基于发布/订阅的消息系统,最初由 LinkedIn 公司开发,使用Scala 语言编写,目前是 Apache 的开源项目。

  1. broker: Kafka 服务器,负责消息存储和转发
  2. topic:消息类别, Kafka 按照 topic 来分类消息
  3. partition: topic 的分区,一个 topic 可以包含多个 partition, topic 消息保存在各个partition 上
    4. offset:消息在日志中的位置,可以理解是消息在 partition 上的偏移量,也是代表该消息的唯一序号
  4. Producer:消息生产者
  5. Consumer:消息消费者
  6. Consumer Group:消费者分组,每个 Consumer 必须属于一个 group
  7. Zookeeper:保存着集群 broker、 topic、 partition 等 meta 数据;另外,还负责 broker 故障发现, partition leader 选举,负载均衡等功能

2、partition 的数据文件(offset, MessageSize, data)

partition 中的每条 Message 包含了以下三个属性: offset, MessageSize, data, 其中 offset 表示 Message 在这个 partition 中的偏移量, offset 不是该 Message 在 partition 数据文件中的实际存储位置,而是逻辑上一个值,它唯一确定了 partition 中的一条 Message,可以认为 offset 是partition 中 Message 的 id; MessageSize 表示消息 内容 data 的大小; data 为 Message 的具体内容。

3、数据文件分段 segment(顺序读写、分段命令、二分查找)

Kafka 为每个分段后的数据文件建立了索引文件,文件名与数据文件的名字是一样的,只是文件扩展名为.index。 index 文件中并没有为数据文件中的每条 Message 建立索引, 而是采用了稀疏存储的方式,每隔一定字节的数据建立一条索引。这样避免了索引文件占用过多的空间,从而可以将索引文件保留在内存中。

4、负载均衡(partition 会均衡分布到不同 broker 上)

由于消息 topic 由多个 partition 组成, 且 partition 会均衡分布到不同 broker 上,因此,为了有效利用 broker 集群的性能,提高消息的吞吐量, producer 可以通过随机或者 hash 等方式,将消息平均发送到多个 partition 上,以实现负载均衡。

5、批量发送

是提高消息吞吐量重要的方式, Producer 端可以在内存中合并多条消息后, 以一次请求的方式发送了批量的消息给 broker,从而大大减少 broker 存储消息的 IO 操作次数。但 也一定程度上影响了消息的实时性,相当于以时延代价,换取更好的吞吐量。

6、压缩(GZIP 或 Snappy)

Producer 端可以通过 GZIP 或 Snappy 格式对消息集合进行压缩。 Producer 端进行压缩之后,在Consumer 端需进行解压。压缩的好处就是减少传输的数据量,减轻对网络传 输的压力,在对大数据处理上,瓶颈往往体现在网络上而不是 CPU(压缩和解压会耗掉部分 CPU 资源)。

7、消费者设计

8、Consumer Group

同一 Consumer Group 中的多个 Consumer 实例,不同时消费同一个 partition,等效于队列模式。 partition 内消息是有序的, Consumer 通过 pull 方式消费消息。 Kafka 不 删除已消费的消息对于 partition,顺序读写磁盘数据,以时间复杂度 O(1)方式提供消息持久化能力。

9、如何获取 topic 主题的列表

bin/kafka-topics.sh --list --zookeeper localhost:2181

10、生产者和消费者的命令行是什么?

生产者在主题上发布消息:

bin/kafka-console-producer.sh --broker-list 192.168.43.49:9092 --topic 
Hello-Kafa

注意这里的 IP 是 server.properties 中的 listeners 的配置。接下来每个新行就是输入一条新消息。

消费者接受消息:

bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic 
Hello-Kafka --from-beginning

各位Java的小伙伴,有需要跳槽或者面试工作的,我在这里准备好了一份2026年精选的Java面试题,内容都是经过精简的,全部都是高频中大厂的面试真题,有需要的可以拿去看看!  【2026精选宝典】

一周啃完25年最新Java面试八股文,你的Java后端面试就稳了!