ricardohsmello/fraud-detection-streams-vector
GitHub: ricardohsmello/fraud-detection-streams-vector
一个基于 Kafka Streams 的实时欺诈检测演示项目,结合规则引擎与行为嵌入对银行卡交易进行风险评估。
Stars: 1 | Forks: 0
# 欺诈检测
实时欺诈检测流水线,使用 Kafka Streams、行为嵌入和基于规则的防护机制对银行卡交易进行评分 —— 无需训练自定义模型。
## 幻灯片
https://mdb.link/devnexus/fraud-detection-presentation
## 技术栈
- Java 21
- Spring Boot 4
- Kafka Streams
- MongoDB *(即将推出)*
- Voyage AI *(嵌入生成)*
## Kafka Topics
| Topic | 描述 |
|-------|-------------|
| `transactions` | 接收所有传入交易 |
| `transactions-suspicious` | 被拦截的交易(规则检测到欺诈) |
| `transactions-to-score` | 批准的交易(准备进行嵌入评分) |
| `transactions-dlq` | 格式错误消息的死信队列(例如,无效 JSON) |
## 运作原理
```
┌─────────────────────────┐
│ transactions-suspicious │
│ (FraudAlert) │
└────────────▲────────────┘
│ YES
│
┌─────────────┐ ┌──────────────┐ ┌───────────┴───────────┐
│ Transaction │───▶│ transactions │───▶│ Kafka Streams │
└─────────────┘ └──────────────┘ │ (Fraud Rules) │
│ │
│ hasFraudAlert()? │
└───────────┬───────────┘
│ NO
┌───────────▼───────────┐
│ transactions-to-score │
│ (Transaction) │
└───────────────────────┘
```
1. 交易通过 REST API 发送到 `transactions` topic
2. Kafka Streams 进行处理并按卡号分组
3. 规则评估:不可能的移动、速度检查
4. **拦截** → `transactions-suspicious`(检测到欺诈)
5. **批准** → `transactions-to-score`(准备评分)
6. 格式错误的消息 → `transactions-dlq`
## 欺诈规则
| 规则 | 描述 | 示例 |
|------|-------------|---------|
| `IMPOSSIBLE_TRAVEL` | 同一张卡在短时间内于相距遥远的地点使用 | 5 分钟内 圣保罗 → 纽约 |
| `VELOCITY_CHECK` | 在时间窗口内交易次数过多 | 1 分钟内 4+ 笔交易 |
## 运行
### 1. 启动 Kafka
```
docker run -d --name kafka -p 9092:9092 apache/kafka:latest
```
### 2. 创建 Topics
```
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic transactions --partitions 1
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic transactions-suspicious --partitions 1
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic transactions-to-score --partitions 1
```
### 3. 运行应用程序
```
./mvnw spring-boot:run
```
### 4. 发送交易
```
curl -X POST http://localhost:8081/api/transactions \
-H "Content-Type: application/json" \
-d '{
"transactionId": "TXN-001",
"userId": "USR-123",
"merchant": "Starbucks",
"city": "Sao Paulo",
"transactionAmount": 25.50,
"transactionTime": "2025-01-15T10:30:00Z",
"cardNumber": "4444-5555-6666-7777",
"latitude": -23.5489,
"longitude": -46.6388
}'
```
### 5. 查看可疑交易
```
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic transactions-suspicious --from-beginning
```
### 自动生成交易
启用生成器以每秒发布一笔交易:
```
mvn spring-boot:run -Dspring-boot.run.arguments="--app.generator.enabled=true"
```
您可以使用 `--app.generator.interval-ms=1000` 覆盖间隔时间。
## 测试欺诈检测
**不可能的移动:** 快速连续发送两张来自遥远地点的同一张卡的交易(例如,圣保罗 → 纽约)。
**速度检查:** 在 1 分钟内使用同一张卡发送 4+ 笔交易。
有关示例请求,请参阅 `src/main/resources/http/fraud-detection.http`。
标签:DNS 反向解析, Java 21, Kafka Streams, MongoDB, Spring Boot, Voyage AI, 云计算, 交易监控, 信用卡风控, 反欺诈系统, 可解释性AI, 向量搜索, 域名枚举, 实时风控, 异常检测, 支付安全, 无模型AI, 欺诈检测, 流式计算, 行为嵌入, 规则引擎, 请求拦截, 金融科技, 风险评分