35+ 个最常问的 Kafka 面试题及答案

2025年3月17日 | 阅读 15 分钟

1) 什么是 Apache Kafka?

Apache Kafka 是由 Apache 开发并使用 Scala 编程语言编写的发布-订阅消息应用程序。它是一个开源的分布式、分区和复制的日志服务和消息代理应用程序。Kafka 的设计模式主要基于事务性日志的设计。


2) Apache Kafka 有哪些关键特性?

以下是 Apache Kafka 一些关键特性的列表

Top 35+ Most Asked Kafka Interview Questions and Answers
  • Kafka 由 Apache 软件启动,并使用 Scala 编程语言编写。
  • Kafka 是一个为高吞吐量和容错而构建的发布-订阅消息系统。
  • Kafka 具有一个内置的分区系统,称为主题 (Topic)。
  • Kafka 提供复制功能。
  • Kafka 提供一个可以处理大量数据并将消息从一个发送者传递到另一个发送者的队列。
  • Kafka 还可以将消息保存到存储中,并将其复制到整个集群。
  • Kafka 与 ZooKeeper 协作,与其他服务进行协调和同步。
  • Apache Spark 对 Kafka 有很好的支持。

3) Apache Kafka 中有哪些不同的元素或组件?

以下是 Apache Kafka 中一些重要的元素或组件

Top 35+ Most Asked Kafka Interview Questions and Answers
  • 主题 (Topic): 在 Kafka 中,主题是属于同一类型的消息的集合或流。
  • 生产者 (Producer): 在 Kafka 中,生产者用于发布通信和将消息发布到特定的 Kafka 主题。
  • 消费者 (Consumer): Kafka 消费者用于订阅主题,并读取和处理主题中的消息。它们还负责订阅各种主题并从不同的代理拉取数据。
  • 代理 (Brokers): 代理是一组能够存储发布者消息的服务器。它们用于管理主题中消息的存储。

4) 如何理解 Kafka 中的消费者组?

消费者组是 Kafka 的一个独有概念,它指定我们将有一个或多个消费者在每个 Kafka 消费者组中消费订阅的主题。


5) ZooKeeper 在 Kafka 中扮演什么角色?

Apache Kafka 是一个分布式系统。在 Kafka 环境中,ZooKeeper 存储与偏移量 (offset) 相关的信息,这些信息用于由特定消费者组消费特定主题。ZooKeeper 的主要作用是构建集群中不同节点之间的协调,但当任何节点发生故障时,它也可以用于从先前提交的偏移量恢复,因为它会定期提交偏移量。


6) 我们可以不使用 ZooKeeper 来使用 Apache Kafka 吗?/有可能不使用 ZooKeeper 来使用 Kafka 吗?

不可能绕过 ZooKeeper 直接连接到 Kafka 服务器。因此,我们无法在没有 ZooKeeper 的情况下使用 Apache Kafka。如果 ZooKeeper 宕机,Kafka 将无法处理任何客户端请求。


7) Kafka 中传统的传输消息的方法是什么?

在 Apache Kafka 中,传统的消息传输有两种方式

  • 消息队列 (Queuing): 在消息队列方法中,一组消费者可以从服务器读取消息,每条消息只发送给其中一个。
  • 发布-订阅 (Publish-Subscribe): 在发布-订阅模型中,消息会被广播给所有消费者。

8) 偏移量 (Offset) 在 Apache Kafka 中的作用是什么?

偏移量是分配给分区中消息的顺序 ID 号或唯一 ID。偏移量用于通过分区内的 ID 唯一标识分区中的每条消息。


9) 如何理解 Kafka 中的消费者组?

Kafka 中的消费者组只是 Kafka 的一个独有概念。每个 Kafka 消费者组由一个或多个消费者组成,它们共同消费一组订阅的主题。


10) 与其他传统技术相比,Apache Kafka 的主要优势是什么?

