5月27日 21:50
Kafka 的核心概念和主要特性是什么?
答案
Kafka 是一个分布式流处理平台,核心概念包括:
- Producer/Consumer:消息的生产者和消费者,采用 Pull 模式消费
- Broker:Kafka 服务节点,负责存储和转发消息
- Topic/Partition:Topic 是消息分类单位,Partition 是 Topic 的物理分区,分布在不同 Broker 上实现并行处理
- Consumer Group:消费者组,同组内各消费者分摊 Partition 消费,实现负载均衡
- Replica:副本,分为 Leader 和 Follower,保证数据可靠性
主要特性:高吞吐(百万级 TPS)、低延迟(毫秒级)、可扩展(水平扩容 Broker)、持久化(磁盘顺序写 + 页缓存)、容错(副本机制 + ISR 同步)。
追问一:Kafka 如何保证消息不丢失?
三层保障:
- Producer 端:通过
acks参数控制——acks=0不等确认,acks=1仅 Leader 确认,acks=-1(all)等 ISR 全部确认才返回成功 - Broker 端:副本机制 + ISR(In-Sync Replicas),只有 ISR 中的副本全部写入后才认为消息提交成功
- Consumer 端:手动提交 offset,处理完业务逻辑后再 commit,避免消费失败导致消息丢失
追问二:什么是 ISR?和 AR、LEO、HW 的关系?
- AR(Assigned Replicas):Topic 创建时分配的所有副本集合
- ISR(In-Sync Replicas):与 Leader 保持同步的副本子集,由
replica.lag.time.max.ms控制剔除 - LEO(Log End Offset):每个副本的日志末端位移(下一条消息的 offset)
- HW(High Watermark):所有 ISR 副本 LEO 的最小值,Consumer 只能消费到 HW 之前的消息
Leader 处理写入:先更新自身 LEO,等 ISR 全部同步后推进 HW,Follower 持续从 Leader 拉取数据追赶 LEO。
追问三:Kafka 如何保证顺序消费?
Partition 级别保证有序——消息在同一 Partition 内按写入顺序追加,Consumer 按 offset 顺序消费。跨 Partition 不保证全局有序。需要全局有序时,只使用一个 Partition(牺牲吞吐)。
追问四:零拷贝原理?
Kafka 利用 Linux 的 sendfile 系统调用实现零拷贝:数据从磁盘读取到页缓存后,直接通过 DMA 传输到网卡缓冲区,跳过用户态拷贝,大幅降低 CPU 开销和延迟。
追问五:消费者 Rebalance 什么时候触发?
- Consumer Group 中新增或移除消费者
- 订阅的 Topic 分区数变化(如扩容 Partition)
- Consumer 心跳超时(
session.timeout.ms)被判定离线 - Consumer 主动取消订阅
Rebalance 期间所有消费者暂停消费(Stop The World),频繁 Rebalance 是常见性能问题。