---
id: TK-PIT-000
type: pitfall
example: true
maturity: verified
tags: [mqtt, connection, reconnect]
created: 2026-04-15
last_referenced: 2026-05-01
reference_count: 3
contributors: [alice]
source_project: project-alpha
evidence:
  - project: project-alpha
    date: 2026-04-15
    description: "线上 MQTT broker 重启后所有客户端同时重连，导致 broker 再次崩溃"
  - project: project-beta
    date: 2026-05-01
    description: "网关服务重连逻辑复现相同问题，引用此条目后修改为指数退避"
---

# MQTT 重连风暴问题

## 问题描述

当 MQTT broker 重启时，所有客户端在同一时刻尝试重连，造成连接风暴（thundering herd），可能导致 broker 再次过载崩溃。

## 根因分析

默认的 MQTT 客户端库（如 Eclipse Paho）重连间隔固定，所有客户端在 broker 恢复后的同一时刻发起重连请求。

## 解决方案

使用**指数退避 + 随机抖动（jitter）** 策略：

```java
int delay = Math.min(BASE_DELAY * (1 << retryCount), MAX_DELAY);
delay += random.nextInt(delay / 2);  // 加入随机抖动
```

- `BASE_DELAY`: 1 秒
- `MAX_DELAY`: 60 秒
- 每次重试翻倍，加随机抖动避免同时重连

## 适用场景

任何使用 MQTT 的项目，尤其是客户端数量 > 100 的场景。