以下是 Apache Kafka 相对于其他传统消息技术的关键优势列表

  • Kafka 速度快: Kafka 速度极快,因为单个 Kafka 代理每秒可以处理兆字节的读写操作,从而为数千个客户端提供服务。
  • Kafka 可扩展: 在 Kafka 中,我们可以对数据进行分区并在机器集群上进行流式处理,以处理更大的数据。
  • Kafka 持久: 在 Kafka 中,消息是持久化的,并在集群内进行复制以防止数据丢失。这就是 Kafka 持久的原因。
  • Kafka 本身就是分布式的: Kafka 提供容错功能,其分布式设计也保证了持久性。

11) Kafka 使用的四个核心 API 架构是什么?

以下是 Kafka 使用的四个核心 API

Top 35+ Most Asked Kafka Interview Questions and Answers
  • 生产者 API (Producer API): 在 Apache Kafka 中,生产者 API 允许应用程序将记录流发布到一个或多个 Kafka 主题。
  • 消费者 API (Consumer API): 在 Apache Kafka 中,消费者 API 允许应用程序订阅一个或多个 Kafka 主题。它还使应用程序能够处理有关这些主题生成的记录流。
  • 流 API (Streams API): 在 Apache Kafka 中,Kafka Streams API 允许应用程序使用流处理架构来处理 Kafka 中的数据。我们还可以使用此应用程序 API 从一个或多个主题获取输入流,使用流操作进行处理,并生成输出流以传输到更多主题。我们还可以使用 Streams API 将输入流转换为输出流。
  • 连接 API (Connect API): 在 Apache Kafka 中,Kafka Connect API (也称为 Connector API) 将 Kafka 主题连接到应用程序。此 API 构建和管理生产者和消费者的操作,并在这些解决方案之间建立可重用的连接。例如,Connect API 可以捕获所有数据库更新,并确保它们在 Kafka 主题中可用。

12) 如何理解 Kafka 环境中的 leader 和 follower?

leader 和 follower 这两个术语用于 Apache Kafka 环境中,以维护整个系统并确保服务器的负载均衡。以下是 Kafka 中 leader 和 follower 的一些重要特性列表

  • 对于 Kafka 环境中的每个分区,都有一个服务器扮演 leader 的角色,其余服务器充当 follower。
  • leader 负责执行所有数据读写命令,而其余的 follower 则需要复制该过程。
  • 如果在任何时候发生故障,leader 无法正常工作。在这种情况下,其中一个 follower 将接替 leader 的位置和职责,使系统保持稳定并有助于服务器的负载均衡。

13) 如何理解 Kafka 中的分区?

在每个 Kafka 代理中,都存在一些分区,它们要么是主题的 leader,要么是主题的副本。

  • 每个 Kafka 主题被分成多个分区,每个分区中的记录都按固定顺序排列。
  • 每个分区中的记录都分配有一个唯一的偏移量。一个主题可以有多个分区日志。由于这种便利性,多个用户可以同时从同一个主题读取数据。
  • 主题可以通过分区进行并行化,分区将单个主题的数据分割到多个代理中。
  • 在 Kafka 中,复制是在分区级别进行的,副本是主题分区的一个冗余元素。
  • 每个分区可以包含一个或多个副本,这意味着分区可以包含跨集群中多个 Kafka 代理复制的消息。
  • 每个分区或副本由一个服务器担任 leader,而其他服务器充当 follower。
  • 如果 leader 在任何情况下出现故障,其中一个 follower 将接替 leader 的位置。

14) Kafka 技术为何重要?/使用 Kafka 的关键优势是什么?

以下是 Kafka 的一些关键优势,使其非常重要

  • 最小输入,高吞吐量: Apache Kafka 无需大型硬件即可处理大量数据。它能够自行处理高速度和大数据量,并支持每秒数千条消息的吞吐量。
  • 容错: Kafka 具有容错性,能够抵抗集群内任何节点或机器的故障。
  • 可扩展性: Kafka 完全可扩展。通过添加一些额外的节点,可以在不中断执行的情况下进行横向扩展。
  • 低延迟: 低延迟是 Kafka 最大的优势之一,它可以轻松处理大量消息,满足大多数新用例所需的毫秒级低延迟。
  • 持久性: Kafka 是持久性的绝佳示例。它支持消息复制,以确保消息永远不会丢失,这就是其持久性的原因。

