为了增强”现代数据堆栈”的功能,流式数据是必不可少的原因

为什么流式数据对于赋予“现代数据栈”至关重要。

二零二二年七月十二日

为了增强”现代数据栈”的能力,流式数据是必不可少的原因。

越来越多的情况表明流数据比批处理数据更具优势。请看我们的经验如何支持这一观点。

为什么流媒体数据在现代数据堆栈中是不可或缺的?

作为一家以产品为主导的企业,Aiven大量投资于先进的分析功能的构建。因此,我们一直在寻求获取和收集数据的最佳方法。

我叫Anton Heikinheimo。我在Aiven担任数据工程师的职位,负责构建可靠、可伸缩且易于维护的数据流水线。自2016年创立以来,Aiven每年员工数量增长超过两倍,实现了企业的飞跃成长。然而,自2020年开始,数据工程部门不再需要扩张,实际上,仅凭两名数据工程师就能增强Aiven内部的分析能力。我们支持开源,始终选择托管解决方案,这对我们的成功至关重要。开源让我们能够构建可靠的软件,并在成长过程中控制成本。与此同时,托管解决方案使我们能够专注于构建业务逻辑,而不是管理基础设施。

批处理和流处理的讨论从古至今一直存在,并且流处理一直被认为是前进的方向的共识。然而,最近,数据领域的许多趋势更进一步地使流处理受益更多。在这篇博客文章中,我们将讨论这些趋势是什么,以及为什么流处理更适合实现它们。

为什么数据团队会转向流媒体?

近年,数据团队有幸有机会重新审视数据堆栈,并通常选择了以流数据和流处理为核心的堆栈。考虑到相比批处理,设置流水线的优点,这并不令人惊讶。批处理摄取作业由于设置简单,初始成本较低,但任何长期从事该工作的人都会理解批处理摄取带来的复杂性,例如到达延迟维度(数据不同步)或由于数据延迟而必须在下游应用程序中牺牲的事宜。设置流摄取流水线需要更多前期投资,但其主要优点可以归类如下:

    • データの適時性**、データウェアハウス上に構築されたアプリケーションはデータの到着を何時間も待つ必要がない。

 

    • データ品質と完全性**、CDC(Change Data Capture)とストリーム処理により、データチームは取り込む前にデータの完全性と品質を管理できる。

 

    • コスト削減**、取り込み前にデータを集約・結合することで、チームは通常、ストレージや処理のコストを削減することができます。

 

    運用上のオーバーヘッドが少ない**、ストリーム処理を中心に構築されたデータ・スタックでは、データの同期不良を心配する必要がない。

数据的时效性

不仅仅限于传统的仪表盘和报告,数据团队目前还致力于处理直接影响业务流程的用例。数据领域的新趋势是反向ETL,数据从业务系统发送到数据仓库,经过数据仓库的处理后再发送回业务系统。反向ETL的一个例子是营销通信,针对客户的通信根据CLTV(客户生命周期价值)、客户分段、客户健康评分等计算值进行个性化定制。

通过这种新的数据仓库业务用例,数据时效性的重要性显著提高。Aiven内部将缩短从数据在后端生成到到达各业务系统的时间作为其中一个关键绩效指标(KPI)。使用Apache Kafka®可以在数据生成后立即发送数据,使用诸如Apache Flink®之类的流处理框架可以实时丰富数据。

数据的质量和完整性

最新的数据堆栈主要是以ELT(Extract Load Transform)流程为核心构建的。与传统的ETL(Extract Transform Load)相比,其主要区别在于在将原始数据加载到数据仓库之前不进行转换。ELT的一个意外结果是,因为数据团队试图通过复杂的转换来修复低质量的数据,导致低质量的数据进入分阶段区域并且带来技术债务。此外,由于可变的数据模型,ELT难以获取准确的历史数据。可变模型和低质量的数据使得每次向分阶段数据引入新功能时,获取准确的历史记录变得指数级别的困难。

