0) 运行图
Kafka: events-prod (JSON)
│
▼
Flink: RealtimeScorer
- 校验签名/nonce
- 解析 canonical_event
- 特征抽取 (滑窗/会话/指纹聚合)
- 规则引擎 + 轻量模型打分
- 生成 risk_decision (allow/challenge/delay/block)
│
├──➜ Kafka: risk-updates (JSON,用于下游限权/通知)
├──➜ PostgreSQL: events(risk) 追加字段
└──➜ Elasticsearch: events-index(仪表盘)
1) Kafka Topic 与序列化
-
events-prod:输入事件(上篇 Schema 的 canonical_event JSON) -
risk-updates:输出风控决策 -
序列化:推荐 JSON + Confluent Schema Registry(Avro/JSON-Schema 均可);先上 JSON 更快
Kafka 创建(示意):
kafka-topics --bootstrap-server $BROKER --create --topic events-prod --partitions 24 --replication-factor 3
kafka-topics --bootstrap-server $BROKER --create --topic risk-updates --partitions 12 --replication-factor 3
2) Flink 作业(Scala 版本,Flink 1.17+,可直接改成 Java)
亮点:
侧输出流:脏数据/签名失败单独流
ProcessFunction + KeyedState:按 anon_id / user_id_hash 做短窗特征
Watermark + 滑窗:10 分钟爆发检出
规则 + 轻量模型 双通道打分(模型可换成线上加载的 XGBoost/ONNX)
2.1 依赖(简化版 build.sbt)
libraryDependencies ++= Seq(
"org.apache.flink" %% "flink-scala" % "1.17.1" % "provided",
"org.apache.flink" %% "flink-streaming-scala" % "1.17.1" % "provided",
"org.apache.flink" % "flink-connector-kafka" % "1.17.1",
"com.fasterxml.jackson.core" % "jackson-databind" % "2.17.0"
)
2.2 事件与决策模型(简化)
case class CanonicalEvent(
event_id: String,
event_ts: Long,
source: String,
user_id_hash: Option[String],
anon_id: String,
action_type: String,
target_type: Option[String],
target_id: Option[String],
account_age_days: Option[Int],
device_fingerprint_hash: Option[String],
ip_hash: Option[String],
realtime_score: Option[Double],
raw: Map[String, Any] // 兜底
)
case class RiskDecisio


最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



