我开发并维护了一个显示指标数据的 Web 应用程序。这些指标主要是来自传感器、可编程逻辑控制器等的具有常规分辨率的时间序列。其中一些时间序列是测量值(如温度等),而另一些则是使用其他时间序列作为输入的计算结果。这些措施来自不同的来源,具有不同的格式、协议和可用性延迟。它们现在都是面向批处理的,但面向流的很快就会出现。
目前,数据的导入是使用将数据存储到数据库中的 Apache Camel 完成的。然后,度量的计算由一个“自制”批处理程序完成,每次批量导入完成时 apache Camel 都会调用该程序,为该脚本提供导入时间序列的开始和结束日期以及某种要处理的命名空间只有批次关注的时间序列。
虽然这个解决方案目前有效,但由于其批量定向,它有一些缺点。我开始考虑未来改进的更好解决方案。
更准确地说,我需要一个能够通过对输入时间序列应用数学运算来生成输出时间序列的系统,事情就像
tsout = (t1+t2) / t3
考虑到输入 (t1, t2, t3) 不能同时使用,因为它们来自不同的来源(一些来自批处理,一些来自流......)。一些计算的时间序列被用作其他一些的输入。所有这些都创建了一个依赖图。
是否有一些设计模式、工具、框架甚至“概念”可以帮助我在数据到来时以更“流式”的方式改进指标的生成/计算,抽象不同的来源并考虑依赖关系?
我查看了 apache Kafka、Flink、Spark 等框架。但我怀疑它们是否真的能满足我的需求。他们允许这样做,stream / event processing
但我不确定这是否指的是我需要做的相同类型的处理。
希望我的问题足够清楚,不容易解释。