外观
README
约 980 字大约 3 分钟
2025-08-23
一、核心概念精简版
1. 必知三要素
| 组件 | 作用 | 关键特性 |
|---|---|---|
| Topic | 消息分类 | 分区存储、可配置保留策略 |
| Producer | 发布消息 | 批量发送、ACK机制控制可靠性 |
| Consumer | 订阅消费 | 消费者组实现负载均衡 |
2. 分区机制(核心!)
- 为什么需要分区:
- 水平扩展吞吐量(单分区顺序写,多分区并行处理)
- 消费者组并行消费的基础(1分区=1消费者实例)
- 分区数量决策:
预期峰值TPS ÷ (单实例处理能力 × 安全系数1.5) 示例:10万TPS ÷ (5000TPS × 1.5) ≈ 14 → 实际建议20分区
3. 副本与可靠性
- ISR机制:仅同步副本集合内的Broker参与选举
- 关键配置:
# Broker端 min.insync.replicas=2 # 至少2个副本同步才视为写入成功 # Producer端 acks=all # 要求所有ISR副本确认
二、生产环境必备配置
1. 生产者黄金配置
props.put("bootstrap.servers", "kafka1:9092,kafka2:9092");
props.put("acks", "all"); // 最高可靠性
props.put("retries", 3); // 自动重试次数
props.put("batch.size", 16384); // 16KB批量发送
props.put("linger.ms", 20); // 等待20ms凑满批次
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");2. 消费者关键配置
props.put("group.id", "order-processing");
props.put("enable.auto.commit", "false"); // 手动提交控制精确消费
props.put("auto.offset.reset", "latest"); // 无偏移量时从最新开始
props.put("max.poll.records", 500); // 单次拉取上限三、高频操作速查表
1. 常用命令行
# 查看主题列表(带分区信息)
kafka-topics.sh --bootstrap-server localhost:9092 --list
# 查看消费者组偏移量
kafka-consumer-groups.sh --bootstrap-server localhost:9092 \
--group my-group --describe
# 手动重置消费者偏移量(慎用!)
kafka-consumer-groups.sh --bootstrap-server localhost:9092 \
--group my-group --reset-offsets --to-earliest --execute --topic orders2. 偏移量管理策略
| 场景 | 推荐方案 | 风险 |
|---|---|---|
| 金融交易 | 处理完成后手动提交 | 实现复杂但精确 |
| 日志分析 | 自动提交(间隔5s) | 可能重复消费 |
| 实时大屏 | 处理前提交偏移量 | 可能丢失数据 |
四、避坑指南(80%问题集中地)
1. 消息丢失三连问
- 生产者端:是否设置
acks=all+ 重试机制? - Broker端:
min.insync.replicas是否≥2? - 消费者端:是否在消息处理完成后才提交偏移量?
2. 消费者延迟(Lag)处理
# 监控延迟(单位:消息条数)
kafka-consumer-groups.sh --bootstrap-server localhost:9092 \
--group my-group --describe | awk '{print $6}'解决方案:
- 短期飙升:临时增加消费者实例
- 持续高延迟:检查处理逻辑是否含阻塞操作(如DB同步调用)
- 分区倾斜:使用
__consumer_offsets主题检查分配是否均衡
3. 分区再平衡急救包
# 消费者配置调整(默认值危险!)
session.timeout.ms=10000 # 从30s缩短到10s
heartbeat.interval.ms=3000 # 从3s缩短到3s
max.poll.interval.ms=300000 # 业务处理超时放宽到5分钟五、架构设计实战
1. 主题命名规范
[业务域].[数据类型].[环境]
示例:
payment.transaction.prod
user.behavior.dev2. 分区扩容方案
- 当前吞吐量持续 > 单Broker 5MB/s
- 执行扩容命令:
kafka-topics.sh --bootstrap-server localhost:9092 \ --alter --topic orders --partitions 30 - 注意:仅新增分区,原有数据不会重新分布
3. 容灾能力验证
# 模拟Broker宕机
systemctl stop kafka
# 验证指标:
# 1. ISR列表变化(kafka-topics --describe)
# 2. 生产者写入延迟(kafka-producer-perf-test)
# 3. 消费者是否自动切换六、监控指标清单(必须关注)
| 指标 | 健康阈值 | 检测工具 |
|---|---|---|
| UnderReplicatedPartitions | =0 | Kafka自带JMX |
| RequestHandlerAvgIdlePercent | >80% | Prometheus |
| ConsumerLag | < 10万条 | Burrow |
| NetworkProcessorAvgIdlePercent | >70% | Grafana |
删减说明:已移除ZooKeeper深度配置、KRaft迁移细节、Exactly-Once语义实现原理等低频使用内容,聚焦生产环境90%以上团队实际需求。核心原则:能用默认配置解决的绝不自定义,能通过运维解决的绝不改代码。
