采访数百位工程师与决策者——“公司不采用流计算”的四大原因

96 阅读8分钟

作者:吴英骏 |RisingWave 创始人 & CEO

流处理这一技术已被学术界及工业界研究了二十多年,并且已经有多个先进成熟的流处理系统被打造出来。尽管全世界有大量公司已经采用了这一技术,但在一些公司中,仍然对采纳这种技术有所犹豫。作为一个积极致力于推动下一代流处理系统普及的创业者,我可以列举出各种各样采纳流处理的好处。与此同时,各大数据公司(包括 Snowflake、Databricks、MongoDB)的投入,以及大批创业公司的诞生,都似乎在验证着流处理拥有一个辉煌的未来。

但为什么一些公司还在犹豫是否要采纳这一技术呢?

很显然,如果一个公司并不会每天产生大量的实时数据,那它们可能的确不需要流处理,甚至都不需要各种各样的数据系统。像 MySQL 或 PostgreSQL 这样的托管服务可能就可以满足他们的需求了。

但在一个每天产生大量数据的数据驱动的公司内部,是什么在阻碍流处理的普及?

在过去的两三年间,我采访了数百位各个行业公司的一线工程师与决策者,而以下是我总结出的大家认为”不需要流计算“的四个主要原因。

原因一:"我们不需要实时结果"

在我所采访过的众多对象中,一个最常给出的“不需要流计算“的说法是“我们不需要实时结果”。

很多人觉得对结果每小时或者每天的更新就是足够了,因此,很多公司依赖于一些“古老”的批处理系统进行 ETL 与分析。诚然,在一些不需要进行实时决策的领域,比如税收财务、营养管理、健身打卡等,并不要求对大量数据需要进行复杂分析得到实时结果,但在绝大多数现代化领域中,根据实时结果进行实时决策几乎不可或缺。

比如,在金融领域,交易员(或者他们所写的程序)需要根据过去几秒钟或者几分钟内产生的结果对是否买卖股票进行决策;在制造业领域,管理者需要对生产线上所生产产品的质量进行分析以判断是否需要立即调整或者停止生产;在电商领域,商家需要根据实时消费情况来判断是否要调整货物供应或者对商品打折进行促销等等。

可以说,实时结果可以帮助公司最大化收益或最小化损失。而当我们继续问这些人“是否愿意在不考虑底层系统变更的情况下看到更加实时的结果”时,绝大多数人都会给出肯定的答案。因此可见,“不需要实时结果”并非是核心原因,真正阻碍流处理技术被采纳的原因在其他地方。

原因二:"流处理成本太高"

不少人有这样一种印象:流处理成本太高。流处理意味着连续不断的对数据进行计算,而连续不断的计算自然也意味着连续不断的消耗资源。这听起来似乎是合理的,但实际上,在诸多场景中,流处理会比批处理更加节省资源、降低成本。

流处理不仅意味着连续不断的计算,而且意味着增量计算。所谓增量计算,就是只对新增或是修改删除的数据进行处理,而不需要对所有数据进行重算。增量计算所产生的资源消耗显著低于全量计算。

我们考虑一个非常经典的数据处理场景:用户可能会经常使用一些编排工具(如 Apache Airflow)定时在数据仓库(如 Snowflake)中触发计算,并将得到的结果刷新到报表中。在这个场景中,用户在数据仓库中触发的是全量计算,也就意味着需要对数仓内的数据进行完整扫描之后进行计算才能得到结果。这样的全量计算往往消耗大量资源,并可能会造成几个问题:

  1. 数据结果重算所需要的时间超过了编排工具给出的结果刷新时间(例如重算需要花10分钟,而业务需要3分钟刷新一次结果),造成永远无法按时给出结果;
  2. 全量计算挤占大量资源,造成并发产生的随机查询性能大幅下降。

值得注意的是,随着数据量的变大,这样的问题会越来越严重。而流处理在这个场景中能够很好的解决问题。流处理使用的增量计算模型使计算的复杂度最小化,并只需要对新产生的数据进行计算,从而大幅降低了成本。

因此,尽管很多人都认为“流处理成本太高”,但实际上流处理在诸多场景中都能相比于批计算降低成本。

原因三:"流处理上手太难"

不少人第一次接触流处理可能是在 5 年前或者 10 年前。在当时,大数据流处理系统,如 Apache Storm、Apache Samza、Apache Flink 等刚刚兴起。在那个年代,如果需要开发流处理应用,人们便需要去学习特定系统的特定接口,并用复杂的 Java、Scala、甚至 Clojure API 来去编写程序。因此,在这些人心中,流处理意味着很高的学习壁垒,而这种学习壁垒让许多人望而却步。

而时代变了。在过去的三到五年中,流处理在易用性方面有了大幅提升。经典的系统,如Apache Flink 等,都在原有的 Java API 基础上开发出了 SQL 层,让用户可以不再需要考虑如何写 Java 或者如何打 jar 包便可以做到分布式流计算。

而更新一代的流处理数据库,如 RisingWave 等,直接提供给用户 PostgreSQL 数据库的使用体验,并提供了 Python、Java 等 UDF 功能,在学习门槛进一步降低的同时也保证的表达性。

因此可以说,“流处理上手太难”已经成为了过去式。在 2023 年这个时间点上,各类系统都提供了非常简易高效的交互方式,来给用户以舒适的体验。

原因四:"流处理难以维护"

对于流处理有一定了解的人,可能会认为流处理系统难以运维。这是因为在流处理中,数据量可能会随着时间的变化而大幅波动,因此流处理系统必须能够高效的进行动态扩缩容以保证能够平滑、高效的进行计算。与此同时,由于流处理意味着连续不断的计算,当系统宕机时需要及时恢复才能保证服务的高可用,而这也对流处理系统的故障恢复能力提出了极高的要求。

在早期,流处理系统的确没有特别好的动态扩缩容以及故障恢复方式,而一些系统甚至将这些功能交给用户来去处理。而如今,流处理系统的理论已经相当成熟,大部分系统都已经实现了高效动态扩缩容以及自动故障恢复等功能。而随着云的普及,最新一代的系统,包括 RisingWave 以及一些 Flink 商业版本等,也都纷纷实现了更加云原生的架构,让流计算变得更加高效。当然了,如果使用云上托管的流处理服务,那么用户就更加不用为运维操心了。

结论

尽管大量文章都布道了流处理的好处,并给出各种案例描绘出流处理为现代企业带来的商业价值,但我们仍然需要承认,不少企业对是否引入流处理仍然带有一些犹豫。现代的流处理技术以及系统已经非常成熟,相信对流处理的诸多疑虑其实大可不必。流处理是门通用技术,现代流处理系统完全可以在为企业降低成本的同时带来实时洞察、实时决策的能力。

关于 RisingWave

RisingWave 是一款分布式 SQL 流处理数据库,旨在帮助用户降低实时应用的的开发成本。作为专为云上分布式流处理而设计的系统,RisingWave 为用户提供了与 PostgreSQL 类似的使用体验,并且具备比 Flink 高出 10 倍的性能以及更低的成本。了解更多:

GitHub: risingwave.com/github

官网: risingwave.com

公众号: RisingWave 中文开源社区

截屏2023-08-14 14.32.03.png