前言
基于.NET 5.0 框架自主研发一套CSharpFlink实时计算组件,简化实时计算流程并满足自定义数据源接入、灵活计算以及高效存储的需求。
这套组件不仅降低了系统复杂度,还提升了开发效率,使得团队可以更加专注于业务逻辑的实现和优化。
框架介绍
使用Flink作为云平台后台的实时计算部分,基本实现数据点的聚合计算、表达式规则计算等业务,进一步实现机器学习或自定义复杂算法的需求。
经过将近一年左右时间的研究及开发,已经基本实现了聚合和逻辑等业务,但是感觉Flink比较重,并且应用和运维的水平要求比较高。
基于上述情况,自主使用.NET 5.0开发一套CSharpFlink实时计算组件,支持自定义数据源、计算和存储的基本要求。
框架特点
跨平台开发:采用.NET 5.0,实现完全跨平台支持。
历史数据补发与更新:支持超出实时窗口(如5秒)的数据补充、更新及重新计算,确保数据的完整性和准确性。
灵活的表达式计算:提供定时或事件触发的实时表达式计算功能,适应实时和周期性计算需求。
C#二次开发能力:支持使用C#语言对接多种数据源,自定义算子和数据存储方式,增强灵活性。
部署灵活性:支持单节点和分布式部署,以适应不同的规模和性能要求。
框架结构
框架结构组件的基本示意,具体如下图所示:
应用场景
主要面向物联网、工业互联网私有云或公有云平台建设过程中的数据点实时聚合和表达式计算。
实时时间窗口内的数据点聚合计算
多维度统计分析:支持在指定的时间窗口内对数据点进行多种统计运算,如最大值、最小值、平均值、总和、众数、方差及中位数等。用户可以根据具体需求自定义二次开发,灵活应对不同业务场景。
历史延迟窗口的数据更新与重计算
数据完整性保障:对于存在延迟或需要更新的历史数据,在设定的时间范围内自动补充或重新计算,确保数据的准确性和一致性。
自定义C#脚本的表达式计算
实时预警与深度加工:允许用户通过编写自定义的C#脚本来实现复杂的逻辑运算和条件判断,支持实时预警机制以及对原始数据的深入加工处理,满足个性化业务需求。
主从结构的分布式部署架构
高效的资源利用:采用主从结构的分布式部署模式,其中主节点负责任务调度与分发,工作节点则专注于具体的计算任务执行及结果存储,保证系统的高可用性和扩展性。
框架源码
开发工具: Visual Studio 2019
解决方案: CSharpFlink.sln
目录结构及功能说明
1、Cache: 管理主节点和工作节点计算任务的本地缓存。
2、Calculate: 处理计算任务的输入、过程和输出管理。
3、Channel: 实现主节点和工作节点之间的分布式IO通讯。
4、Common: 包含公共操作类库。
5、Config: 全局配置文件的读取和管理。
6、Execution: 提供全局工程的执行环境入口。
7、Expression: 支持表达式计算任务的操作。
8、Log: 负责日志记录和管理。
9、Model: 定义数据点的元数据信息。
10、Node: 主节点和工作节点的管理接口。
11、Protocol: 规定主节点和工作节点间通信的协议。
12、Sink: 定义计算结果存储的接口。
13、Source: 提供对接多种数据源(如MQTT、Kafka、RabbitMQ、数据库等)的接口。
14、Task: 管理窗口或表达式计算任务,包括任务调度和执行。
15、Window: 操作数据窗口任务,处理时间窗口内的聚合计算。
16、Worker: 定义工作节点的行为接口。
二次开发说明
二次开发主要针对数据源、计算过程和数据计算结果存储,大致过程如下:
1、数据源对接,可以自定义对接mqtt、kafka、rabbitmq、数据库等,需要继承SourceFunction接口,参见:RandomSourceFunction.cs类。
2、数据计算过程,可以自定义数据处理或加工,需要继承Calculate.Calculate接口,参见:聚合计算Avg.cs、表达式计算ExpressionCalculate.cs。通过AddWindowTask或AddExpressionTask函数参数进行实例化。
3、数据计算结果存储,可以自定义存储任何介质上,需要继承SinkFunction接口,参见:SinkFunction.cs类。
应用示例
同一台电脑,CPU:4核 I5-7400 3.0GHz,内存:16G,1个主节点,5个工作节点,生成1000个数据点任务,随机数据点时间窗口和计算算子。
CPU 使用率为:20%-30%,
内存使用率:30%-40%,
主节点CPU和内存使用情况:
3%-5%、100MB-300MB,
工作节点CPU和内存使用情况:
0.1%-2%、25MB-60MB。
运行效果,如下图:
项目地址
GitHub:github.com/wxzz/CSharp…
Gitee:gitee.com/wxzz/CSharp…
总结
以上仅展示了CSharpFlink实时计算组件的部分功能。更多实用特性和详细信息,请大家访问项目地址。
希望通过本文为物联网和工业互联网领域的开发提供有价值的参考。欢迎在评论区留言交流,分享您的宝贵经验和建议。
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。
也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!
优秀是一种习惯,欢迎大家留言学习!