15) 主题复制在 Kafka 中的重要性是什么?如何理解 Kafka 中的 ISR?

Top 35+ Most Asked Kafka Interview Questions and Answers

主题复制在 Kafka 中非常重要。它用于构建 Kafka 部署以确保持久性和高可用性。当一个代理发生故障时,其他代理上的主题副本仍然可用,以确保数据不会丢失,并且 Kafka 部署在任何情况下都不会中断。复制确保已发布的消息不会丢失。

复制因子指定了在 Kafka 集群中保留的主题副本数量。它发生在分区级别,并在主题级别定义。例如,将复制因子设置为二将在每个分区中保留主题的两个副本。复制因子不能超过集群的总代理数。

ISR 代表“In-Sync Replica”(同步副本),它是与分区 leader 同步的副本。


16) 如果一个副本很长时间停留在 ISR 之外会怎样?

如果一个副本很长时间停留在 ISR 之外,或者副本与 ISR 不同步,则意味着 follower 服务器无法像 leader 那样快速接收和执行数据。因此,这表明 follower 无法跟上 leader 的活动。


17) 启动 Kafka 服务器的过程是什么?

当您开始在 ZooKeeper 上运行 Kafka 环境时,必须确保先运行 zookeeper 服务器,然后再启动 Kafka 服务器。这是启动 Kafka 服务器的正确方法。按照以下步骤操作

  • 首先,下载最新版本的 Kafka 并解压。
  • 确保本地环境已安装 Java 8+ 以运行 Kafka。

使用以下命令启动 Kafka 服务器,并确保所有服务均按正确顺序启动

  • 通过执行以下操作启动 ZooKeeper 服务
  • 要启动 Kafka 代理服务,请打开一个新的终端并键入以下命令

18) 如何理解 Kafka 中的消费者组?

在 Apache Kafka 中,消费者组是一组消费者,它们协同工作以从同一主题或一系列主题中摄取数据。

Top 35+ Most Asked Kafka Interview Questions and Answers

在 Apache Kafka 中,消费者组是一组消费者,它们协同工作以从同一主题或一系列主题中摄取数据。消费者组本质上代表了应用程序的名称。Kafka 中有几种类别的消费者。必须使用 '-group' 命令来消费消费者组中的消息。


19) Kafka 生产者 API 的作用是什么?

Kafka 生产者 API 通过一个 API 调用来实现生产者功能。特别是,Kafka 生产者 API 结合了 Kafka.producer.SyncProducer 和 Kafka.producer.async.Async Producer 的工作。


20) Kafka 可以接收的最大消息大小是多少?

默认情况下,Kafka 消息的最大大小为 1MB (兆字节),但我们可以根据需要进行修改。代理设置允许我们修改大小。


21) Apache Kafka 和 Apache Flume 的主要区别是什么?

Apache Kafka 和 Apache Flume 之间的主要区别列表

Apache KafkaApache Flume
Apache Kafka 是一个分布式数据存储或数据系统。Apache Flume 是一个分布式、高可用、可靠的系统。
Apache Kafka 针对实时摄取和处理流数据进行了优化。Apache Flume 可以有效地收集、聚合和移动大量日志数据,从许多不同的源传输到集中的数据存储。
Apache Kafka 易于扩展。Apache Flume 的可扩展性不如 Kafka。它不易于扩展。
它作为拉取模型工作。它作为推送模型工作。
它是一个高可用、容错、高效且可扩展的消息系统。它还支持自动恢复。它专门为 Hadoop 设计。万一 flume-agent 发生故障,可能会丢失通道中的事件。
Apache Kafka 以集群模式运行,并轻松处理实时的大量传入数据流。Apache Flume 是一个用于从分布式 Web 服务器收集日志数据的工具。
Apache Kafka 将每个主题分区视为一个有序的消息集。Apache Flume 从多个源摄取流数据进行存储和分析,这些数据用于 Hadoop。

