GH GambleHub

DLQ 및 독 메시지 처리

Dead Letter Queue (DLQ) 는 주어진 시도 후 또는 명백한 기술/비즈니스 이유 (유효하지 않은 체계, 시간 초과, 버전 충돌 등) 로 일반 소비자가 처리 할 수없는 메시지에 대한 격리 된 대기열/주제입니다. 독 메시지-재 처리가 지속적으로 실패하고 파이프 라인의 안정성을 위협하는 기록.

DLQ의 목적은 SLO를 보존하고 고장을 현지화하며 메인 스트림의 차단을 방지하며 분석 및 안전한 재생 (재생) 가능성을 보장하는 것입니다.

1) 유독 한 메시지가 나오는 곳

스키마/계약: 호환되지 않는 변경, 누락 된 필드, 잘못된 유형.
사업 검증: 중복, 불변량 위반, 만료 된 이벤트.
주문 및 인과 관계: "생성" 에 "업데이트", 상관 관계 누락, 순서가 맞지 않습니다.
이념성: 재 처리는 부작용을 일으킨다.
외부 종속성: 제한된 제한/시간 초과, API 사용 불가.
데이터: 페이로드 손상, 잘못된 인코딩, 대형.

2) DLQ 제출 기준

다음 조건 중 하나 이상이 충족되면 메시지가 DLQ에 들어갑니다

소비자/작업자에서 최대 처리 시도 추출.
오류는 복구 할 수없는 것으로 분류됩니다: 유효하지 않은 체계, 중요한 자원 부족, 비즈니스 금지.
마감일 메시지 (TTL/만료) 가 만료되었습니다.
이 키/테넌트에 대해 회로 차단기 또는 입장 제어 정책이 트리거되었습니다.
명시 적 연산자 솔루션 (메인 스레드에서 수동 "배출").

3) DLQ 토폴로지 및 패턴

대기열 DLQ: 각 대기열/주제에는 고유 한 DLQ가 있습니다. 간단하고 투명합니다.
중앙 DLQ (주차장): 복잡한 케이스를위한 일반적인 "주차", 통합 분석 도구에 편리합니다.
DLT (Dead Letter Topic): 로그 지향 버스 (이벤트 로그) 의 경우-실패 사유의 메타 데이터가있는 별도의 주제.
검역소: 수동 분석을위한 하드 액세스 및 PII 위생이있는 검역 버퍼.
섀도우 스트림: 안전한 고정 실험을 위해 문제가있는 메시지를 "섀도우" 로 복제합니다.

4) DLQ와 함께 제공하는 데 필요한 메타 데이터

최소 세트:
  • 실패 이유: 오류 코드/클래스, 스택/추적 ID.
  • 문맥 재시도: '시도', '최대 시도', '첫 번째 _ seen _ ts', '마지막 _ 시도 _ ts'.
  • 상관 관계: 'trace _ id', 'span _ id', 'tenit _ id', 'entity _ id', 파티션 키.
  • 원래 오프셋/파티션/시퀀스 (로그 버스 용) 또는 메시지 ID.
  • 계약/스키마/페이로드 버전.
  • Idempotency-key/Request-id (있는 경우).
  • 라우팅 소스: 대기열 이름/주제, 소비자 그룹.

5) DLQ 이전의 재 트레이 정책

DLQ로 보내기 전에 올바른 재 시도를 사용하십시오

짧은 소비자 배상: '최대 시도' 2-5, 지수 백오프 + 지터, 동시성 한도.
협동 조합의 역압: 오류가 증가함에 따라 경쟁을 줄입니다.
오류 분류: 재시도 가능 ('5xx', 타임 아웃) vs 재시도 불가능 (유효성, 스키마 불일치).
지연 대기열: 임시 실패시 5s → 30s → 2m.
키 격리: 특정 키가 "잡음" 인 경우 전체 당사자를 차단하지 마십시오.

6) 안전한 재 구동 (DLQ로부터의 재 전달)

리드라이브는 DLQ에서 처리로의 메시지 반환 제어입니다.

원칙:

1. 수정 검사: 코드/구성/구성을 수정 한 후 또는 외부 종속성을 복원 한 후에 만 다시 그립니다.

2. 이데올로기: 처리기는 반복에 저항력이 있어야합니다 (확실하고 효과가있는 수술).

3. 'idempotency _ key '/' messation _ id '/' business _ key' 에 의한 중복 제거.

4. 배치 및 창: N 메시지 배치, 재구동 속도 제한, 시간/당사자 별 "창".

5. 지역 검증: 다시 그리기 전에 체계를 빠르게 검증합니다 (초기 유효하지 않은 경우 거부).

6. 우선 순위: 리드라이브는 판매 트래픽을 대체해서는 안됩니다 (작업자/개인 풀의 우선 순위가 낮음).

7. 관찰 가능성: 재구동을위한 개별 지표 및 트레일; 결과 보고서 (성공/반복 DLQ/손실).

7) 배달 의미 및 주문

적어도 한 번은 가장 일반적인 모드입니다. dempotence와 deduplication이 필요합니다.
최대 한 번에-DLQ를 비활성화 할 수 있습니다. 손실 위험. 손실이 허용되는 경우에만 사용하십시오.
정확히 한 번 (효율적): 비즈니스 스토리지의 트랜잭션 및 중복 제거로 달성; 비싸고 구체적입니다.
주문: DLQ는 일반적으로 특정 키/당사자의 주문을 위반합니다. 순서가 중요한 경우 키별로 순차적으로 다시 그립니다.

8) 계획, 계약 및 검증

