作为撮合订单总线,AutoMQ 商业版 5.5.7 仍不适合 —— kill -9 长尾已不再复现,但单分区下 FSx 首选 AZ 一次 80 s 的网络分区就让订单流停写数分钟、3 次中 2 次有生产者永久卡死(Q28 未修复,双 FSx 下照样),多生产者并发时 broker 自带的 CPU 背压会无故障地每 ≈ 5 min 卡写入 3–8 s(Q29),S3 不可用时停写 106–136 s(5.5.7 回归),厂商建议的双 FSx 实测不能消除 FSx 单点;MSK Standard 有条件适合(单分区延迟最低、尾部最稳、全部故障自愈,条件是维护窗口避开交易时段);MSK Express 有条件适合(维护停写最短最稳定;条件是单分区 p99 比 Standard 高约 3–5 ms、1 h 浸泡 max 239 ms,客户端须调 batch + zstd)。
acks=all + 幂等,开环定速,延迟从计划发送时刻算;消费端逐条审计丢失 / 乱序 / 重复 / 「报失败但已写入」。各系统用各自最优客户端参数:延迟 / 吞吐(r4)三家都用 batch.size 256 KiB · zstd(level 1),AutoMQ 另加 in-flight 5 · linger 1 · 关 zone router · request 5 s · delivery 120 s,MSK in-flight 1 · linger 0;故障测试(11-07 前)为默认 16 KiB 批、不压缩。「测试记录 §」= 实测记录节号,原始结果可应要求提供。| 产品 | 判定 | 决定性理由 |
|---|---|---|
| AutoMQ 商业版 5.5.7 | ❌ 不适合 | 单分区遇 FSx 首选 AZ 分区停写数分钟、3 次中 2 次永久卡死(Q28);多生产者无故障也周期停写(Q29);S3 故障波及写路径;丢掉 FSx 首选 AZ(FIS 近似注入)⇒ 三个 AZ 全停 369–376 s、每路 ≈ 30 万笔失败;双 FSx 缩回单 FSx 致 broker 永久下线、只能重建(Q30) |
| MSK Standard | ⚠️ 有条件 | 延迟最低、尾部最稳、全部自愈;维护停写 0.7–37 s,随负载放大(受控重启 xlarge 另测 1.10–2.24 s,与 large 一致),须避开交易时段,磁盘容量须告警;AZ 网络故障 ≈ 1 min 停写、8 次中 4 次二次停写(FIS 近似注入:broker 回来后 leader 被交还给仍断网的它);客户端 request 5 s + delivery 120 s 可让报失败降为 0 但缩短不了停写,服务端 leader.imbalance.per.broker.percentage=100 实测不能消除二次停写(§12.5)⇒ 预案须含主动迁 leader:实测断网 +10 s 由运维迁走 leader,最坏一秒降到 7.4–11.8 s、0 失败 0 丢失(E4,2 次,§13) |
| MSK Express | ⚠️ 有条件 | 维护停写最短最稳(2–10 s,11-07 前 express.m7g.large 一轮);单分区 p99 比 Standard 高约 3–5 ms(r4 1k:7.96 vs 4.58 ms),1 h 浸泡 max 239 ms;客户端须调 batch + zstd;AZ 网络故障(FIS 近似注入)时部分消息被卡 1.5–2 min(最坏一秒 89.9–117.7 s,期间仍有确认) |
AutoMQ 关键问题的数据见 §11.5,故障全表见 §11.4,双 FSx 见 §11.7。
判据表(✅ 合适 · ⚠️ 有条件 · ❌ 不合适 · — 不可测;SP = 单分区,MP = 多分区):
| 判据(门槛) | AutoMQ 5.5.7 | MSK Standard | MSK Express |
|---|---|---|---|
| 数据安全(已确认 0 丢 / 0 乱序 / 0 重复) | ✅ 全部 run 0 / 0 / 0(含 Q28 卡死、S3 900 s) | ✅ | ✅ |
| SP 稳态延迟(p99 ≤ 10 ms,1k–20k msg/s;r4,m7g.xlarge 级,各自最优配置) | ✅ p50 6.25–6.71 / p99 7.74–8.07 ms | ✅ p50 3.29–3.37 / p99 4.58–4.71 ms | ✅ p50 4.21–4.86 / p99 7.96–8.51 ms |
| MP 稳态延迟(p99 ≤ 20 ms,1k–50k msg/s;11-07 前一轮,MSK *.m7g.large、默认 16 KiB 批,未在 r4 重测) | ✅ p50 6.5–7.6 / p99 7.6–15.9 ms | ✅ p50 4.3–5.8 / p99 8.3–14.5 ms | ⚠️ p50 4.6–7.5 / p99 11–21 ms |
| 浸泡尾部(p99.99 ≤ 50 ms,max ≤ 200 ms;SP 1 h 为 r4 调优,MP 2 h 为 11-07 前) | ✅ SP 1 h 33.75 / 88.82 ms;⚠️ MP 2 h 55.85 / 238.7 ms | ✅ SP 1 h 15.35 / 27.05 ms;MP 2 h 34.25 / 56.3 ms | ⚠️ SP 1 h 48.95 / 239 ms(2 s > 100 ms);MP 2 h 58.45 / 127.8 ms |
| 多生产者并发(12 生产者,无故障时不停写;11-07 前,MSK *.m7g.large) | ❌ MP 2 / 2 停写 5.4–8.6 s;SP 24k 每 ≈ 5 min 3–8 s(Q29 背压) | ✅ max 87 ms | ✅ max 126–227 ms |
| 单 broker 硬故障(≤ 30 s,自愈) | ⚠️ kill -9:SP 15–21 s、MP 15–27 s,16 / 16 自愈(5.5.6 有 3 / 15 次 32–44 min 长尾,5.5.7 未复现) | — 不可注入 | — 不可注入 |
| 受控维护(重启 / 配置滚动 / 换规格,≤ 10 s;11-07 前 MSK *.m7g.large,受控重启 11-08 在 xlarge 重测结果一致,§12.3) | ✅ 受控关闭 2.4 s;扩缩 0.1–0.3 s;在线升级 ≤ 2.9 s | ⚠️ SP 重启 0.7–2.3 s;MP 重启 2.0–14.2 s、配置滚动 3.4–19.5 s(SP 混合负载 37 s)、换规格 9.7–14.8 s | ✅ 重启 1.4–5.7 s、配置滚动 4.3–7.7 s(混合负载 4.5 s)、换规格 5.4–10.1 s |
| AZ 网络分区(≤ 30 s,自愈) | ❌ FSx 首选 AZ:SP 249 s / 永久卡死(Q28)、MP 120–146 s;非首选 AZ 22.7–30 s | — 不可比(NACL 只断客户端路径);AZ 级组合故障的近似注入(AWS FIS,11-08:切断 az1 broker 子网 5 min + 该 broker 下线;不是真实 AZ 断电——MSK 副本复制走服务侧网络,客户切不断):MSK Standard 最坏一秒 59.9–119.6 s(累计 8 次中 4 次 broker 回来后 leader 被交还给仍断网的它 ⇒ 二次停写;客户端与 leader.imbalance.per.broker.percentage 调整都不能消除,§12.5),MSK Express 最坏一秒 89.9–117.7 s(期间仍有确认、零确认 0–29 s),AutoMQ 商业版 69.5–72.4 s;若丢的是 FSx 首选 AZ,AutoMQ 三个 AZ 的生产者全停 369–376 s、每路 ≈ 30 万笔失败(测试记录 §12.3) |
— 同左 |
| 依赖服务故障(≤ 10 s) | ❌ S3 300 s 不可用:停写 106–136 s;⚠️ FSx HA 切换 3–7 s | — | — |
| 存储单点(单一存储故障不导致全集群停写) | ❌ FSx 单点;双 FSx 实测不能消除,失去一套 5 min 还须人工重启(§11.7) | ✅ RF 3 | ✅ 服务托管 |
| 历史回读干扰(写路径 max ≤ 200 ms;11-07 前,MSK *.m7g.large) | ⚠️ 257 ms | ✅ 47 ms | ⚠️ 243 ms |
| SP 吞吐上限(200 B,调优后各自最优配置,r4 · 均为 m7g.xlarge 级) | 200k ✅(p99 8.66 ms);默认参数 20k | 200k ✅(p99 5.84 ms);默认参数 20k | 200k ✅(p99 10.55 ms);默认参数 50k |
| 项 | AutoMQ 商业版 | MSK Standard | MSK Express |
|---|---|---|---|
| 版本 | 控制台 8.4.8 · 数据面 5.5.7(对照 5.5.6) | Kafka 4.1 · KRaft | Kafka 4.2 · KRaft |
| Broker(延迟 / 吞吐,r4) | 3 × m7g.xlarge(每 AZ 一台) | 3 × kafka.m7g.xlarge,EBS 400 GiB | 3 × express.m7g.xlarge |
| Broker(故障测试,11-07 前) | 同上 | 3 × kafka.m7g.large | 3 × express.m7g.large |
| 客户端(r4 由同一判据选出的最优配置) | batch.size 256 KiB · zstd(level 1) · in-flight 5 · linger 1 · 关 zone router · delivery 120 s | batch.size 256 KiB · zstd(level 1) · in-flight 1 · linger 0 | batch.size 256 KiB · zstd(level 1) · in-flight 1 · linger 0 |
| 持久化 | FSx for ONTAP Multi-AZ(首选 az2 / 备 az1),NFS hard mount;冷数据 S3 | RF 3 · min.insync 2 | 服务托管 |
| 单分区(SP) | me-sp-az1:1 分区,leader 钉在 az1 |
同左 | 同左(钉 leader 需暂停 IR) |
| 多分区(MP) | me-orders:24 分区,8 / 8 / 8 |
同左 | 同左 |
| 写入速率 | 1k / 5k / 10k / 20k / 50k / 100k msg/s × 200 B;1 KiB、4 KiB × 5k msg/s;12 生产者;事务 | 同左 | 同左 |
规格:延迟 / 吞吐(r4,11-07)三家同为 m7g.xlarge 级、客户端各自调优;故障测试在 11-07 之前(MSK 为 *.m7g.large、默认客户端);11-08 在 xlarge 上重测受控重启(结果一致),并新增 FIS AZ 级组合故障(§12.3)。AutoMQ 另加 FSx。MSK 托管服务不能做进程级 kill -9,子网隔离只切断客户端路径(broker 健康、不切换 leader),因此「硬故障 / AZ 分区」两行 MSK 不可比。
单分区(业务场景) —— 确认延迟 p50 / p99 ms,200 B,速率阶梯每格 120 s,各自由同一判据选出的最优客户端配置(测试记录 §11):⚠️ = 吞吐跟上但未达低延迟判据
| 写入(各自最优配置,r4) | AutoMQ 5.5.7 | MSK Standard | MSK Express |
|---|---|---|---|
| 1k msg/s | 6.71 / 7.83 | 3.29 / 4.58 | 4.21 / 7.96 |
| 5k msg/s | 6.26 / 7.84 | 3.31 / 4.66 | 4.83 / 8.26 |
| 10k msg/s | 6.25 / 7.74 | 3.31 / 4.71 ⚠️ | 4.86 / 8.38 |
| 20k msg/s | 6.28 / 8.07 | 3.37 / 4.67 | 4.84 / 8.51 |
| 50k msg/s | 6.33 / 8.06 | 3.46 / 4.82 | 4.99 / 9.07 ⚠️ |
| 100k msg/s | 6.50 / 9.10 | 3.67 / 5.04 | 5.13 / 9.81 |
| 200k msg/s | 6.67 / 8.66 | 4.30 / 5.84 | 5.30 / 10.55 |
| 1 h 浸泡 20k,最优配置(r4)(p99 / p99.99 / max) | 7.89 / 33.75 / 88.82 | 4.63 / 15.35 / 27.05 | 8.81 / 48.95 / 239(2 s > 100 ms) |
调优前一轮(11-07 之前:MSK 为 *.m7g.large、各家默认 / 推荐客户端,§10.12–§10.19、§8.21–§8.22):
| 项 | AutoMQ 5.5.7 | MSK Standard | MSK Express |
|---|---|---|---|
| 12 生产者同分区(p99 / max) | 14.05 / 67 | 14.75 / 44 | 30.25 / 227 |
| 事务提交 p50(2 条 / 事务) | 39.2 | 31.0 | 56.2 |
| 4 h 浸泡 20k(p99 / p99.99 / max,288 M 条) | 7.87 / 32.65 / 235.6 | 6.88 / 39.55 / 93.4 | 17.35 / 85.75 / 264.7(51 s > 100 ms) |
读法(r4,四家同为 m7g.xlarge 级、客户端各自调优):单分区上限 AutoMQ 200k(p99 8.66 ms) · Standard 200k(p99 5.84 ms) · Express 200k(p99 10.55 ms);默认参数(batch 16 KiB、不压缩)下 Standard 只能确认 32,120/s —— 单分区上限主要由客户端批大小与压缩决定,不在 broker。1k 时 p50:AutoMQ 6.71 / Standard 3.29 / Express 4.21 ms(AutoMQ 每条写要过一次 FSx NFS 同步写)。
多分区(大数据场景),调优后(11-08 补全轮,三家 m7g.xlarge 级,batch 256 KiB · zstd level 1) —— 24 分区订单 topic,单生产者 az1,确认延迟 p50 / p99 ms(测试记录 §13):
| 写入(多分区,调优后) | AutoMQ 5.5.7 | MSK Standard | MSK Express |
|---|---|---|---|
| 1k msg/s | 7.08 / 10.15 | 4.29 / 7.71 | 4.12 / 8.05 |
| 5k msg/s | 7.28 / 12.35 | 5.14 / 8.43 | 5.22 / 9.72 |
| 10k msg/s | 7.54 / 13.85 ⚠️ | 5.32 / 8.87 | 5.61 / 11.35 |
| 20k msg/s | 7.76 / 13.75 | 5.37 / 9.10 | 5.93 / 12.95 |
| 50k msg/s | 7.95 / 14.25 | 5.50 / 9.55 | 5.89 / 12.95 |
| 100k msg/s | 8.21 / 15.75 ⚠️ | 5.59 / 10.25 | 6.08 / 15.25 |
| 200k msg/s | 8.35 / 17.15 | 5.87 / 10.35 | 6.38 / 15.45 |
| 12 生产者同写(p50 / p99;max) | ❌ p99 4,514 > 2× 1k 基线(确认 1,999/s 已跟上);43,700 条尾部未确认(审计消费者落后);max 7,551 | ❌ p99 20.05 > 2× 1k 基线(确认 2,000/s 已跟上);max 48.75 | ❌ p99 33.85 > 2× 1k 基线(确认 1,999/s 已跟上);max 70.93 |
| 4 KiB × 5k | 7.38 / 13.05 | 5.28 / 9.29 | 5.29 / 12.15 |
| 扇出 | 8.40 / 14.85 | 5.80 / 9.90 | 6.54 / 13.55 |
多分区,调优前一轮(§10.3、§10.11、§8.11–§8.12;11-07 前:MSK *.m7g.large、in-flight 1 · linger 0、默认 16 KiB 批不压缩;AutoMQ 推荐客户端):
| 负载 | AutoMQ 5.5.7 | MSK Standard | MSK Express |
|---|---|---|---|
| 速率阶梯 1k → 50k,p50 / p99 | 6.5–7.6 / 7.6–15.9 | 4.3–5.8 / 8.3–14.5 | 4.6–7.5 / 11–21 |
| 1 KiB × 5k,p50 / p99 / max | 6.39 / 11.65 / 28 | 4.97 / 11.75 / 45 | 6.38 / 17.95 / 48 |
| 4 KiB × 5k,p99 / max | 14.15 / 29 | 84.25 / 272 | ❌ 过载(p50 5.7 s,须攒批) |
| 12 生产者,p99 / max | ❌ 4,916 / 8,576(Q29 背压,§10.16) | 39.55 / 87 | 62.65 / 126 |
| 事务提交 p50 | 64.0 | 77.6 | 77.9 |
| 2 h 浸泡 20k,p99.99 / max | 55.85 / 238.7(7 s > 100 ms) | 34.25 / 56.3(0 s) | 58.45 / 127.8(4 s) |
AutoMQ 5.5.7 稳态延迟与 5.5.6 相同(§10.3)。
单次故障的最长零确认(停写),同一订单流 harness;AutoMQ 为 5.5.7(推荐客户端),MSK 为 in-flight 1 · linger 0(11-07 前 *.m7g.large;末两行为 11-08 xlarge / FIS):
| 故障 | AutoMQ 单分区 | AutoMQ 多分区 | MSK Standard | MSK Express |
|---|---|---|---|---|
| AZ 级组合故障(FIS 近似注入,11-08):broker 所在 AZ 子网切断 5 min + 该 broker 下线 | az1:最坏一秒 69.5–72.4 s;FSx 首选 AZ(az2):三个 AZ 全停 369–376 s、每路 ≈ 30 万笔失败 | — | 最坏一秒 59.9 / 119.6 s(8 次中 4 次二次停写:leader 被交还给仍断网的 broker;推荐客户端 request 5 s · delivery 120 s ⇒ 0 报失败、停写仍 33–56 s;leader.imbalance.per.broker.percentage=100 不能消除,§12.5) |
最坏一秒 89.9–117.7 s(零确认 0–29 s,期间仍有确认) |
| 受控重启(xlarge 重测,11-08) | — | — | SP 1.10 / 2.24 s | SP 2.29–2.61 s |
| kill -9 leader 所在 broker | 15 / 21 / 20 s(3 次);非 leader broker 0 s | 15–27 s(12 次);连杀两台 27.6 s;controller 27.8 s | — 不可注入 | — 不可注入 |
| 受控重启 / 关闭 | — | stop-ec2 2.4 s | SP 0.7 / 2.3 / 1.2 s;MP 2.0–14.2 s | SP 1.4–3.2 s;MP 2.1–5.7 s |
| 配置滚动 | — | — | MP 3.4 / 19.5 s;SP 1.1 s;SP 混合负载 37 s | MP 6.4 / 7.7 s;SP 4.3 s;SP 混合负载 4.5 s |
| 换规格 | FSx 换档 384 → 768:53.9 min,≤ 3.1 s | 同左 | 升 9.7 s · 降 14.8 s | 升 9.2–10.1 s · 降 5.4–9.9 s |
| 扩容 / 缩容 | 0.1 / 0.3 s | 0.1–0.2 s | — | 扩容 17 min,≤ 280 ms |
| 在线版本升级 | — | 5.5.6 → 5.5.7:580 s,≤ 2.9 s,0 丢 | — | — |
| FSx 首选 AZ 网络分区 ≈ 80 s | delivery 120 s:249 s;delivery 30 s:139 s / 永久卡死(≥ 770 s) | 120–146 s(全集群);delivery 30 s 时 2 / 4 卡死 | 不可比 | 不可比 |
| 非 FSx 首选 AZ 网络分区 | 25 s | 22.7–30 s | 不可比 | 不可比 |
| FSx HA 主备切换 | 7 / 3 s | ≤ 6.5 s(4 次) | — | — |
| FSx 备份 / IOPS / SSD 在线调整 | — | 0 s | — | — |
| broker ↔ FSx 网络切断 | — | 149 s,hard mount 无自动隔离 | — | — |
| S3 不可用 300 s | 106 s | 125–136 s(2 次);900 s:534–737 s | — | — |
| 混合:SP 24k + 事务 + 12 生产者 | kill -9:21–24 s(另有背压停顿);FSx 首选 AZ 分区:12 路全部 323 s、事务提交 > 60 s 无法完成;FSx HA 切换 ≈ 11 s + 45 min 内 13 次背压停顿 | — | 重启 1.2–2.8 s(无周期停顿);配置滚动 37 s | 重启 3.4–5.2 s、配置滚动 4.5 s(无周期停顿) |
读法:AutoMQ 的计划内操作(扩缩、升级、FSx 运维)非常平滑;非计划故障里,凡是碰到 FSx 首选 AZ 或 S3,停写都在 100 s 以上,单分区比多分区更重(没有其他分区分担)。MSK 的停写全部来自计划内维护、全部自愈。
| 编号 | 现象 | 5.5.6 | 5.5.7 | 影响 |
|---|---|---|---|---|
| Q20 / Q21 | kill -9 后自恢复启动失败 / broker 间转发通道卡死,部分分区 32–44 min 不可写、需人工重启 | 15 次中 3 次 | 16 次 0 次(MP 12 + SP 4) | ✅ 大概率已修复(统计未到确证) |
| Q28 | FSx 首选 AZ 分区后,幂等生产者因序号错乱(OUT_OF_ORDER)被持续拒写 | MP 2 / 2 | MP 2 / 4;SP 3 / 3 停写 ≥ 75 s,其中 2 次有生产者永久卡死(含双 FSx 1 次) | ❌ 未修复;单分区下最重;delivery 120 s 只把「永久」缩成「隔离时长 + ≈ 120 s」 |
| Q29 | 多生产者 ⇒ broker CPU ≈ 0.9 ⇒ 企业版背压把请求配额 20,000 → 2,388,produce 一并被限 | — | MP 2 / 2(5.4–8.6 s);SP 24k 45 min 内 13 次 3–8 s | ❌ 无故障也停写;与背压日志 ±1 s 对齐(§10.16、§10.18) |
| S3 回归 | S3 不可用期间写路径停写 | 300 s:0 s | 300 s:106–136 s(3 / 3);900 s:534–737 s | ❌ 回归;冷存储故障波及热路径 |
| 双 FSx 不自愈(新) | 双 FSx 下失去一套 FSx ≈ 5 min,撤销后部分分区持续不可写 | — | 2 / 2 须人工重启;停写 333–573 s | ❌ 厂商推荐的冗余方案引入新故障模式(§11.7) |
| Q30(新) | 双 FSx 缩回单 FSx(2 → 1)后一台 broker 启动即崩溃循环,控制台任务无限挂起、不报错不回滚 | — | 1 / 1 | ❌ 双 FSx 上线后不能安全回退;唯一出路是删实例重建(§11.4–§11.5) |
另:FSx 首选 AZ 网络分区导致全集群停写 120–146 s,是「单 FSx HA pair 作 WAL」的架构特征,与版本、客户端参数无关(§10.5、§10.8);FSx 邻居负载在 3,072 IOPS 时停写 9 s、6,144 IOPS 时 0 s ⇒ FSx 必须独占并留 IOPS 余量(§10.17)。
| 项 | AutoMQ 5.5.7 | MSK Standard | MSK Express |
|---|---|---|---|
| 单分区上限(200 B,调优后,r4) | 200k ✅(p99 8.66 ms) | 200k ✅(p99 5.84 ms) | 200k ✅(p99 10.55 ms) |
| 多分区可用写吞吐 | FSx 384 档 ≈ 170–200 MiB/s(250 MiB/s 时 p99 154.5 ms) | ≈ 63 MB/s 持续(3 × m7g.large right-sizing 推算;xlarge 未重测) | 71.5 MB/s(3 × express.m7g.large × 23.8 MB/s 入向配额;xlarge 未重测) |
| 历史回读 30 GB 期间写路径 max | 257 ms(10 s > 100 ms) | 47 ms(0 s) | 243 ms(11 s > 100 ms) |
| 资源边界 | broker CPU(Q29 背压)、FSx IOPS / 吞吐档、网卡基线带宽 | EBS 容量(写满 = 全集群不可用) | 每 broker 入向配额 |
| 月成本(东京区价目,20k msg/s × 200 B,r4 规格) | $2,930–3,084(含 FSx;开源版 $747) | $1,575(kafka.m7g.xlarge) | $2,782(express.m7g.xlarge) |
厂商建议「组合两个 FSx」。控制台 file_system_count = 2 部署 30.6 min,三台 broker 都同时挂载两套 FSx 的 WAL(测试记录 §10.23)。
| 验证 | 单 FSx | 双 FSx | 结论 |
|---|---|---|---|
| 稳态 p50 / p99(24 分区,1k → 50k msg/s) | 6.5–7.5 / 9.9–15.9 ms | 6.1–6.8 / 9.8–13.1 ms | ✅ 略好(WAL 分摊到两套) |
| 2 h 浸泡 p99.99 / max(24 分区,20k msg/s) | 55.85 / 238.7 ms | 26.55 / 56.8 ms | ✅ 尾部明显更好 |
| 切断其中一套 FSx ≈ 66 s | 全集群停写 62–70 s,0 失败 | 全集群停写 62–85 s,失败 1.7 万 | ❌ 没有切换,反而更重 |
| 切断其中一套 FSx ≈ 300 s(单独 / 叠加 kill -9) | (单 FSx broker↔FSx 切断 120 s:停写 149 s,自愈) | 停写 333–573 s,失败 289 万 / 439 万;撤销后 10 min 仍不可写,须人工重启(2 / 2) | ❌❌ 新的不自愈故障模式 |
| 计划内 HA 切换(单套 2 次 + 两套同时 2 次) | 零确认 3–4 s,最大 ≤ 6.5 s | 零确认 16–39 s(多段),最大 3.9–10.3 s,自愈 | ⚠️ 更重 |
| 单分区切断其中一套 FSx ≈ 300 s | — | 单分区停写 369 s,90 万笔报失败(自愈) | ❌ 对单分区无保护 |
| FSx 首选 AZ(az2)网络分区 64 s | (单 FSx,修复前 harness:126 s) | 全集群停写 71–74 s,0 失败,自愈 | ❌ 两套同时受影响 |
| 单分区 FSx 首选 AZ 分区 61 s + delivery 30 s(Q28) | 1 次永久卡死、1 次 139 s | 2 / 3 路生产者永久卡死(≥ 773 s),失败 786 万 | ❌ 不缓解 Q28 |
| 单分区 FSx 首选 AZ 分区 61 s + delivery 120 s | (修复前 harness、≈ 80 s:249 / 133 s) | 72 s,0 失败,自愈 | ⚠️ 更轻,但隔离条件不同、不能归因 |
| 两套 FSx 的首选节点 | az2 | 两套都在 az2 | ❌ 没有 AZ 分散 |
为什么:file_system_count = 2 是负载分摊(WAL 写入分布到两套 FSx 提升吞吐),不是健康感知的故障切换;每个 broker 同时依赖两套,NFS hard mount 下任意一套不可达,写到它上面的 WAL 就阻塞 ⇒ 故障面从 1 套变成 2 套。两套首选节点同在 az2,FSx 首选 AZ 分区时同时受影响。
结论:不建议为消除 FSx 单点而建双 FSx —— 它不但不切换,长时间失去一套时还会进入需要人工重启的状态;它的真实收益是稳态与长稳尾部更好(2 h p99.99 −52 %、max −76 %),可作为延迟 / 吞吐优化手段,但前提是接受更大的故障面,而且上线后不能安全回退到单 FSx(Q30:缩容后一台 broker 崩溃循环,只能删实例重建,§11.4–§11.5)。
| 场景 | 推荐 | 前提 |
|---|---|---|
| 撮合订单总线(单分区、严格有序、多网关) | MSK Standard(延迟最低、长稳尾部最好)或 MSK Express(高负载下维护停写最短最稳) | 维护窗口避开交易时段(Standard 混合负载配置滚动实测 37 s);网关按订单 ID 幂等重试(「报失败但已写入」> 0 是常态);Standard 配 EBS 容量告警;Express 高字节率攒批;客户端 batch.size 256 KiB + zstd(level 1)、in-flight 1 · linger 0:调优后单分区 Standard / Express 实测都到 200k msg/s × 200 B(p99 5.84 / 10.55 ms,r4,m7g.xlarge 级);默认 16 KiB 批、不压缩时 Standard 只确认 32,120/s、Express 85,698/s |
| 撮合输出日志 / 成交回报(多分区、可容忍秒级) | 三者均可;MSK 自愈性最好 | AutoMQ 须排除订单 topic 的自动均衡、钉位、FSx 独占、按 CPU 留余量 |
| 行情 / 风控大数据流(多分区、高吞吐、历史回读) | AutoMQ 或 MSK Express | 回读与订单写路径物理隔离(独立集群或限速读者) |
若必须使用 AutoMQ:客户端关幂等 + in-flight 1 + delivery 120 s(实测可避免 Q28 的永久卡死,但 ≈ 135 s 停写不变,§10.21;注意 r4 调优(batch 256 KiB + zstd)用的是 in-flight 5,in-flight 1 下的单分区吞吐上限未测 —— 须按业务在「规避 Q28」与「吞吐」之间取舍)、网关按订单 ID 去重、订单 topic 排除自动均衡并钉位、FSx 独占且留 IOPS 余量、broker 按 CPU 留余量(Q29 无客户端规避,linger 5 实测无效,§10.22)。
AutoMQ 要进入「有条件适合」,至少需要:修复 Q28(序号错乱后自动恢复)、背压豁免 produce(或给出阈值与开关)、修复 S3 回归;以及消除 FSx 单点的真正方案 —— 实测双 FSx 不能(§11.7),需要厂商给出健康感知的 WAL 切换。