博客
关于我
[开源地址] 放弃Flink,.NET5.0开发CSharpFlink,简要设计、部署及二次开发说明。
阅读量:435 次
发布时间:2019-03-06

本文共 1951 字,大约阅读时间需要 6 分钟。

1 概述及背景

我们开发了一款基于NET 5.0的实时计算组件,用于处理工业领域的大规模数据。通过专线或4G网络传输数据,支持每天处理百万级数据量,为用户提供实时服务和离线分析。我们已稳定运行3年,并提供私有云服务。

本组件旨在替代Flink,实现数据聚合、逻辑计算等功能。经过近一年研发,现已实现聚合和逻辑计算,但Flink的性能和运维复杂度较高。因此,我们自主开发CSharpFlink,支持自定义数据源、计算和存储需求。

2 应用场景

主要应用于物联网和工业互联网的数据处理,包括:

  • 数据点实时聚合计算(如最大值、最小值、平均值等),可自定义扩展。
  • 历史数据窗口计算,支持数据补充和更新。
  • 数据表达式计算,支持自定义C#脚本,满足实时预警或深度处理需求。
  • 分布式部署,主节点负责任务分发,工作节点执行计算并存储结果。
  • 3 框架特点

    基于NET 5.0开发,具有以下优势:

  • 跨平台支持,开发效率高。
  • 支持数据窗口外的数据补充和更新,确保计算准确。
  • 定时或周期性表达式计算,满足实时需求。
  • 可通过C#扩展,对接多种数据源和存储方式。
  • 支持单节点或分布式部署,灵活性高。
  • 4 框架结构

    框架组件包括:

    • Cache:管理本地缓存。
    • Calculate:处理计算任务。
    • Channel:实现分布式通信。
    • Common:公共功能库。
    • Config:配置文件管理。
    • Execution:执行环境入口。
    • Expression:表达式计算。
    • Log:日志操作。
    • Model:数据元信息管理。
    • Node:节点管理。
    • Protocol:分布式协议。
    • Sink:结果存储接口。
    • Source:多数据源接口。
    • Task:任务操作。
    • Window:窗口计算。
    • Worker:工作节点接口。

    5 代码目录说明

    使用VS2019开发,解决方案文件为CSharpFlink.sln,目录结构如下:

  • Cache:管理计算任务本地缓存。
  • Calculate:处理输入、执行和输出操作。
  • Channel:实现分布式通信机制。
  • Common:公共功能库。
  • Config:读取和管理配置文件。
  • Execution:执行环境入口。
  • Expression:实现表达式计算。
  • Log:日志操作及管理。
  • Model:处理数据元信息。
  • Node:管理主节点和工作节点。
  • Protocol:定义分布式协议。
  • Sink:实现结果存储接口。
  • Source:对接多种数据源。
  • Task:定义窗口或表达式任务。
  • Window:实现窗口计算功能。
  • Worker:定义工作节点接口。
  • 6 配置文件说明

    默认配置文件路径为cfg(global.cfg),支持自定义路径。配置项包括:

  • MaxDegreeOfParallelism:任务并行度。
  • MasterListenPort:主节点侦听端口。
  • MasterIp:主节点IP。
  • NodeType:节点运行模式(Master、Slave、Both)。
  • RemoteInvokeInterval:远程调用间隔时间。
  • RepeatRemoteInvokeInterval:重复调用间隔时间。
  • SlaveExcuteCalculateInterval:工作节点执行间隔时间。
  • MaxFrameLength:数据传输最大帧长。
  • WorkerPower:工作节点能力系数。
  • MaxFrameLength:数据传输最大长度。
  • 7 任务部署说明

    二次开发完成的任务程序集(.dll)需部署至“tasks”目录。主程序自动加载并调用任务程序。开发完成后,测试通过的程序集可直接部署,并在命令行运行。

    8 命令行操作说明

    运行“CSharpFlink”程序,支持自定义配置文件或任务程序集:

    • -h:显示帮助信息。
    • -c:指定配置文件路径。
    • -t:加载任务程序集路径。

    示例命令:

    dotnet CSharpFlink.dll -c c:/master.cfg -t c:/mytask.dll

    9 部署说明

    将“release”目录下的程序复制至不同路径下,分别配置节点类型和任务数。修改配置文件中的“NodeType”为Master或Slave,运行相应的程序。

    10 二次开发说明

    二次开发主要包括数据源、计算过程和结果存储的实现:

  • 数据源对接:继承SourceFunction接口,可对接mqtt、kafka、rabbitmq、数据库等。
  • 数据计算:继承Calculate接口,可实现聚合和表达式计算。
  • 结果存储:继承SinkFunction接口,可实现多种存储方式。
  • 11 应用事例展示

    在同一台设备上,运行1个主节点和5个工作节点,生成1000个数据点任务。任务包括随机时间窗口和自定义算子。运行效果表现稳定,资源使用率可控。

    转载地址:http://ayoyz.baihongyu.com/

    你可能感兴趣的文章
    Openlayers中使用Image的rotation实现车辆定位导航带转角(判断车辆图片旋转角度)
    查看>>
    Openlayers中点击地图获取坐标并输出
    查看>>
    Openlayers中设置定时绘制和清理直线图层
    查看>>
    Openlayers图文版实战,vue项目从0到1做基础配置
    查看>>
    Openlayers实战:modifystart、modifyend互动示例
    查看>>
    Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
    查看>>
    Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
    查看>>
    Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
    查看>>
    Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
    查看>>
    Openlayers高级交互(8/20):选取feature,平移feature
    查看>>
    openlayers:圆孔相机根据卫星经度、纬度、高度、半径比例推算绘制地面的拍摄的区域
    查看>>
    OpenLDAP(2.4.3x)服务器搭建及配置说明
    查看>>
    OpenLDAP编译安装及配置
    查看>>
    OpenMCU(一):STM32F407 FreeRTOS移植
    查看>>
    OpenMCU(三):STM32F103 FreeRTOS移植
    查看>>
    OpenMCU(二):GD32E23xx FreeRTOS移植
    查看>>
    OpenMetadata 命令执行漏洞复现(CVE-2024-28255)
    查看>>
    OpenMMLab | S4模型详解:应对长序列建模的有效方法
    查看>>
    OpenMMLab | 【全网首发】Llama 3 微调项目实践与教程(XTuner 版)
    查看>>
    OpenMMLab | 面向多样应用需求,书生·浦语2.5开源超轻量、高性能多种参数版本
    查看>>