3. 规则命中监控系统架构设计
规则命中监控系统是精算模型从离线验证走向实时生产的关键桥梁。本章围绕“数据采集 → 规则计算 → 监控告警”三条主线,给出完整的架构设计、模块职责与技术选型依据。整体架构采用 Kafka + Flink/Spark Streaming + Redis + Prometheus 四层组合,兼顾高吞吐、低延迟与可观测性。
3.1 整体架构图
下图展示了规则命中监控系统的三层核心架构,以及各层之间的数据流与反馈回路。
架构要点: 数据采集层统一接入 Kafka,计算层通过 Flink/Spark Streaming 消费并执行规则,命中结果写回 Kafka 或 Redis,监控告警层从 Prometheus 拉取指标并触发通知。三层之间通过 Kafka Topic 解耦,保证各模块可独立扩缩容。
3.2 各模块职责
下表详细列出每个模块的核心职责与关键设计约束。
| 层级 | 模块 | 核心职责 | 关键设计约束 |
|---|---|---|---|
| 数据采集层 | 业务日志采集 | 实时采集应用服务器日志、用户行为事件,序列化为统一 JSON 格式发送至 Kafka | 日志格式标准化;采集端限流保护;至少一次语义 |
| 数据库 CDC 采集 | 通过 Debezium / Canal 捕获数据库变更事件,推送至 Kafka 指定 Topic | 增量同步延迟 < 1s;支持 schema 变更;断点续传 | |
| API / 消息桥接 | 对接外部 HTTP API、MQ 等异构源,转换为 Kafka 内部消息格式 | 协议适配;幂等写入;背压处理 | |
| 规则计算层 | Flink / Spark Streaming | 消费 Kafka 源数据,加载规则引擎,执行规则匹配与状态聚合 | 状态后端使用 RocksDB;Checkpoint 间隔 30s;并行度按 Topic 分区数配置 |
| Redis 规则缓存 | 缓存规则元数据、实时计数器、黑/白名单、模型参数 | 读写延迟 < 5ms;支持 TTL 自动过期;主从 + 哨兵高可用 | |
| 规则命中结果 Topic | 存储每条规则命中的明细记录与聚合后的分钟级/小时级指标 | Topic 按规则 ID 哈希分区;保留 7 天;支持下游重消费 | |
| 监控告警层 | Prometheus 指标 | 暴露规则命中 QPS、延迟、错误率、状态大小等核心指标 | 指标命名遵循 Prometheus 规范;Histogram 分桶覆盖 P99 |
| Grafana 看板 | 提供实时命中大盘、规则对比视图、异常检测趋势图 | 看板刷新间隔 10s;支持按规则 ID 下钻 | |
| 告警通道 | 基于 Prometheus Alertmanager 配置告警规则,通过钉钉/邮件/企微发送通知 | 告警静默期 5min;支持告警升级;通知模板可定制 |
3.3 技术选型与对比
核心组件选型基于实时计算场景的吞吐、延迟、状态管理与生态集成能力。下表给出关键对比与最终选型理由。
| 组件 | 候选方案 | 最终选型 | 选型理由 |
|---|---|---|---|
| 消息队列 | Kafka / Pulsar / RabbitMQ | Kafka | 高吞吐(百万 msg/s)、持久化、分区顺序、生态成熟,与 Flink/Spark 原生集成 |
| 实时计算引擎 | Flink / Spark Streaming / Storm | Flink | Exactly-Once 语义、事件时间处理、状态管理强大、Checkpoint 容错,适合复杂规则计算 |
| 规则缓存 | Redis / Hazelcast / Ignite | Redis | 亚毫秒级读写、丰富数据结构(Hash/ZSet/Stream)、部署运维简单,适合规则元数据与计数器 |
| 监控与告警 | Prometheus + Grafana / ELK / Datadog | Prometheus + Grafana | 开源、Pull 模型适合微服务、多维数据模型、Alertmanager 告警灵活,Grafana 看板生态丰富 |
3.4 数据流与关键路径
一条规则从数据产生到告警触发,经历以下完整路径:
- 数据接入: 业务日志 / CDC 事件 → Kafka 源 Topic(如
ods_rule_input)。 - 规则加载: Flink 作业启动时从 Redis 加载全量规则元数据,并订阅 Redis 规则变更通道实现热更新。
- 规则匹配: Flink 对每条消息执行规则引擎(如 Drools / 自研表达式引擎),命中后生成命中记录。
- 状态聚合: 按规则 ID + 时间窗口聚合命中次数、金额、用户数等指标,写入 Redis 计数器。
- 结果输出: 命中明细写入 Kafka 结果 Topic(如
dwd_rule_hit_detail),聚合指标暴露为 Prometheus Gauge。 - 监控告警: Prometheus 定期拉取指标,Alertmanager 根据告警规则(如命中率突降 > 50%)触发通知。
关键路径延迟预算: 从数据进入 Kafka 到告警触发,端到端延迟控制在 10s 以内。其中 Flink 计算延迟 < 2s,Redis 读写 < 5ms,Prometheus 拉取间隔 10s,Alertmanager 评估间隔 30s。对于超低延迟场景(如风控),可缩短 Prometheus 拉取间隔至 5s,并启用 Flink 原生告警推送。
3.5 高可用与扩展性设计
- Kafka 层: 源 Topic 与结果 Topic 均配置 3 副本,acks=all,min.insync.replicas=2,保证数据不丢。分区数按预估峰值吞吐的 2 倍预留,支持动态扩容。
- Flink 层: 启用 Checkpoint(间隔 30s,Exactly-Once 语义),状态后端使用 RocksDB 避免 OOM。作业并行度与 Kafka 分区数对齐,支持 Savepoint 停机升级。
- Redis 层: 采用主从 + 哨兵架构,读写分离。规则元数据缓存设置 TTL(默认 1h),计数器使用 Redis Stream 实现持久化,防止重启丢失。
- Prometheus 层: 使用联邦集群或 Thanos 实现多机房指标聚合。Alertmanager 配置高可用对(2 节点),避免单点告警遗漏。
避坑提示: 规则计算层切忌将规则引擎放在 Kafka Connect 或轻量级消费者中执行。规则匹配涉及状态聚合与时间窗口,必须使用 Flink/Spark Streaming 等具备状态管理能力的引擎,否则会出现数据不一致或内存溢出。