GH GambleHub

DLQ e tratamento de mensagens venenosas

O Dead Letter Queue (DLQ) é uma fila/top isolada para mensagens que não foram processadas por um consultor regular após um número específico de tentativas ou por razões técnicas/empresariais explícitas (esquema de má conduta, timing, conflito de versões etc.). Mensagem venenosa (poison mensagem) - Gravação cuja reaproveitação é concluída de forma estável por um erro e ameaça a estabilidade do pipline.

O objetivo do DLQ é salvar o SLO, localizar a falha, impedir o bloqueio do fluxo principal e garantir a capacidade de análise e reprodução segura (Redreiva).

1) De onde vêm as mensagens venenosas

Esquemas/contratos: alterações incompatíveis, campos obrigatórios ausentes, tipos errados.
Validações de negócios: duplicados, invariantes quebrados, eventos vencidos.
Ordem e causalidade: «Update» chegou a «Create», correlações omitidas, out-of-order.
Idempotidade: reaproveitamento gera efeitos secundários.
Dependências externas: limites/temporizações limitados, API inacessível.
Dados: corrupção de carga útil, codificação errada, excesso de tamanho.

2) Critérios de envio para DLQ

A mensagem entra no DLQ se uma ou mais condições forem cumpridas:
  • Excesso de maxAttempts de processamento do portador/worker.
  • O erro foi classificado como defeituoso (não-retryable): esquema de inadimplência, falta de recurso crítico, proibição de negócios.
  • A mensagem deadline (TTL/expedition) expirou.
  • A política de circuito breaker ou admision control para esta chave/tenante foi executada.
  • Solução expressa do operador (eject manual do fluxo principal).

3) Topologias e pattern DLQ

Per-queue DLQ: Cada fila/topic tem o seu DLQ. Simples e transparente.
Central DLQ: «parquinho» compartilhado para casos complexos, é fácil para ferramentas de análise unificadas.
DLT (Dead Letter Topic): Para os pneus orientados logs, um topic separado com metadados de causa de falha.
Quarantine: Tampão de quarentena com acesso rígido e saúde PII para análise manual.
Shadow-stream: Duplicar mensagens problemáticas para «sombra» para experiências seguras de fixação.

4) Metadados que são obrigados a acompanhar o DLQ

Conjunto mínimo:
  • Causa de falha: código/classe de erro, stack/trace id.
  • Contexto de retrações: 'attempt',' maxAttempts ',' first _ seen _ ts', 'last _ attempt'.
  • Correlação: 'trace _ id', 'span _ id', 'tenant _ id', 'entity _ id', chave de partilha.
  • Original offset/partition/sequence (para pneus de laje) ou mensagem-id.
  • Contrato/esquema/versão de carga útil.
  • Idempotency-key/Request-id (se houver).
  • Origem do roteiro: nome da fila/top, grupo de consoante.

5) Políticas de retrações para DLQ

Antes de enviar para o DLQ, use uma nova tentativa correta:
  • Breves retais de consoante: 'maxAttempts' 2-5, exponential backoff + jitter, caps em concurrency.
  • Backpressure cooperativo: redução da concorrência quando os erros crescem.
  • Classificação de erros: retryable ('5xx', timeout) vs não-retryable (validação, schema mismatch).
  • Filas adiadas (delay queue): 5s → 30s → 2m para falhas temporárias.
  • Isolamento per-key: Se «ruidar» uma chave específica, não bloqueie a partishene inteira.

6) Redrave seguro (reaproveitamento de DLQ)

Redrave é um retorno controlado de mensagens do DLQ para o processamento.

Princípios:

1. Verificação de fix: redrave somente após a correção de código/configuração/esquema ou após a recuperação de dependências externas.

2. Idempotidade: Os processadores devem ser resistentes à repetição (upsert, efeito-tolurante).

3. Deduplicação por 'idempotency _ key '/' mensagem _ id '/' business _ key'.

4. Dosagem e janelas: batches por N mensagens, rate-limit por redrave, «janelas» por hora/partição.

5. Validação local: Verificação rápida do padrão antes da redrave (reject de maletas de névalidas iniciais).

6. Prioridade: Redrave não deve substituir o tráfego prolongado (baixa prioridade de workers/pool separado).

7. Observabilidade: métricas individuais e trailers para redrave; relatório de resultados (sucesso/novo DLQ/perda).

7) Semântica de entrega e ordem

At-least-once é o modo mais frequente, que requer idempotidade e dedução.
At-se-once - DLQ pode ser desativado; Risco de perda. Use apenas para perdas válidas.
Exactly-once (eficaz): é alcançado com transações e dedução no armazenamento empresarial; caro e específico.
Ordem: O DLQ normalmente rompe a ordem para uma chave/partição específica. Se a ordem for crítica, redesenha-se na chave e em sequência.

8) Esquemas, contratos e validação

Schema registry/contratos: versionização clara, evolução com backward/forward-compatibilidade.
Validação de entrada: Verificação de baixo custo através da JSON Schema/Protobuf/Avro antes dos passos difíceis.
Política de incompatibilidade: no campo de quebra, imediatamente no DLQ com o código 'SCHEMA _ INCOMPATÍVEL'.
Redaction PII: no DLQ, guarde apenas o necessário; campos sensíveis disfarçam.

