GH GambleHub

DLQ和有毒消息处理

Dead Letter Queue(DLQ)是隔离的队列/拓扑消息,用于在给定数量的尝试后或由于明确的技术/业务原因(非验证方案,计时器,版本冲突等)而无法由全职用户处理的消息。有毒消息(poison message)-记录,其重复处理稳定地以错误结束,并威胁到派恩的稳定性。

DLQ的目标是:保留SLO,本地化故障,防止主流锁定,并确保分析功能和安全重播(redrive)。

1)有毒信息来自何处

模式/合同:不兼容的更改,缺少强制字段,不正确的类型。
业务验证:重复,不变不变,过期事件。
顺序和因果关系:在"Create"之前出现了"Update",错过了相关性,超出了顺序。
等效性:重复处理会产生副作用。
外部约束:限制限制/时间限制,API不可用。
数据:有效载荷腐败、编码不正确、尺寸过大。

2)发送到DLQ的标准

如果满足一个或多个条件,则消息将进入DLQ:
  • 超过maxAttempts在消费者/企业家的处理。
  • 该错误被归类为有缺陷(非可逆性):非有效方案,缺乏关键资源,业务禁令。
  • 截止消息(TTL/expiration)已过期。
  • 给定密钥/tenant的电路断路器或管理控制策略有效。
  • 显式运算符解决方案(来自主流的手动"eject")。

3) DLQ拓扑和模式

Per-queue DLQ:每个队列/拓扑都有自己的DLQ。简单而透明。
Central DLQ (parking lot):用于复杂桉例的通用"停车"功能,适用于单一分析工具。
DLT (Dead Letter Topic):对于面向日志的总线(事件日志),是带有故障原因元数据的单独拓扑。
Quarantine:带有硬通道的检疫缓冲区和用于人工分析的PII消毒。
影子流:将问题消息复制到"阴影"中,以进行安全的虚构实验。

4) DLQ所要求的元数据

最小集合:
  • 故障原因:代码/错误类,stack/trace id。
  • 上下文为:"attempt","maxAttempts","first_seen_ts","last_attempt_ts"。
  • 相关性:"trace_id","span_id","tenant_id","entity_id",分期密钥。
  • 原始offset/partition/sequence(用于逻辑总线)或message-id。
  • 合同/电路/有效载荷版本。
  • Idempotency-key/Request-id(如果有)。
  • 路由源:队列/拓扑名称,用户组。

5) DLQ之前的Retrace Policy

在发送到DLQ之前,请使用正确的重复尝试:
  • 消费者的简短回溯:'maxAttempts' 2-5, exponential backoff+jitter, caps on concurrency.
  • 合作逆冲:减少竞争,同时增加错误.
  • 错误分类:retryable('5xx',taymaut)vs non-retryable(验证,schema mismatch)。
  • 延迟队列(delay queue): 5 s → 30 s → 2 m用于临时故障。
  • Per-key隔离:如果"噪音"特定密钥,请勿阻止整个部件。

6)安全的稀有性(从DLQ重新交付)

Redrive是从DLQ到处理的消息的受控返回。

原则:

1.假检查:仅在修复代码/配置/方案或恢复外部依赖关系后才重新进行。

2.相似性:处理程序必须具有抗重复性(upsert,推力效应)。

3.重复数据消除:通过"idempotency_key"/"message_id"/"busin_key"。

4.分配和窗口:通过N消息进行殴打,在redrive上进行频率限制,在时间/批次上进行"窗口"。

5.局部验证:在红土之前快速检查方案(早期非验证案例的重复)。

6.优先级:Redrive不应取代销售流量(低优先级操作员/单独池)。

7.可观察性:Redrive的单个指标和示踪剂;结果报告(成功/重复DLQ/损失)。

7)交付语义和顺序

On-Least-once是最常见的模式:必须具有等效性和重复数据消除功能。
最多-可以禁用DLQ;损失风险。仅在有效损失时使用。
Exactly-once(有效):通过业务存储中的事务和重复数据消除实现;昂贵且具体。
顺序:DLQ通常会中断特定密钥/批次的顺序。如果顺序是关键的,则按键依次重复。

8)计划,合同和验证

Schema registry/合同:清晰的认证,具有反向/前向兼容性的演变。
入口验证:在艰难的步伐之前,通过JSON Schema/Protobuf/Avro进行廉价检查。
不兼容性策略:在"断开"字段中,立即在DLQ中使用代码"SCHEMA_INCOMPATIBLE"。
Redaction PII:在DLQ中仅存储必需品;敏感字段掩盖。

9)相似性和重复数据消除

Idempotency-key:从"商业意义"(tenant+entity+operation+ts-bucket)在生产商上形成。
Dedup杂志:使用TTL存储最后"N"钥匙;记住操作的"效果"。
Upsert/merge:不受限制地避免"仅插入"。
副作用:对于外部呼叫-在呼叫之前记录并检查"重播"。

