关键要点
在今日的数据驱动型金融市场中,金融交易所和交易机构面临着处理海量实时数据的挑战。本篇文章探讨了一种为金融服务行业领先者设计的时序数据湖架构,利用AWS服务进行双时序处理,以满足严格的服务水平协议SLA要求。
金融交易所和交易公司在近实时内生成大量数据,因此进行双时序计算以获得准确结果变得极其困难。为了实现这一目标,需要一种能够在高峰期处理大量数据、满足严格延迟要求并根据传入数据量进行扩展的处理架构。
本文将描述金融服务行业中一家市场领导者的场景,解释如何利用AWS服务进行双时序处理、状态管理以及针对日内变动工作负载的规模扩展,同时满足严格的服务水平协议SLA要求。
设计和实现一个具备可重复读取隔离级别的完全时序事务数据湖是一项挑战,尤其是在需要整体架构根据突发事件进行扩展的情况下。整体架构中的数据存储需要记录不同时间点的数据价值历史,这对于金融数据尤其重要。金融数据可能包括公司行为、年度或季度报告,或具有可变利率的固定收益证券如债券。在报告期内能够纠正数据不准确性至关重要。
目标客户寻求一种数据处理平台架构,动态根据工作负载进行扩展,具备在5分钟内处理15亿条记录的能力。其平台需要能够满足从数据摄取到报告的15分钟端到端SLA,并保持最低的总拥有成本。此外,管理双时序数据需要数据库具备关键特性,如ACID原子性、一致性、隔离性、持久性合规性、时间旅行能力、完整模式演变、分区布局与演变、回滚至先前版本以及SQL样式查询体验。
解决方案架构的关键构建模块包括Amazon Kinesis数据流,用于流数据处理,Amazon Kinesis数据分析使用Apache Flink作为处理引擎,Flink的RocksDB用于状态管理,以及在Amazon简单存储服务S3上的Apache Iceberg作为存储引擎如下图所示。
工作流程如下:
发布应用程序从源系统接收数据,并使用定义良好的JSON格式结构将数据发布到Kinesis数据流中。Kinesis数据流保存数据的时长可配置,因此数据不会丢失,并且可以根据摄取的数据量自动扩展。Kinesis数据分析运行Apache Flink应用程序,通过状态管理RocksDB处理双时序计算。该Apache Flink应用程序从Kinesis数据流消费数据并执行以下计算:将JSON流转换为与SQL表兼容的行类型记录,解析流中的嵌套和父子关系检查记录是否已在内存RocksDB或与Kinesis数据分析计算节点连接的硬盘中存在,以避免因读取延迟而影响性能执行双时序计算,并在调用Apache Iceberg接收器之前,在内存数据结构中创建结果记录Apache Flink应用程序的接收器将时间状态作为记录附加到现有的Apache Iceberg数据存储中。这将遵循时间序列数据的关键原则,即不可变性,具备时间旅行能力,同时支持ACID合规、模式演变和分区演变Kinesis数据分析具有弹性,提供无数据丢失能力,具有定期检查点和保存点等特性。这些功能用于将状态管理存储在安全的Amazon S3位置,以便在Kinesis数据分析之外访问。此保存点机制可以用于通过基于时间的调度程序和AWS Lambda函数以编程方式扩展集群大小。如果实现了RocksDB的生命周期特性,那么老旧记录将存储在Amazon S3上的Apache Iceberg中。在进行时间计算时,如果内存中找不到状态,数据将从Apache Iceberg读取到RocksDB中并完成处理。然而,此步骤是可选的,如果Kinesis数据分析集群按照需求初始化了足够的Kinesis处理单元以保留历史信息,则可以绕过。由于数据以Apache Iceberg表格式存储在Amazon S3中,因此可以使用支持Apache Iceberg表格式的Trino进行查询。最终用户可以使用支持Trino查询引擎的任何SQL工具查询数据。Apache Iceberg的维护作业,如数据压缩、快照过期、删除孤儿文件,可以使用Amazon Athena来优化Apache Iceberg数据存储的性能。每个在Apache Flink应用程序中执行的处理步骤的详细信息都通过Amazon CloudWatch记录所有事件。
Amazon EventBridge调度程序调用Lambda函数来扩展Kinesis数据分析。Kinesis数据分析在重新缩放过程中会短暂中断,时间与存储在RocksDB中的数据量成正比,因此制定状态管理策略对系统的正常运行至关重要。
以下图展示了扩展过程:
高峰负载前: Kinesis数据分析集群在高峰负载前以最小配置处理非高峰记录。EventBridge调度事件启动,调用Lambda函数,使用保存点机制关闭集群并将Kinesis数据分析集群扩展至所需的Kinesis处理单元。高峰负载期间: 当出现高峰数据突发时,Kinesis数据分析集群已准备好处理来自Kinesis数据流的数据量,并在5分钟的SLA内处理。高峰负载后: EventBridge的计划事件调用Lambda函数,将Kinesis数据分析集群缩减到保留所需状态的最低配置。
通过上述架构,我们想展示我们能够满足SLA的能力,包括性能和处理时间。我们截取了一部分基准数据与指数数据并用完整的架构进行了处理。在此过程中,我们观察了一些非常有趣的发现,愿意与大家分享。
Apache Iceberg的Upsert和Append操作的处理时间: 在我们的测试中,我们预期Upsert操作会比Append慢。然而,结果表明,Append操作的速度实际上快于Upsert,尽管在Apache Flink应用中执行了更多计算。在处理3500000条记录的测试中,Append操作耗时1556秒,而Upsert耗时1675秒。
一元飞机场官网Apache Iceberg的Upsert与Append操作的计算消耗: 在10000000条记录的计算消耗比较中,我们注意到Append操作能在相同的时间中处理数据,而消耗更少的计算资源。在我们的测试中,Append操作仅消耗64个Kinesis处理单元,而Upsert消耗了78个Kinesis处理单元。
可扩展性与性能: 为了达到期望的数据处理性能,我们需要特定配置的Kinesis处理单元、Kinesis数据流及Iceberg并行度。在我们的测试中,我们开始时使用四个Kinesis处理单元和四个Kinesis数据流进行数据处理。我们观察到使用16个Kinesis数据处理单元时,数据处理性能提升了80。进一步增加至32个Kinesis处理单元时又提升了6的性能。当Kinesis数据流增加至16时,我们观察到额外2的性能提升。
不同数据量的Upsert与Append处理时间: 在此测试中,我们开始时使用350000条记录的数据。当我们将数据量增加到350万条时,发现Append处理时间比Upsert快,提升了五倍。
今天我们探讨的架构基于客户的数据量需求进行扩展,并能够满足15分钟的端到端SLA,具有降低总拥有成本的潜力。此外,该解决方案能够处理高容量的双时序计算,具备ACID合规性、时间旅行、完整的模式演变、分区布局演变、回滚到先前版本及SQL样式查询体验。
Krishna GogineniKrishna Gogineni是AWS的首席解决方案架构师,为金融服务客户提供支持。他是云原生架构的倡导者,帮助客户转变软件构建方式。他与客户合作,了解他们独特的商业目标,并通过利用最佳实践和工具来提升客户实现这些目标的软件交付能力。
Adam GlinianowiczAdam是一名解决方案架构师,专注于数据存储与管理以及建立在AWS云上的全文搜索技术。目前,他正在为伦敦证券交易所集团构建核心数据存储解决方案,以标准化来自各类金融领域的时序数据的持久性和检索。
Sreenivas AdikiSreenivas Adiki是ProServe的高级客户交付架构师,专注于数据与分析。他确保在大数据/分析领域设计、构建、优化和转型的成功,参与深度架构讨论和设计练习,并发布了多篇AWS资产,例如白皮书和概念验证文件。
Kavita MittalKavita是伦敦证券交易所集团的首席解决方案架构师,拥有近20年的数据与架构经验。她热衷于用数据解决复杂的商业问题,并通过数据转型来带来商业价值。
Mahesh KothaMahesh Kotha是AWS数据分析专业组的数据与机器学习工程师。他拥有17年的经验,专注于使用Apache Spark/Flink/Iceberg构建数据湖平台,帮助客户解决行业中的复杂问题。
Narsimhan BramadesamNarsimhan Bramadesam是伦敦证券交易所集团数据与分析组的数据平台董事。他专注于开发全面的数据平台,使市场、参考、收盘、时间序列和替代数据等广泛数据在云上可用。作为前数据工程师,他对数据和人工智能的方方面面充满热情。
销售热线
营销一部(传统产品):王部长 15371160678
营销二部(光伏焊带):曹部长 13921871003
电子邮箱
ascorbic@icloud.com
公司地址
陇南市括某之森253号