跳到正文

Kafka 索引 ​

适用版本:Kafka 3.9 / 4.0。4.0 起仅支持 KRaft;3.9 是最后一个支持 ZooKeeper 的版本。

开发路径 ​

按「先看懂写入与复制,再写生产者和消费者,最后理解存储」的顺序读。

  1. 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 即副本不齐;JMX UnderReplicatedPartitions 持续大于 0 即在丢冗余。
  2. 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。
  3. 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 持续增长才是积压。
  4. 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。

运维路径 ​

按「先确认副本健康,再看存储余量,最后处理消费与位点」的顺序排查。

  1. 01-架构与ISR
    • 拿到:ISR 收缩的真实条件(replica.lag.time.max.ms)、Leader 选举与 Controller 角色。
    • 判据:先看 kafka-topics.sh --describe 的 Isr,再对照 JMX UnderReplicatedPartitions。
  2. 04-日志存储与读写路径
    • 拿到:磁盘占用为什么不会立刻下降、retention 为什么按整段删除、compact 的墓碑语义。
    • 命令:kafka-log-dirs.sh --describe 看分区的 size/offsetLag;kafka-configs.sh --describe --all 看实际生效的保留配置。
    • 判据:分区 size 与 log.retention.* 是否匹配;活跃 Segment 不会被删。
  3. 05-Kafka生产故障处置
    • 拿到:ISR 收缩、rebalance 风暴、消费 lag、磁盘写满、offset 越界的处置路径。
    • 命令:kafka-consumer-groups.sh --describe、kafka-log-dirs.sh --describe、JMX UnderReplicatedPartitions。
    • 判据:每个场景都按「现象 → 命令/指标 → 判断 → 处置」给出判据,并标注不要盲目重启或重置位点。
  4. 03-消费者与消费组
    • 拿到:lag 的正确读法、rebalance 的触发条件、静态成员与协作式分配。
    • 命令:kafka-consumer-groups.sh --describe --members --verbose 看成员与分区归属。
  5. 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-生产检查清单。

把一门技术讲透到既懂也会用