스키마 레지스트리/계약: 명확한 버전 지정, 이전/순방향 호환성을 갖는 진화

입구에서의 검증: 무거운 단계 전에 JSON Schema/Proto/Avro를 통한 저렴한 점검.
비 호환성 정책: "파괴" 필드-코드 'SCHEMA _ INCOMPATIBLE' 이있는 DLQ에서 즉시.
Redaction PII: DLQ에 필요한 것만 저장하십시오. 민감한 필드를 마스크하십시오.

9) 이념과 중복 제거

이데올로기 키: "비즈니스 감각" (테넌트 + 엔터티 + 운영 + ts- 버킷) 에서 생산자를 구성합니다.
데드 업 로그: 마지막 'N' 키를 TTL로 유지하십시오. 작업의 "효과" 를 기억하십시오.
Upsert/merge: 제한없이 "삽입 전용" 을 피하십시오.
부작용: 외부 통화의 경우-통화 전에 로그 및 "반복" 을 확인하십시오.

10) 관찰 및 SLO

메트릭 (차례/테넌트/키):
  • DLQ 비율 (msg/s), 메시지 비율, DLQ의 평균/평균 "연령".
  • redrave (%) 의 성공, 반복 된 DLQ 점유율.
  • 원인 분류: 스키마, 검증, 타임 아웃, 종속성, 알 수 없음.
  • p95/p99 주류 처리 대기 시간 대 재구동.
  • DLQ 크기, 오버플로 위험.
로그/추적:
  • 필요한 태그는 '메시지 _ id', '엔티티 _ id', '테넌트 _ id', '시도', '이유', 'redrive _ batch _ id' 입니다.
  • "DLQ 지점" 추적: 소스에서 반복적 인 성공까지.
SLO:
  • T 분 안에 메시지의 백분율이 X를 성공적으로 처리했습니다.
  • DLQ 사례의 조사 및 수정 시간
  • 메시지의 최대 "연령" (경고 포함)

11) 안전 및 준수

최소 권한 액세스: 리드라이브-운영자/플레이 북 만 해당.
감사: 누가 언제 리드라이브/삭제/편집 메타 데이터를 트리거했는지.
위생: 중앙 DLQ로 옮길 때 불필요한 PII/비밀을 제거하십시오.
보존: DLQ에 대한 별도의 보존 및 삭제 정책.

12) 멀티 테넌시

'테넌트 _ id/플랜' 태그: 한계를 구별하고 우선 순위를 다시 정하고 보고서를 작성하십시오.
테넌트 당 DLQ 또는 당사자: "잡음" 클라이언트가 전체 DLQ를 막지 않도록합니다.
청구/할당량: DLQ 볼륨 및 사용 재구동 비용을 고려하십시오.

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) 운영 플레이 북 (런북)

1. 비정상적인 DLQ 성장: 생산 소비자의 조절을 켜고 주요 이유를 분석하며 릴리스/체계를 확인하십시오.
2. 스키마 불일치: 롤백/커밋 스키마, 어댑터 마이그레이션, 검증 후 재구성.

3. 외부 종속성을 사용할 수 없음: 재 훈련을 일시 중지하고 지연 대기열을 활성화하며 복구 후 다

4. 재 구동 후 반복되는 DLQ: "그림자" 핸들러/시뮬레이터를 활성화하고 demempotency, 좁은 배치를 확인하십시오.
5. DLQ 오버플로: 아카이브 스토리지로 대피, 키/이유에 대한 선택적 재 드레이브 가능.

15) 테스트와 혼돈

오류 주입: 스키마 중단, 검증, 타임 아웃, 1 대 N 스티커 오류.

대량 개정: 복용량 확인 및 생산에 미치는 영향

순서가 맞지 않는 순서: 올바른 키 처리를 보장하십시오.
페이로드 손상: 검증 및 안전 고장.
재구동 작업자의 몰락 후 복구: 배치 작업의 dempotency.

16) 전형적인 오류

DLQ → 메타 데이터가 부족하면 원인을 클러스터링하고 안전하게 수정할 수 없습니다.
한계없이 대량 재 추출 → 생산 재분해.
demempotency/deduplication → 중복 및 부작용이 없습니다.
위생없이 중앙 DLQ에서 PII 혼합.
메시지의 진화에서 체계/계약 부족 → "놀라움".
테넌트/키 파티션이없는 유일한 일반적인 DLQ.
복구 할 수없는 오류에 대해서는 초기 DLQ 대신 무한한 배상을합니다.

17) 빠른 레시피

정상적인 비즈니스 흐름: 3-4 회 시도, 지터로 인한 지수 백오프, 오류의 초기 분류, 전체 메타 데이터가있는 DLQ.
중요한 이벤트 (지불): 엄격한 dempotence, 짧은 타임 아웃, 최소 시도, 빠른 DLQ 및 수동 구문 분석.
수정 후 대량 재 추첨: 작은 배치 (100-500), 요율 제한, 별도의 작업자 풀, 속도 증가 전 성공> 95% 모니터링.
멀티 테넌트: 임차인 당 재구매 한도, DLQ 최고 고객 생성기 보고서.

결론

DLQ는 "휴지통" 이 아니라 제어 된 신뢰성 루프입니다. 명확한 적중 규칙, 풍부한 메타 데이터, demotency 및 중복 제거, 안전한 계량 재구성, 스키마 규율 및 관찰 가능성은 독성 메시지를 SLO 위협에서 관리 가능한 엔지니어링 프로세스로 전환합니다.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

Telegram
@Gamble_GC
통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.