KubernetesSRERedisRabbitMQKafka
场景
您是一名值班 SRE。团队电商平台在闪购期间出现订单处理延迟。架构使用 Redis 做会话缓存、RabbitMQ 做订单队列、Kafka 做事件流。近期扩容后,延迟飙升。
症状
- Redis:延迟 >100ms,CPU 高,键驱逐。
- RabbitMQ:队列深度增加,消费者空闲,磁盘告警。
- Kafka:消费者滞后增加,Broker CPU 高,分区副本不足。
诊断
Redis
redis-cli info stats检查 evicted_keys。redis-cli slowlog get查看慢命令。redis-cli client list查看连接。- 若 OOM,使用
memory doctor。
RabbitMQ
rabbitmqctl list_queues name messages consumers memory。rabbitmqctl status检查磁盘和内存告警。- 必要时启用跟踪日志。
Kafka
kafka-consumer-groups --bootstrap-server <server> --describe --group <group>查看滞后。kafka-topics --describe --under-replicated-partitions。- 检查 Broker 日志和 JMX 指标。
命令(附安全提示)
Redis
- 清除慢命令可考虑扩展只读副本或优化数据结构。谨慎使用
CLIENT KILL。
RabbitMQ
- 临时解绑队列:
rabbitmqctl set_policy限制队列长度,或小心使用rabbitmqadmin delete queue。 - 调整告警阈值:
rabbitmqctl set_disk_free_limit。
Kafka
- 限制消费者:增加分区或重新平衡消费者组。
- 处理热点分区:
kafka-reassign-partitions.sh。 - 未备份前切勿删除主题。
风险控制
- Redis:变更前务必快照 RDB/AOF。
- RabbitMQ:使用
rabbitmqadmin export备份定义。 - Kafka:备份偏移量和主题配置,使用机架感知。
回滚步骤
Redis
- 从 RDB 或 AOF 备份恢复,确保无写入丢失。
RabbitMQ
- 重新导入定义,必要时清空队列。
Kafka
- 通过
kafka-consumer-groups --reset-offsets重置消费者组偏移。数据丢失则从最后提交点重放。
验证
- Redis:
redis-benchmark测试延迟,监控驱逐和命中率。 - RabbitMQ:发布测试消息,验证消费速率。
- Kafka:生产和消费测试记录,检查滞后减少。
何时提交 OpsGlobal 工单
- 排查后根本原因不明确。
- 发生数据丢失或存在数据丢失风险。
- Kubernetes Pod 重启或持久卷问题持续。
- 需要调优配置或安全加固协助。
适用场景
适合正在处理 NoSQL、Kubernetes, SRE, Redis, RabbitMQ 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
生产故障常由配置不当或过载的中间件引发。本文通过实际场景、诊断命令和回滚步骤,指导您应对 Redis、RabbitMQ 和 Kafka 的可靠性问题,涵盖 Kubernetes 部署考量。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。