Kafka 面试指南一

系列文章导航

  1. Java 内存管理面试指南一
  2. Java 基础面试指南一
  3. Java 基础面试指南二
  4. Java 基础面试指南三
  5. Java 基础面试指南四
  6. Java 线程面试指南一
  7. Java 线程面试指南二
  8. Redis 面试指南一
  9. Kafka 面试指南一
  10. Spring 面试指南一
  11. SpringBoot 面试指南一
  12. 微服务面试指南一

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(消费者)

Kafka 架构流程图

客户端和服务器之间的通信是通过简单、高性能、与语言无关的 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 的依赖。面试时建议根据目标公司的技术栈版本补充说明相关知识。