干货总结!Kafka 面试大全(万字长文,37 张图,28 个知识点)

本文详细梳理了Kafka面试的重点,包括Kafka的定义、架构、高吞吐量实现、与Zookeeper的关系、消息存储机制、消息顺序性、分区算法等内容。通过问答和图解形式,深入探讨Kafka的分布式流式处理平台特性,以及其在数据处理和高可用性方面的优势。
摘要由CSDN通过智能技术生成
 

周末用了整整两天时间,整理了一下 Kafka 面试的连环问题,保证你看完后,对 Kafka 有了更深层次的了解。

全文总结的 Kafka 题目之间的 关联性 很强,本文将通过 问答 + 图解 的形式 由浅入深 帮助大家进一步学习和理解 Kafka 分布式流式处理平台。

全文总计 1.2 万字、28 个知识点。35 张原理、流程图。提纲如下:

 

正文

⭐  1、 什么是 kafka ?

 

Kafka 起初是由 Linkedin 公司采用 Scala 语言开发的一个多分区多副本且基于ZooKeeper协调的分布式消息系统,现己被捐献给 Apache 基金会。目前 Kafka 已经定位为一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。

⭐  2、kafka 的架构描述一下?

如下图所示:

 

Kafak 总体架构图中包含多个概念:

(1)ZooKeeperZookeeper 负责保存 broker 集群元数据,并对控制器进行选举等操作。

(2)Producer:生产者负责创建消息,将消息发送到 Broker。

(3)Broker: 一个独立的 Kafka 服务器被称作 broker,broker 负责接收来自生产者的消息,为消息设置偏移量,并将消息存储在磁盘。broker 为消费者提供服务,对读取分区的请求作出响应,返回已经提交到磁盘上的消息。

(4)Consumer:消费者负责从 Broker 订阅并消费消息。

(5)Consumer GroupConsumer Group 为消费者组,一个消费者组可以包含一个或多个 Consumer 。

使用 多分区 + 多消费者 方式可以极大 提高数据下游的处理速度同一消费者组中的消费者不会重复消费消息,同样的,不同消费组中的消费者消费消息时互不影响。Kafka 就是通过消费者组的方式来实现消息 P2P 模式和广播模式。

(6)Topic:Kafka 中的消息 以 Topic 为单位进行划分,生产者将消息发送到特定的 Topic,而消费者负责订阅 Topic 的消息并进行消费。

(7)Partition:一个 Topic 可以细分为多个分区,每个分区只属于单个主题。同一个主题下不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的 日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的 偏移量(offset)

(8)Offset:offset 是消息在分区中的唯一标识,Kafka 通过它来保证消息在分区内的顺序性,不过 offset 并不跨越分区,也就是说,Kafka保证的是分区有序性而不是主题有序性

(9)Replication副本,是 Kafka 保证数据高可用的方式,Kafka 同一 Partition 的数据可以在多 Broker 上存在多个副本,通常只有主副本对外提供读写服务,当主副本所在 broker 崩溃或发生网络异常,Kafka 会在 Controller 的管理下会重新选择新的 Leader 副本对外提供读写服务。

(10)Record:实际写入 Kafka 中并可以被读取的消息记录。每个 record 包含了 keyvalue 和 timestamp

(11)Leader: 每个分区多个副本的 "主" leader,生产者发送数据的对象,以及消费者消费数据的对象都是 leader。

(12)follower: 每个分区多个副本中的"从" follower,实时从 Leader 中同步数据,保持和 leader 数据的同步。Leader 发生故障时,某个 follow 会成为新的 leader。

⭐ 3、发布订阅的消息系统那么多,为啥选择kafka?

(1) 多个生产者

 

KafKa 可以无缝地支持多个生产者,不管客户端使用一个主题,还是多个主题。Kafka 适合从多个前端系统收集数据,并以统一的格式堆外提供数据。

(2)多个消费者

 

Kafka 支持多个消费者从一个单独的消息流中读取数据,并且消费者之间互不影响。这与其他队列系统不同,其他队列系统一旦被客户端读取,其他客户端就不能 再读取它。并且多个消费者可以组成一个消费者组,他们共享一个消息流,并保证消费者组对每个给定的消息只消费一次

(3)基于磁盘的数据存储

 

Kafka 允许消费者非实时地读取消息,原因在于 Kafka 将消息提交到磁盘上,设置了保留规则进行保存,无需担心消息丢失等问题。

(4)伸缩性

可扩展多台 broker。用户可以先使用单个 broker,到后面可以扩展到多个 broker

(5)高性能

Kafka 可以轻松处理百万千万级消息流,同时还能保证 亚秒级 的消息延迟。

⭐ 4、kafka 如何做到高吞吐量和性能的?

kafka 实现高吞吐量和性能,主要通过以下几点:

1、页缓存技术

Kafka 是基于 操作系统 的页缓存来实现文件写入的。

操作系统本身有一层缓存,叫做 page cache,是在 内存里的缓存,我们也可以称之为 os cache,意思就是操作系统自己管理的缓存。

Kafka 在写入磁盘文件的时候,可以直接写入这个 os cache 里,也就是仅仅写入内存中,接下来由操作系统自己决定什么时候把 os cache 里的数据真的刷入磁盘文件中。通过这一个步骤,就可以将磁盘文件写性能提升很多了,因为其实这里相当于是在写内存,不是在写磁盘,原理图如下:

 

2、磁盘顺序写

另一个主要功能是 kafka 写数据的时候,是以磁盘顺序写的方式来写的。也就是说,仅仅将数据追加到文件的末尾不是在文件的随机位置来修改数据

普通的机械磁盘如果你要是随机写的话,确实性能极差,也

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值