Kafka面试指南一
Kafka 面试指南一
系列文章导航
- Java 内存管理面试指南一
- Java 基础面试指南一
- Java 基础面试指南二
- Java 基础面试指南三
- Java 基础面试指南四
- Java 线程面试指南一
- Java 线程面试指南二
- Redis 面试指南一
- Kafka 面试指南一
- Spring 面试指南一
- SpringBoot 面试指南一
- 微服务面试指南一
1. Kafka 消息传递系统与其他消息传递框架有何不同?
Kafka 是由 Apache 软件基金会开发的分布式消息传递框架。该框架旨在构建高容错、低延迟的消息传递系统,以确保端到端的消息交付。
其主要特点如下:
- 容错性:Kafka 是一个消息传递系统,提供了容错功能以防止消息丢失。
- 模型设计:基于发布 - 订阅(Publish-Subscribe)模型进行设计。
- 语言支持:Kafka 支持 Java 和 Scala 等语言。
- 起源与发展:Kafka 起源于 LinkedIn,后来在 2011 年成为开源 Apache 项目。
- 生态协作:与 Spark 和其他大数据技术无缝协作。
- 集群模式:支持集群模式操作,易于扩展。
- 应用场景:Kafka 消息传递系统可以用于 Web 服务体系结构或大数据体系结构。
- 易用性:与其他消息传递框架相比,Kafka 易于编码和配置。
注意:Kafka 通常需要其他组件(例如 ZooKeeper)来创建集群并充当协调服务器。
2. Kafka 的主要功能是什么?
除了具备其他关键功能之外,Kafka 还为从生产者到消费者的信息提供了可靠的传递方式。
- 高吞吐与容错:Kafka 旨在实现高吞吐量和容错的消息服务。
- 分区机制:Kafka 提供了在 Topic(主题)上构建分区(Partition)的功能。
- 复制功能:还提供数据复制功能,增强可靠性。
- 队列处理:Kafka 提供了一个队列,该队列可以处理大量数据,并最终将消息从一个发送者传输到接收者。
- 持久化存储:Kafka 将消息保留在磁盘中,并具有跨集群复制消息的功能。
- 协调同步:Kafka 与 ZooKeeper 合作,与其他服务进行协调和同步。
- 大数据集成:Kafka 具有良好的内置支持,可对接 Apache Spark。
要利用所有这些关键功能,我们需要与 ZooKeeper 配置一起正确配置 Kafka 集群。
3. 使用 Kafka 比不提供 JMS、RabbitMQ 等其他消息传递服务的好处?
如今,Kafka 是一个基于 Key 的消息传递框架,它有以下几个关键点:
- 可靠性:Kafka 提供了从发布者到订阅者的可靠传递,确保消息丢失率为零。
- 可伸缩性:Kafka 通过与 ZooKeeper 协调服务器一起使用集群来实现此功能。
- 耐用性:通过使用分布式日志,消息可以持久保留在磁盘上。
- 性能:Kafka 在发布和订阅应用程序中提供高吞吐量和低延迟。
考虑到上述功能,Kafka 是大数据技术(Big Data Technologies)用来处理大量消息以实现平稳传递的最佳选择之一。
4. Kafka 的实际用例是什么,它与其他消息传递框架有什么不同?
有很多用例表明 Kafka 适合实际工作应用程序,下面列出的是经常使用的实际工作用例:
- 指标监控:用于监视操作数据,可用于分析或对从分布式系统中收集的数据进行统计操作。
- 日志聚合解决方案:可以在整个组织中使用,以收集来自多个服务的日志,消费者服务使用这些日志来执行分析操作。
- 流处理:Kafka 的强大耐用性在流处理方面也非常有用。
- 异步通信:在微服务中,使这个庞大的系统保持同步是不希望的,因为它会使整个应用程序无响应。而且,它一开始可能会破坏划分为微服务的整个目的。因此,使用 Kafka 可使整个数据流变得更容易。因为它是分布式的,所以具有很高的容错能力,并且可以通过 ZooKeeper 等服务对代理节点进行持续监控,从而使工作效率更高。
- 聊天机器人:当我们需要可靠的消息传递服务以顺利交付时,聊天机器人是最受欢迎的用例之一。
- 多租户解决方案:通过配置哪些主题可以产生或使用数据来启用多租户。配额也有运营支持。
以上是主要需要 Kafka 框架的用例,除此之外,还有其他一些情况取决于需求和设计。
5. 为什么我们需要 Kafka 而不是其他消息服务?
现在让我们谈论一些现代的数据源。它是一种数据——诸如订单、库存和购物车之类的交易数据——诸如单击、点赞、推荐和在网页上的搜索之类的内容正在得到增强。所有这些数据对于分析消费者的行为非常重要,并且可以提供一组预测分析引擎,这些引擎可以成为公司的与众不同之处。
- 支持低延迟消息传递。
- 处理实时流量。
- 保证容错能力。
- 易于与 Spark 应用程序集成,以处理大量消息数据。
- 能够创建消息传递容器集群,该集群由诸如 ZooKeeper 之类的协调服务器进行监视和监督。
因此,当我们需要处理这种数据量时,我们需要 Kafka 来解决此问题。
6. 带组件的 Kafka 流程图?
Kafka 流程图包含以下基本组件,这是设置消息传递基础结构所必需的:
- Topic(主题)
- Broker(代理)
- ZooKeeper
- Partition(分区)
- Producer(生产者)
- Consumer(消费者)

