本文共 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/