流数据处理结合了ETL和ELT的优点,通过执行ETLT(Extract Transform Load Transform)来解决这些问题。在ETLT中,数据在导入时进行了一些预处理,这些转换可以使用流数据处理工具(如Apache Flink)来执行。进行转换的原因是为了保证在数据加载时,能够在暂存区域进行各种数据检查,以确保数据的质量。这些检查包括检查NULL值、执行合并操作、强制应用模式等。例如,在Aiven中,将两个事件源进行了合并:API请求和API请求响应。这样做有两个目的:

1. 验证每个响应都带有请求
2. 实时将数据合并,避免在数据仓库中进行昂贵(而且慢)的合并。

另一个问题是数据的完整性。在批处理中,使用轮询间隔,在预先定义的间隔(例如每小时或每天)查询表。如果基础数据的更改频率超过轮询间隔,并且表没有明确跟踪该状态,则可能错过宝贵的信息。例如,不变的 customer_action_log 包含动作 “email updated”,但由于客户立即更改了值,批处理无法获取顾客表中更新的电子邮件值。因此,例如使用Debezium CDC(Change Data Capture)连接器的基于日志的数据库复制比较优越,因为它根据数据库的本机日志源进行复制。

最后,流处理可以拓展符合GDPR的数据管道的可能性。在这个管道中,个人信息 (PII) 在传输过程中被匿名化,从而可以避免PII数据在存储容器、日志或未使用的表格中滞留的风险。

降低成本

通过在流处理中集合和丰富传输中的数据,可以实现显著的数据节省。

在导入指标和其他物联网数据时,通常会进行数据预聚合。指标数据通常粒度为秒,这样大量的数据可能会大幅增加存储和计算成本(想象一下拥有20万个节点,并且每个节点都每几秒发送一次数据的场景)。在Aiven中,我们使用Apache Flink的滑动窗口来在导入时定义数据粒度,并且准确地将最适合业务需求的粒度导入。在Flink窗口将数据分组成桶时,需要定义聚合函数,但通常我们会定义最小值、最大值、平均值和分布度量。

数据空间的另一个趋势是活动模式。来自不同来源的事件和数据被规范化,并在一个表中进行分析。Flink在处理嵌套的JSON结构时具有出色的支持,因此是这一目的的出色工具。

运用时的额外负担很少。

批量摘要中的一个困难是在提取来自不同源的不同数据时产生的运营开销。数据经常失去一致性,并且当这样的测试失败时,解决方案是在重新运行作业之前等待1至2小时。原因可能是一次提取失败会破坏数据的一致性。但是,在流式处理中,尤其是在Apache Flink中,可以基于事件时间而不是处理时间进行转换,因此容易进行恢复。

在流媒体数据摘要中,数据一旦生成就立即发送,因此不可能发生这样的情况。最后,在流媒体中,可以使用经过验证的开源工具,如Apache Kafka和Apache Flink。这些工具已处于成熟状态,一旦流水线开始运行,它们就能够像魔法一样正常工作。由于这些工具是开源的,因此没有与特定供应商或软件绑定的风险。价格也是可预测的,不会以指数方式增长根据使用量。实际上恰恰相反,在使用Kafka和Flink时会频繁发挥规模经济效益。

得出结论

最近,可以得出结论的数据领域的趋势是加快了构建以流媒体为中心的数据仓库的必要性。如果数据部门无法提供可靠的数据接口来适应业务速度,决策将无法得到答案,或者该决策将在业务被蒙住双眼的情况下做出。Aiven通过在平台上使用诸如Apache Kafka和Apache Flink之类的开源工具,成功地赋予分析师和业务利益相关者能力。使用Aiven平台进行工作的一个意外结果是与自身的产品部门建立了紧密合作关系,帮助数据工程师识别日常遇到的摩擦并构建解决现实世界问题的产品。

bannerAds