22) 如何理解 Kafka 中的地理复制?

在 Kafka 中,地理复制是一项功能,它允许您将消息从一个集群复制到其他数据中心或云区域。使用地理复制,您可以复制所有文件并将它们存储在全球各地(如果需要)。我们可以使用 Kafka 的 MirrorMaker 工具来实现地理复制。通过使用地理复制技术,我们可以确保数据备份不会出现任何故障。


23) Apache Kafka 是一个分布式流处理平台吗?我们可以用它做什么?

是的。Apache Kafka 是一个分布式流处理平台。流处理平台包含以下三个重要功能

  • 分布式流处理平台可以帮助我们轻松推送记录。
  • 它提供了巨大的存储空间,并且还可以帮助我们轻松存储大量记录。
  • 它帮助我们在记录进入时进行处理。

Kafka 技术使我们能够执行以下操作

  • 使用 Apache Kafka,我们可以构建实时数据流管道,在两个系统之间传输数据。
  • 我们还可以构建一个可以对数据做出反应的实时流处理平台。

24) 传统的消息传输类型有哪些?

传统的消息传输方法主要有两种类型。这些类型是

  • 消息队列 (Queuing): 在消息队列方法中,一组消费者可以从服务器读取消息,每条消息只发送给其中一个。
  • 发布-订阅 (Publish-Subscribe): 在发布-订阅方法中,消息会广播给所有消费者。

25) Kafka 的最大缺点是什么?

以下是 Kafka 最关键的缺点列表

  • 当消息被持续更新或更改时,Kafka 的性能会下降。当消息不需要更新时,Kafka 工作效果很好。
  • 代理和消费者在处理巨大消息时会降低 Kafka 的性能,因为它们必须通过压缩和解压缩消息来处理数据。这会降低 Kafka 的整体吞吐量和性能。
  • Kafka 不支持通配符主题选择。必须匹配确切的主题名称。
  • Kafka 不支持某些消息范例,如点对点队列和请求/回复。
  • Kafka 没有一套完整的监控工具。

26) Kafka 集群中保留期 (retention period) 的目的是什么?

在 Kafka 集群中,保留期用于保留所有已发布记录,而不管它们是否已被消耗。通过使用保留期的配置设置,我们可以轻松丢弃记录。从 Kafka 集群丢弃记录的主要目的是腾出一些空间。


27) 如何理解负载均衡?Kafka 中什么确保了服务器的负载均衡?

在 Apache Kafka 中,负载均衡是一个简单的过程,由 Kafka 生产者默认处理。负载均衡过程在保持消息顺序的同时,将消息负载分散到各个分区。Kafka 允许用户指定消息的确切分区。

在 Kafka 中,leader 负责分区的所有读写请求。另一方面,follower 被动地复制 leader。在 leader 发生故障时,其中一个 follower 接管 leader 的角色,而整个过程确保了服务器的负载均衡。


28) 代理何时会离开 ISR?

ISR 是与 leader 完全同步的消息副本集。这意味着 ISR 包含所有已提交的消息,并且 ISR 始终包含所有副本,直到发生实际故障。如果一个副本偏离 leader,ISR 可以将其删除。


29) 如何在数据生产过程中从 Kafka 获得精确一次的传递 (exactly-once messaging)?

要在数据生产过程中从 Kafka 获得精确一次的消息传递,我们必须遵循两件事:避免数据消费过程中的重复和避免数据生产过程中的重复。

以下是数据生产过程中获得精确一次语义的两种方法

  • 每个分区只有一个写入器。当出现网络错误时,您应该检查该分区中的最后一条消息,以确定您的最后一次写入是否成功。
  • 在消息中包含一个主键(UUID 或其他),并在消费者端进行去重。

30) Apache Kafka 集群的用途是什么?