9) Idempotidade e dedução

Idempotency-key: Forma em um projector de «sentido de negócio» (tenant + entity + operation + ts-bucket).
Revistas Dedups: Guarde as últimas chaves 'N' com TTL; Lembre-se do «efeito» da operação.
Upsert/merge: evite «insert-only» sem restrições.
Efeitos Side: para chamadas externas - Revise e verifique «repetição» antes da chamada.

10) Observabilidade e SLO

Métricas (turnos/tenante/chave):
  • DLQ rate (msg/s), proporção de mensagens, média/mediana «idade» no DLQ.
  • Redwave (%), participação DLQ de novo.
  • Classificação de razões: schema, validação, timeout, dependency, unknown.
  • p95/p99 latência de processamento do fluxo principal vs em redrave.
  • Tamanho do DLQ, risco de congestionamento.
Logi/Training:
  • As marcas obrigatórias são: 'mensagem _ id', 'entity _ id', 'tenant _ id', 'attempt',' reason ',' redrive _ batch _ id '.
  • Traçado do ramo DLQ: desde a origem até o novo sucesso.
SLO:
  • O percentual de mensagens processadas com sucesso ≥ X% por T minutos.
  • Tempo de investigação e correção para a mala DLQ ≤ Y horas.
  • A «idade» máxima da mensagem no DLQ ≤ Z horas (com alert).

11) Segurança e conformidade

Acesso com os menores privilégios: redrave - apenas para operadoras/playbooks.
Auditoria: quem e quando desencadeou a redrave/remoção/edição de metadados.
Saneamento: ao transferir para o DLQ central, remova os segredos PII/PI.
Retenção: prazos individuais de armazenamento e políticas de remoção para DLQ.

12) Multi-tenência

Tags 'tenant _ id/place': Distingue limites, prioridades de Redwave, relatórios.
DLQ para tenentes ou partituras, para que o cliente «barulhento» não faça um DLQ comum.
Billing/quotas: Leve em conta o volume de DLQ e o custo de redrave em usage.

13) Modelos de configuração (exemplo)

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) Playbooks operacionais (runbooks)

1. Crescimento anormal do DLQ - incluir throttling prod consumer, analisar causas top, verificar lançamentos/circuitos.
2. Schema mismatch: retrocesso/fixação do esquema, migração do adaptador, redrive após a verificação.
3. Dependência externa não disponível: paragem de retrações, ativar a fila delay, redrive após a recuperação.
4. DLQ de novo após a Redwave: ative o processador/simulador «shadow», verifique a idempotação, estreite o batch.
5. Download DLQ: evacuação de arquivo-armazenamento, ativação de redrave seletivo por chaves/razões.

15) Testes e caos

Injecção de erros: schema-break, validação, temporizações, 1-na-N erros pegajosos.
Redrave em massa: verificação da dosagem e do impacto na proda.
Out-of-order seqüência: ensure processamento correto por chave.
Corrupção de carga útil - validação e rejeição segura.
Recuperação da queda do redrave worker: Idempotidade das operações batch.

16) Erros típicos

A falta de metadados no DLQ → não é possível clusterizar causas e redesenhar com segurança.
Redrave em massa sem limites → novamente degradação de produção.
Não há idempotidade/dedução → duplos e efeitos colaterais.
Misturar PII em DLQ central sem saneamento.
A ausência de esquemas/contratos → «surpresas» na evolução das mensagens.
O único DLQ compartilhado sem particionamento por tenentes/chaves.
Retraias infinitas em vez de DLQ precoce para erros não-retryable.

17) Receitas rápidas

Fluxo de negócios normal: 3-4 tentativas, backoff exponencial com jitter, classificação inicial de erros, DLQ com metadados completos.
Eventos críticos (pagamento): Idempotação rigorosa, tempo curto, mínimo de tentativas, DLQ rápido e análise manual.
Redrave em massa após fix: small batches (100-500), rate-limit, pool de workers separado, monitoramento de sucesso> 95% antes de aumentar a velocidade.
Multi-Tenente, limites para-tenentes para redrave, relatório sobre os clientes geradores de DLQ.

Conclusão

O DLQ não é um «cesto de lixo», mas um circuito de confiabilidade controlado. Regras claras de entrada, metadados ricos, idempotação e dedução, redesenvolvimentos dosados seguros, disciplina de circuitos e observabilidade transformam mensagens venenosas de ameaça para o SLO em processo de engenharia controlada - com playbooks compreensíveis, custos previstos e um mínimo de exposição aos usuários.

Contact

Entrar em contacto

Contacte-nos para qualquer questão ou necessidade de apoio.Estamos sempre prontos para ajudar!

Telegram
@Gamble_GC
Iniciar integração

O Email é obrigatório. Telegram ou WhatsApp — opcionais.

O seu nome opcional
Email opcional
Assunto opcional
Mensagem opcional
Telegram opcional
@
Se indicar Telegram — responderemos também por lá.
WhatsApp opcional
Formato: +indicativo e número (ex.: +351XXXXXXXXX).

Ao clicar, concorda com o tratamento dos seus dados.