流式计算和实时计算有什么区别?

流计算和​​实时计算​​是以不同的维度对计算任务做出的分类。

数据处理的延迟分类

分为实时计算和​​离线计算​​。

实时计算强调尽快响应每个到达的数据记录,比如毫秒级甚至微秒级的​​响应延迟​​。以统计股市或者电商平台的日总成交金额为例,实时计算指每当市场上发生交易时,系统立刻对最新的成交记录做出响应,更新当日的​​总成交金额​​。

与之相对的,在交易发生时不做及时响应,而是等到第二日再统计前一日的总成交金额,则称为离线计算

按数据处理的方式分类

分为​​流计算​​和批计算。

流计算强调其处理的数据是无界的数据流,无界的数据流也称为​​流数据​​,工业设备上的传感器记录、股市的逐笔成交记录都是源源不断生成的流数据。针对数据流这个特征,流计算是一个持续的计算任务,处理的数据大小为单条记录或者​​微批​​的记录;

批计算处理的是有界的数据集,且数据集通常包含大批量数据,一次批计算不管是运行几分钟还是几个小时,总是会结束的。

以统计日总成交金额为例,即使是在每笔交易发生时做出实时响应,依然有两种截然不同的计算方法:若以当日截止当前所有的成交数据作为计算输入得到结果,这种基于全量数据集的计算称为​​批计算​​;而若是将成交数据看做一个序列,总是增量地处理最新到达的数据以更新统计结果,则称为流计算,总成交额可以通过最近一次统计的总成交额与最新一条成交记录的金额相加得到。很明显,在实时统计总成交金额的这个例子中,流计算是更优的数据处理方式。

因此,严格来讲,流计算与实时计算这两个概念并不可以拿来类比。

但由于业界通常以流计算作为实现实时计算的底层技术,比如近年来流计算引擎 Flink 在实时计算领域被广泛应用,因此很可能在一些场合中,在使用实时计算和流计算这两种表述时并没有进行严格的区分。

最后,推荐一下我们的 DolphinDB

DolphinDB 的实时流处理是一个轻量化一站式平台,在金融​​量化分析​​、物联网等领域有着大量的用户。在没有太多选择的情况下,很多用户基于Kafka + Flink + ​​实时数仓​​来构建实时数据处理平台,这种架构由多个子系统集群组成,无论是部署和运维成本都比较重。但是,与上述的开源多系统集成的实时计算解决方案相比,DolphinDB的实时流处理框架是基于轻量一体化设计的原则,内置支持流数据的发布、订阅、预处理、实时内存计算、复杂指标的滚动窗口计算等,将通道,计算,存储三大组件均纳入一套系统内完成,不仅实现轻量化的部署和运维,而且也支持高可用模式部署,规避单点故障对实时生产系统造成业务上的影响

同时,从开发效率和计算性能上考虑,DolphinDB 设计了多个独立实时计算引擎,可以让业务人员以低代码的方式实现各种场景的复杂计算。DolphinDB 还提供了上百个实现了​​增量算法​​优化的内置算子,并支持内存交换方式输出计算结果,将整体计算链路的时延压缩到极致。此外,DolphinDB 作为​​时序​​本身具有优秀的批计算能力,并且能够达到“流批一体”,即批计算和流计算可以使用同一套代码,并保证批计算与流计算的结果完全一致,在金融等领域此特性可以帮助企业实现产研一体,极大缩减从投研到投产的周期。

欢迎大家上手体验DolphinDB,更多使用教程可参考下方链接。

DolphinDB教程:​​dolphindb/Tutorials_CN​​

DolphinDB开发手册:​​欢迎阅读DolphinDB用户手册! — DolphinDB 1.30 文档​​