Apache Kafka 集群是一个消息系统,用于克服收集大量数据和分析收集数据的挑战。以下是 Apache Kafka 集群的主要优势

  • 使用 Apache Kafka 集群,我们可以通过存储/发送事件进行实时处理来跟踪 Web 活动。
  • 通过使用它,我们可以进行告警和报告操作指标。
  • Apache Kafka 集群还使我们能够将数据转换为标准格式。
  • 它允许对流数据进行连续处理到主题。
  • 由于其出色的功能,它在 ActiveMQ、RabbitMQ、AWS 等一些最流行的应用程序中占据主导地位。

31) Apache Kafka 的一些实际应用是什么?

以下是 Apache Kafka 的一些实际应用

  • Apache Kafka 作为消息代理: Apache Kafka 具有很高的吞吐量值,因此;它可以处理大量可比类型的消息或数据。Apache Kafka 可以用作发布-订阅消息系统,允许方便地读取和发布数据。
  • 跟踪网站活动: Apache Kafka 可以检查网站上的数据是否已成功传输和接收。Apache Kafka 可以处理网站为每个页面和用户活动产生的海量数据。
  • 监控操作数据: 我们可以使用 Apache Kafka 来跟踪与某些技术相关的指标,例如安全日志。
  • 数据日志记录: Apache Kafka 提供节点间数据复制功能,可用于在故障节点上恢复数据。它还可以用于从各种日志收集数据并使其可供消费者使用。
  • 使用 Kafka 进行流处理: Apache Kafka 还可以处理流数据,即从一个主题读取、处理然后写入另一个主题的数据。用户和应用程序将可以访问包含处理后数据的新主题。

32) 如何理解 Apache Kafka 中的“日志解剖学”?

Log Anatomy 是一种查看分区的方式。我们将日志视为分区,数据源将消息写入日志。它使得一个或多个消费者可以随时从日志中读取该数据。它规定数据源可以写入日志,并且消费者可以同时以不同的偏移量读取日志。


33) 有哪些方法可以优化 Kafka 的性能?

主要有三种方法可以优化 Kafka 的性能

  • 优化 Kafka 生产者
  • 优化 Kafka 代理
  • 优化 Kafka 消费者

34) Kafka 监控的用例是什么?

以下是 Apache Kafka 监控的用例

  • Apache Kafka 监控可以跟踪系统资源消耗,例如内存、CPU 和磁盘利用率随时间的变化。
  • Apache Kafka 监控用于监控线程和 JVM 使用情况。它依赖 Java 垃圾收集器来释放内存,确保它经常运行,从而保证 Kafka 集群更活跃。
  • 它可以用于确定哪些应用程序导致了过度的需求,并且识别性能瓶颈可能有助于快速解决性能问题。
  • 它始终检查代理、控制器和复制统计信息,以便在需要时修改分区和副本状态。

35) Apache Kafka 和 RabbitMQ 有什么区别?

RabbitMQ 是 Apache Kafka 的替代品之一。让我们看看 Apache Kafka 和 RabbitMQ 之间的主要区别

Apache Kafka 和 RabbitMQ 之间的区别

Apache KafkaRabbitMQ
Apache Kafka 由于其分区而支持消息排序。在这里,消息通过消息键发送到主题。RabbitMQ 不支持消息排序。
Apache Kafka 是分布式、持久且高可用的。在这里,数据是共享和复制的。RabbitMQ 中没有这样的功能。
Apache Kafka 是一个日志,它支持消息日志记录,这意味着消息始终存在。我们可以通过指定消息保留策略来管理它。Rabbit MQ 是一个队列。在这里,消息在被消耗后会被销毁,并提供确认。
它仅在分区内保持顺序,并保证整个消息批次要么失败,要么通过。它不提供任何保证,甚至不能保证涉及单个队列的事务。
在 Apache Kafka 中,性能率约为 100,000 条消息/秒。在 RabbitMQ 的情况下,性能率约为 20,000 条消息/秒。