主题
Kafka 索引
适用版本:Kafka 3.9 / 4.0。4.0 起仅支持 KRaft;3.9 是最后一个支持 ZooKeeper 的版本。
开发路径
按「先看懂写入与复制,再写生产者和消费者,最后理解存储」的顺序读。
- 01-架构与ISR
- 拿到:Topic/Partition/Replica 的层次;ISR、LEO、HW、LSO 的因果链;RF=3 时的可靠性配置组合。
- 命令:
kafka-storage.sh format、kafka-topics.sh --create/--describe、kafka-configs.sh --alter。 - 判据:
Isr少于Replicas即副本不齐;JMXUnderReplicatedPartitions持续大于 0 即在丢冗余。
- 02-Producer与投递语义
- 拿到:acks 三档、幂等(PID + sequence)、事务(transactional.id、LSO、fencing)、重试与
delivery.timeout.ms的预算关系。 - 代码:Java producer 发送与事务骨架;console producer 验证。
- 配置:
acks=all、enable.idempotence=true、retries=2147483647、delivery.timeout.ms=120000。
- 拿到:acks 三档、幂等(PID + sequence)、事务(transactional.id、LSO、fencing)、重试与
- 03-消费者与消费组
- 拿到:JoinGroup/SyncGroup、分配策略、三种 offset 提交语义、
max.poll.interval.ms与max.poll.records的因果、静态成员、lag 口径。 - 命令:
kafka-consumer-groups.sh --describe/--reset-offsets/--delete、kafka-console-consumer.sh。 - 判据:
LAG = LOG-END-OFFSET - CURRENT-OFFSET;LAG 持续增长才是积压。
- 拿到:JoinGroup/SyncGroup、分配策略、三种 offset 提交语义、
- 04-日志存储与读写路径
- 拿到:Segment + 稀疏索引 + PageCache + sendfile 零拷贝;retention 与 compaction 的边界。
- 命令:
kafka-dump-log.sh --files、kafka-log-dirs.sh --describe、kafka-configs.sh --describe --all。 - 配置:
log.segment.bytes=1073741824、log.retention.hours=168、log.retention.bytes=-1、log.cleanup.policy=delete。
运维路径
按「先确认副本健康,再看存储余量,最后处理消费与位点」的顺序排查。
- 01-架构与ISR
- 拿到:ISR 收缩的真实条件(
replica.lag.time.max.ms)、Leader 选举与 Controller 角色。 - 判据:先看
kafka-topics.sh --describe的Isr,再对照 JMXUnderReplicatedPartitions。
- 拿到:ISR 收缩的真实条件(
- 04-日志存储与读写路径
- 拿到:磁盘占用为什么不会立刻下降、retention 为什么按整段删除、compact 的墓碑语义。
- 命令:
kafka-log-dirs.sh --describe看分区的size/offsetLag;kafka-configs.sh --describe --all看实际生效的保留配置。 - 判据:分区 size 与
log.retention.*是否匹配;活跃 Segment 不会被删。
- 05-Kafka生产故障处置
- 拿到:ISR 收缩、rebalance 风暴、消费 lag、磁盘写满、offset 越界的处置路径。
- 命令:
kafka-consumer-groups.sh --describe、kafka-log-dirs.sh --describe、JMXUnderReplicatedPartitions。 - 判据:每个场景都按「现象 → 命令/指标 → 判断 → 处置」给出判据,并标注不要盲目重启或重置位点。
- 03-消费者与消费组
- 拿到:lag 的正确读法、rebalance 的触发条件、静态成员与协作式分配。
- 命令:
kafka-consumer-groups.sh --describe --members --verbose看成员与分区归属。
- 06-Kafka监控指标与告警
- 拿到:副本、控制面、请求、消费四类指标的先兆关系;URP、minISR、Controller、Purgatory、lag 的告警起点与处置顺序。
- 命令:
kafka-topics.sh --describe、kafka-consumer-groups.sh --describe、kafka-metadata-quorum.sh describe --status、JMX exporter。 - 判据:先看
OfflinePartitionsCount和UnderMinIsrPartitionCount判断是否已不可写,再看UnderReplicatedPartitions判断冗余是否在丢。
版本提醒
- KRaft 迁移不是滚动重启;3.9 是最后一个 ZK 版本,4.0 只能跑 KRaft。
- KIP-848 新消费组协议:3.7 预览、4.0 GA,客户端用
group.protocol=consumer显式启用;4.0 客户端默认仍是 classic,细节以官方文档为准。
生产检查清单
上线前、运行中、故障时逐条核对:99-生产检查清单。