客户端和服务器之间的通信是通过简单、高性能、与语言无关的 TCP 协议完成的。该协议已版本化,并与旧版本保持向后兼容性。
7. 什么是主题?Kafka 如何使用该主题从生产者到消费者进行交流?
主题(Topic)是将记录发布到的逻辑名称。Kafka 中的主题支持多用户模型,因此该主题可以有零个、一个或多个使用者来订阅写入该主题的数据。
- 主题是保留消息流的特定类别。
- 主题分为多个分区。
- 对于每个 Kafka 主题,至少应有一个分区。
- 每个分区均以未修改的有序顺序包含消息或有效负载。
- 分区中的每个消息都有一个标识符,称为偏移量(Offset)。
- 主题具有名称,并且在整个集群中必须唯一。
- 生产者需要主题来发布有效负载。
- 消费者从主题中提取了相同的有效载荷。
- 对于每个主题,集群维护的日志如下所示。

每个分区都有一个有序且不可变的记录序列,该记录序列被连续附加到一个结构化的提交日志中。Kafka 集群使用可配置的保留期限持久地保留所有已发布记录(无论是否已被消费)。
8. 什么是分区?
Kafka 主题被划分到分区中,该分区以不可修改的顺序包含消息。
- 分区是数据的逻辑分组。
- 分区允许您通过跨多个代理将主题中的数据拆分来并行化主题。
- 主题中可以分组有一个或多个分区。
- 分区允许通过跨多个集群在多个主题中拆分数据来并行化主题。
- 每个分区都有一个名为 Offset 的标识符。
- 每个分区都可以放置在单独的计算机上,以允许多个用户并行读取主题。

9. 什么是分区偏移量?
偏移量(Offset)是分区内记录的唯一标识符。它表示消费者在分区中的位置。消费者可以从特定的偏移量开始读取消息,也可以从他们选择的任何偏移量点进行读取。
- 分区偏移具有唯一的序列 ID,称为 Offset。
- 每个分区应具有一个分区偏移量。
主题还可以具有多个分区日志,如右侧图像中的 click-topic 一样。这允许多个消费者并行地从一个主题中阅读。
10. 什么是 Broker?Kafka 如何利用 Broker 进行交流?
- Broker 是负责维护发布数据的系统。
- 每个代理可以具有一个或多个分区。
- Kafka 包含多个代理来维护负载均衡。
- Kafka Broker 是无状态的。
- 例如:假设一个主题中有 N 个分区,并且有 N 个代理,那么每个代理都有 1 个分区。
说明:本文基于 Kafka 传统架构编写,重度依赖 ZooKeeper 进行集群协调。在 Kafka 2.8+ 及 3.0+ 版本中,引入了 KRaft 模式,逐渐弱化并最终移除对 ZooKeeper 的依赖。面试时建议根据目标公司的技术栈版本补充说明相关知识。
版权声明:本文为原创文章,版权归 戴老师的博客 所有,转载请联系博主获得授权。
本文地址:https://1diff.fun/archives/kafka-mian-shi-zhi-nan-yi.html
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。