【实时数仓】全链路架构设计

491 阅读2分钟

实时数仓全链路架构设计

一、技术栈选型

层级组件选型
数据采集Kafka 3.7 + Flume 1.11
实时计算Flink 1.17(Exactly-Once语义)
存储引擎OpenGemini 1.1(时序数据)
Doris 2.0(宽表)
PostgreSQL 15(事务层)
数据服务Spring Boot 3.2 + Redis 7.0
监控预警Prometheus 2.47 + AlertManager 0.27 + Grafana 10.3

二、全链路架构设计

1. 逻辑架构图

graph TD
    subgraph 数据源层
        A[IoT设备] --> B[Flume采集集群]
        C[应用日志] --> D[Kafka生产者]
    end

    subgraph 数据流0层-接入层
        B --> E[Kafka Topic: raw_events]
        D --> E
    end

    subgraph 数据流1层-处理层
        E --> F[Flink实时清洗]
        F -->|DWD| G[OpenGemini]
        F -->|DWS| H[Doris]
    end

    subgraph 数据流2层-服务层
        G --> I[Spring Boot API]
        H --> I
        I --> J[Grafana大屏]
        I --> K[决策系统]
    end

    subgraph 监控层
        J --> L[Prometheus]
        K --> L
        L --> M[AlertManager]
    end

2. 物理部署图

graph TD
    subgraph 物理节点集群
        N1[Kafka Node x5] -->|生产数据| N2[Flink JobManager x3]
        N2 -->|任务分发| N3[Flink TaskManager x10]
        N3 -->|写存储| N4[OpenGemini Cluster]
        N3 -->|写存储| N5[Doris Cluster]
        N5 -->|API调用| N6[Spring Boot服务节点 x4]
    end

3. 开发视图(UML组件图)

classDiagram
    class FlumeAgent {
        +collectData()
        +pushToKafka()
    }
    
    class FlinkJob {
        +sourceFromKafka()
        +cleanData()
        +windowAggregate()
    }
    
    class OpenGemini {
        +writeTimeSeries()
        +queryContinuousAgg()
    }
    
    class Doris {
        +createMaterializedView()
        +queryOLAP()
    }
    
    FlumeAgent --> FlinkJob : 原始数据流
    FlinkJob --> OpenGemini : DWD清洗结果
    FlinkJob --> Doris : DWS聚合结果

三、数据流分层设计

1. 数据流0层(原始接入层)

flowchart LR
    A[设备传感器] --> B[Flume Agent]
    B --> C{Kafka Topic分区}
    C -->|Partition 1| D[Broker 1]
    C -->|Partition 2| E[Broker 2]
    C -->|Partition N| F[Broker N]
    G[应用服务] --> C

技术要点

  • Kafka Topic按设备ID哈希分区,保证相同设备数据顺序性
  • Flume拦截器实现数据脱敏和格式校验

2. 数据流1层(实时处理层)

flowchart LR
    A[Kafka Topic] --> B[Flink Source]
    B --> C{数据处理逻辑}
    C -->|DWD清洗| D[(OpenGemini)]
    C -->|DWS聚合| E[(Doris)]
    D --> F[连续聚合物化视图]
    E --> G[预计算宽表]

关键实现

// Flink窗口聚合逻辑
stream
  .keyBy(device -> device.getRegion())
  .window(TumblingEventTimeWindows.of(Time.minutes(5)))
  .aggregate(new AverageTempAggregate())
  .addSink(new DorisSink());

3. 数据流2层(服务应用层)

flowchart LR
    A[OpenGemini] --> B{Spring Boot API}
    C[Doris] --> B
    B --> D[Redis缓存]
    D --> E[Grafana渲染]
    D --> F[决策系统调用]

优化设计

  • Redis缓存热点数据,减少对存储层直接访问
  • API响应添加ETag实现客户端缓存

四、实施资源规划

资源类型配置详情
硬件资源- Kafka集群:5节点(16C/64G/2TB NVMe * 2 RAID0)
- Flink集群:3 JobManager + 10 TaskManager(32C/128G/1TB SSD)
网络要求- 万兆内网互通,Kafka与Flink间延迟 <1ms
依赖服务- Zookeeper 3.8集群(3节点)
- OpenGemini元数据集群(3节点)

五、测试方案

1. 功能测试用例

测试项测试方法预期结果
数据完整性注入10万条标记数据,验证端到端一致性丢失率 <0.001%
窗口计算准确性构造跨窗口事件验证聚合结果窗口包含所有符合条件事件
故障恢复能力随机终止Flink TaskManager并观察恢复60秒内自动重启并恢复处理

2. 压力测试场景

压测类型参数配置成功标准
峰值写入测试100万设备 × 100 msg/s持续30分钟Kafka吞吐 ≥80万 msg/s
高并发查询5000并发查询时序数据OpenGemini P99 ≤800ms
混合负载测试50%写入负载 + 50%复杂查询系统无雪崩,资源利用率 <85%

3. 监控验证指标

pie
    title 监控覆盖率
    "数据完整性监控" : 35
    "计算延迟监控" : 25
    "资源利用率监控" : 20
    "服务健康度监控" : 20

架构交付物

  1. 部署手册:包括Ansible脚本和K8s Helm Chart
  2. 监控看板模板:Grafana Dashboard JSON文件
  3. 压测报告模板:JMeter测试计划 + 结果分析
  4. 容灾方案:节点故障切换SOP文档

总结

通过分层架构实现高内聚低耦合,结合Flink+OpenGemini+Doris构建高效实时分析能力,满足P99稳定性要求,并通过全链路监控保障系统可靠性。