Kafka经典面试题--Kafka的其他问题汇总
一、topic和partition的区别
-
Topic:逻辑上的消息类别。就像一个数据库中的表名,或者一个文件夹的名称。你生产消息到某个 Topic,消费消息也从某个 Topic 消费。
-
Partition:Topic 在物理上的分组。一个 Topic 可以被分成多个 Partition,分布在不同机器上。就像一个表的分区,或者一个文件夹里的多个文件。
核心关系:一个 Topic 包含一个或多个 Partition。
这体现了软件架构中“逻辑与物理分离”的核心思想。Topic 是逻辑概念,用于对消息进行分类;而 Partition 是物理概念,是数据实际存储和并行处理的单元。引入 Partition 这一中间层,主要带来了以下不可替代的优势:
1. 并行处理与超高吞吐量 (核心优势)
-
一个 Topic 的多个 Partition 可以分散在不同的 Broker(服务器)上。
-
Producer 可以同时向多个 Partition 写入数据,Consumer 可以同时从多个 Partition 读取数据。这种并行读写机制是 Kafka 达到百万级 TPS 吞吐量的基石。
-
一个 Partition 只能被同一个消费者组(Consumer Group)内的一个消费者(Consumer)消费。正是多个 Partition 允许了同一个消费者组内的多个消费者并行工作。
2. 水平扩展与弹性伸缩 (Scalability)
-
当数据量激增时,可以通过增加 Partition 数量来提升 Topic 的总处理能力和存储容量。新的 Partition 可以被分配到集群中新增的 Broker 上,实现系统的水平扩展。
-
这与“负载均衡”紧密相关。更多的 Partition 意味着更细粒度的数据单元,使得在添加新机器时,数据能够更均匀地重新分布 across the cluster。
3. 消费者组的负载均衡 (Load Balancing)
-
Kafka 的核心机制是:一个 Partition 只能被一个消费者组内的一个消费者消费。因此,Partition 的数量实际上决定了消费者组并行度的上限。
-
当消费者组中的消费者实例发生变更(如扩容、缩容或宕机)时,Kafka 会自动触发 “再平衡”(Rebalance),将 Partition 重新分配给当前存活的消费者,从而实现负载均衡。
-
Partition的数量通常比一个消费者组中消费者实例的数量多,这样才能让多个消费者都有活干。
4. 保障消息顺序性 (Ordering)
-
Kafka 仅保证在单个 Partition 内部的消息是严格有序的(FIFO)。如果需要对消息进行全局排序,通常需要将 Topic 设置为 1个 Partition,但这会牺牲吞吐量。这种设计允许我们在“顺序”和“并行”之间根据业务需求进行权衡。
二、介绍下ISR机制
ISR 的全称是 In-Sync Replicas,翻译过来就是 “同步副本集合”。
它指的是一个 Partition 的所有副本中,那些与 Leader 副本保持数据同步的副本(包括 Leader 本身)组成的列表。
你可以把它理解为 Leader 的“忠实跟班”小队。
Kafka 通过副本(Replication)机制来保证数据的高可用性。一个 Partition 有多个副本,分散在不同的 Broker 上。
但问题来了:Producer 发送一条消息后,Leader 需要等