메시지 대기열: Kafka 및 RabbitMQ
메시지 대기열: Kafka, RabbitMQ
(섹션: 기술 및 인프라)
간략한 요약
메시지 대기열은 iGaming에서 이벤트 지향 아키텍처 (EDA) 의 기초입니다. 요금, 지불, 사기 방지, CRM, 알림 및 분석의 마이크로 서비스를 연결합니다. 실제로 두 가지 종류의 솔루션이 가장 일반적입니다
Apache Kafka는 당사자를 통한 스트리밍, 복제 및 수평 스케일링에 중점을 둔 분산 이벤트 로그 (로그) 입니다.
RabbitMQ는 유연한 라우팅 (교환/바인딩), 우선 순위, TTL, 확인 및 클래식 큐 작업을 갖춘 AMQP 큐 브로커입니다.
두 도구 모두 성숙하지만 확장 가능한 스트림 및 분석을위한 Kafka, RabbitMQ-운영 작업 오케스트레이션, RPC 및 다양한 라우팅을위한 다양한 문제를 해결합니다.
iGaming에서 적절한 위치
카프카-언제:- 당사자를 통해 높은 TPS 이벤트 (베팅, 게임 이벤트, 원격 측정) 및 수평 스케일이 필요합니다.
- 콜드/핫 재소비 (테이프 데이터 재 읽기), 골재 보유 및 압축 (밸런스, 플레이어 상태) 이 중요합니다.
- 토너먼트 리더, 책임있는 게임 제한, 사기 방지 신호 등 실시간 집계를 위해서는 스트림 프로세스 (Kafka Streams/ksqlDB/Flink) 가 필요합니다.
RabbitMQ-언제 다음을 선택하십시오
KYC 수표, 지연/반복 지불, 전자 메일/SMS/푸시, 웹 후크를 PSP로 보내는 클래식 작업 대기열이 필요합니다.
유연한 라우팅 (주제/직접/팬 아웃), 우선 순위, TTL, 지연, 데드 레터 및 RPC 패턴.
소비자 당 엄격한 제한 (프리 페치/QoS), 간단한로드 관리 및 빠른 배상이 필요합니다.
빈번한 결과: 이벤트 및 분석을위한 Kafka + 오케스트레이션 및 통합을위한 RabbitMQ.
데이터 모델 및 라우팅
카프카
주제는 → 당사자로 나뉘며 각 주제는 정렬 된 로그입니다.
메시지 키는 키 내에서 배치 → 순서를 정의합니다.
소비자는 오프셋을 읽고 소비자 그룹은 처리를 확장합니다.
시간/볼륨 별 유지; 로그 압축은 최신 버전의 키를 저장합니다.
RabbitMQ
교환 (직접/팬 아웃/주제/헤더) + 바인딩 → 메시지가 대기열에 들어갑니다.
확인 (ack/nack/요청), 게시자 확인, 우선 순위, TTL, 데드 레터 (DLX/DLQ).
높은 가용성을위한 정족수 대기열 (Raft); RAM을 저장하는 게으른 대기열.
배송 보증 및 demotency
최대 한 번에: 배상금이 없습니다. 손실 위험, 최소 지연.
적어도 한 번: 기본 표준 → 중복 → demempotent 처리기 (요청/거래 키, upsert, dedup table, outbox) 가 가능합니다.
정확히 한 번: Kafka에서는 dempotent Producer + 트랜잭션 주제 + 합의 된 소비가 함께 달성되지만 더 비싸고 더 어려운 경우가 많습니다. RabbitMQ에서-제한적이고 뼈가 있습니다. 실제 지불/베팅 흐름에서는 적어도 한 번 + 엄격한 dempotence가 적용됩니다.
- 이벤트/명령에 따라 고유 한 demempotency 키 (UUI/ULID).
- Debezium (+ Change Data Capture) 서비스 데이터베이스의 전송 패턴 → 이중 쓰기 방지.
- TTL을 사용하여 별도의 행으로 (키, 생성 된 _ at) 데드 업.
주문/메시지 주문
카프카는 파티 내에서 명령을 보장합니다. 엔티티의 전체 "수명" (예: 균형을위한 'player _ id') 이 하나의 키에 있도록 키를 선택하십시오.
RabbitMQ 주문은 반복 배송/다중 소비자에게 엄격하게 보장되지 않습니다. Kafka 또는 단일 활성 소비자 및 스트림 직렬화를 통해 주문하는 데 중요한 파이프 라인.
주제와 줄의 디자인
카프카:- 세분성: '도메인. 이벤트 '(예: 결제). 예금. ').
- 키: 'player _ id', 'play _ id', 'bet _ id' 주문.
- 대상 TPS에 의한 배치 = N (규칙: 1 배치, X 메시지/초/소비자); 성장을위한 주식.
- 보존: 이벤트-시간/일; 압축 - "상태".
- 도메인 별 교환: '지불. 직접 ',' 위험. 주제 '.
- 소비자를위한 대기열: 'kyc. 체커. q ',' psp. 웹 후크. 다시 시도합니다. q '.
- 백오프에 대한 작업 대기열 당 DLQ 지연.
- Prefetch는 HA에 대한 동시성 쿼럼 큐를 지정합니다.
오류, 배상 및 DLQ
까다로운 오류: 임시 (네트워크/PSP 5xx) → retrays; 치명적 (검증, 체계) → 즉시 DLQ.
지수 백오프 + 지터, 리트레이 한계, 독약 감지.
단계별로 별도의 재 시도 대기열 (5, 1m, 5m, 1 시간).
DLQ 핸들러: 경고, 추적, 수동 구문 분석, 패치로 재 주입.
데이터 계약 및 Schematics
Avro/Proto + Schema Registry (Kafka - 사실상 표준) 를 사용하십시오.
버전: 역 호환 변경 (선택적 필드 추가), 마이그레이션 중단 금지.
PII 필드 - 암호화/토큰 화; GDPR 및 현지 규정을 준수하십시오.
모니터링, 관찰 가능성 및 SLO
생산자/소비자의 지표: 지연, 처리량, 오류, retrai, 처리 시간.
로그 + 추적 (상관 ID: 'trace _ id', 'messation _ id').
SLO: p99- 게시/배송 대기 시간, 허용되는 소비자 지연, 파일 후 복구 시간.
DLQ 성장, 지연 초과, 파티/쿼럼 감소에 대한 경고.
안전 및 준수
전송 TLS, 비밀 암호화 (SOPS/Vault), 제한된 ACL/RBAC.
민감한 도메인 (결제, KYC) 에 대한 별도의 주제/대기열.
출판물/구독의 감사 로그, 코드 외부의 키 저장.
지역 요구 사항 (EU/Turkey/LatAm): 보존, 보관 현지화, 마스킹.
높은 가용성, 내결함 및 DR
카프카:- 적어도 3-5 명의 중개인 클러스터; 복제. 계수 이상 3.
- 민. 동기화. 내구성있는 레코드의 경우 복제본과 팩 = 모두.
- DR.을위한 지역 간 복제 (MirrorMaker-2)
- 정족수 대기열, 정족수가있는 짝수/홀수 노드.
- 데이터 간 센터 복제, DR 스크립트를위한 페더레이션/삽화.
- 차가운/따뜻한 스탠드, 스위칭 테스트.
성능 및 튜닝
카프카 (프로듀서):- '머물러 있습니다. ms '년형' 배치. '버칭을위한 크기;' 압축. 타입 '(lz4/zstd).
- 'acks = all' 이지만 대기 시간을 조심하십시오. 튜닝 최대. 에서. 비행. 요청. 다른 사람들은 그렇게 생각하지 않아요
- 충분한 파티; NVMe는 10/25G 그리드를 구동합니다. JVM GC 설정.
- 올바른 그룹 관리 ', 최대 설문 조사. 간격. ms ', 백오프시 파티를 일시 중지하십시오.
- 출판사는 버치에서 확인합니다. 채널이 재사용됩니다.
- '프리 페치' (예: 50-300) 치료 시간별; 큰 백 로그를위한 게으른 대기열.
- 핫 큐를 노드에 게시합니다. 설명서 조정/파일 설명자.
iGaming의 전형적인 패턴
도메인 이벤트의 신뢰할 수있는 게시를위한 전자 메시지 + Kafka (베팅 배치, 예금 크레딧).
통합에 대한 동기 요청에 대한 RabbitMQ RPC (KYC 문서 확인, 리베이트 계산).
사가 패턴: 보상 단계를 통해 이벤트 (Kafka) 및 팀 (RabbitMQ) 을 통한 오케스트레이션.
팬 아웃 알림: 한 이벤트에서 → CRM, 사기 방지, 분석.
점진적인 지연 및 DLQ가있는 스마트 재 시도 PSP 웹 후크.
마이그레이션 및 하이브리드 아키텍처
"운영 체제" 를 위해 RabbitMQ로 시작하고 이벤트 및 분석을 위해 Kafka를 추가하십시오.
중복 게시물: 완전히 안정화 될 때까지 양방향으로 서비스 → 아웃 박스 → 커넥터 (Kafka + RabbitMQ).
점차적으로 분석/스트림 집계 가입자를 Kafka Streams/ksqlDB로 마이그레이션합니다.
미니 선택 점검표
1. 로드/TPS> 수만/초? → 카프카.
2. 잡지처럼 유지하고 다시 읽어야합니까? → 카프카.
3. 유연한 라우팅, 우선 순위, 배송 지연, RPC? → RabbitMQ.
4. 엄격한 키 순서 및 수평 스케일 → Kafka (키/파티).
5. 동시성 제어 → RabbitMQ를 갖춘 간단한 작업/작업 키.
6. 이상적으로는 조합: Kafka (이벤트) + RabbitMQ (오케스트레이션).
최소 구성의 예
예: RabbitMQ에서 retrai 및 DLQ 지연 (정책을 통해)
작업 대기열: 'psp. 웹 후크. q '
Retras 큐: 'psp. 웹 후크. 다시 시도합니다. 1m. q '(TTL = 60, DLX가 다시 작동을 가리킴)
DLQ: 'psp. 웹 후크. dlq '
정책 (개념적으로):- 'psp. 웹 후크. q '→' x-dead-letter-changement = psp. 다시 시도합니 교환 '
- 'psp. 웹 후크. 다시 시도합니 1m. q '→' x-messation-ttl = 60000 ',' x-dead-letter-changement = psp. 일. 교환 '
- 'psp. 웹 후크. dlq '→ 모니터링 및 수동 디버깅.
예: 카프카의 베팅 주제
주제: '베팅. 배치. v1 ', 당사자: 24, RF = 3, 유지 7 일.
메시지 키는 'player _ id' 또는 'bet _ id' 입니다 (주문에 더 중요한 것을 선택).
확률은 다음과 같습니다.
테스트 및 품질
계약 테스트 생산자/소비자 + 스키마 레지스트리.
혼돈 테스트: 노드 드롭, 네트워크 지연, 분할 뇌.
로드는 대상 TPS, p99 점검, 지연 성장 및 복구로 실행됩니다.
요약
카프카-이벤트 고속도로 및 스트리밍: 주요 주문, 보존/압축, 높은 TPS, 실시간 분석.
RabbitMQ-운영 작업 대기열: 유연한 라우팅, 확인, 우선 순위, retrays/DLQ, RPC.
iGaming에서 모범 사례는 보완적인 사용입니다: Kafka의 이벤트 및 분석, RabbitMQ의 통합/오케스트레이션 작업, 균일 한 스키마 표준, demempotency, 모니터링 및 엄격한 SLO.