10)可观察性和SLO

度量(依次排列/tenant/键):
  • DLQ比率(msg/s),消息比例,DLQ中平均/中等"年龄"。
  • Redrive成功(%),重复DLQ份额。
  • 原因分类:计划,验证,定时,dependency,未知。
  • p95/p99在redrive中处理主流vs的潜伏期。
  • DLQ大小,溢出风险。
Logi/Tracing:
  • 强制性标签:'message_id'、'entity_id'、'tenant_id'、'attempt'、'reason'、'redrive_batch_id'。
  • "DLQ分支"跟踪:从源头到重新成功。

SLO:

在T分钟内成功处理消息的比例≥ X%。
DLQ桉例的调查和修复时间≤ Y小时。
DLQ ≤ Z时钟中消息的最大"年龄"(带有变量)。

11)安全性和合规性

根据最小特权原则进行访问:redrive仅限于操作员/花花公子。
审计:谁以及何时触发重新分区/删除/编辑元数据。
消毒:转移到中央DLQ时,删除额外的PII/秘密。
Retention: DLQ的单独保留时间和删除策略。

12)多重性

"tenant_id/plan"标签:区分限制、重做优先级、报告。
Per Tenant DLQ或分期付款:以便"嘈杂"的客户端不会得分共享的DLQ。
计费/配额:考虑使用DLQ的范围和redrive的成本。

13)配置模板(示例)

yaml consumer:
max_attempts: 4 backoff:
strategy: exponential_full_jitter initial_ms: 200 max_ms: 5000 classify_errors:
retryable:  [TIMEOUT, DEP_UNAVAILABLE, 5xx]
nonretryable:[SCHEMA_INCOMPATIBLE, VALIDATION_FAILED, DUPLICATE]
concurrency_caps:
per_partition: 8 per_tenant: 50

dlq:
type: topic name: myapp. events. dlq metadata:
include: [reason, stack, attempt, first_seen_ts, last_attempt_ts, schema_version,
tenant_id, entity_id, trace_id, source_topic, partition, offset]
retention_hours: 168 pii_redaction: true

redrive:
mode: batch batch_size: 500 rate_limit_per_sec: 50 priority: low validate_schema_before_redrive: true idempotency:
dedup_ttl_hours: 24 ordering:
by_key: true

14)操作花花公子(runbooks)

1.DLQ的异常增长:启用脱粒程序用户,分析顶级原因,检查发布/模式。
2.Schema mismatch:回滚/提交电路,迁移适配器,redrive检查后。
3.外部依存关系不可用:中继暂停、启用延迟队列、恢复后重新启动。
4.Redrive后重复DLQ:启用"影子"处理程序/模拟器,测试幂等,缩小击球范围。
5.DLQ溢出:疏散到存档存储,启用选择性的按键/原因重新分区。

15)测试和溷乱

错误注入:计划破裂,验证,计时器,1-na-N"粘性"错误。
质量稀有性:检查剂量和对裂纹的影响。
序列的顺序:正确的密钥处理。
有效载荷腐败:验证和安全故障。
从红土制造者跌倒中恢复:击球操作的幂等性。

16)典型错误

DLQ中缺少元数据→无法聚类原因并安全地重新分区。
无限制的质量稀土→生产的重复降解。
没有等效性/重复数据消除→双倍和副作用。
将PII混入中央DLQ而无需消毒。
缺乏计划/合同→消息演变中的"惊喜"。
单个共享DLQ,不分期付款/密钥。
无限重置而不是早期的DLQ,以产生非可重置错误。

17)快速食谱

常规业务线程:3-4次尝试,指数回波与抖动,早期错误分类,DLQ与完整的元数据。
关键事件(付款):严格的等效性,短时间,最少尝试,快速DLQ和手动解析。
小说后大规模稀有:小击球(100-500),极限率,单独的枪手池,在速度提高之前监测成功>95%。
Tenant:Redrive上的tenant per限制,DLQ顶级客户生成器报告。

结论

DLQ不是"垃圾箱",而是受控的可靠性回路。清晰的命中规则、丰富的元数据、相容性和重复数据消除、安全的剂量稀有度、电路纪律和可观察性将有毒信息从SLO威胁转变为可管理的工程过程-可理解的花花公子、预测的成本以及对用户的影响最小。

Contact

联系我们

如需任何咨询或支持,请随时联系我们。我们随时准备提供帮助!

Telegram
@Gamble_GC
开始集成

Email — 必填。Telegram 或 WhatsApp — 可选

您的姓名 可选
Email 可选
主题 可选
消息内容 可选
Telegram 可选
@
如果填写 Telegram,我们也会在 Telegram 回复您。
WhatsApp 可选
格式:+国家代码 + 号码(例如:+86XXXXXXXXX)。

点击按钮即表示您同意数据处理。