解构流存储 — Pravega,与 Flink 构建端到端的大数据流水处理线

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: Pravega 中国社区创始人、戴尔科技集团软件工程技术总监滕昱在 FFA 2021 主会场的演讲

2000元阿里云代金券免费领取,2核4G云服务器仅664元/3年,新老用户都有优惠,立即抢购>>>


阿里云采购季(云主机223元/3年)活动入口:请点击进入>>>,


阿里云学生服务器(9.5元/月)购买入口:请点击进入>>>,

本篇内容整理自 Pravega 中国社区创始人、戴尔科技集团软件工程技术总监滕昱在 Flink Forward Asia 2021 主会场的演讲。主要内容包括:

  1. 存储抽象的现状
  2. Pravega 性能架构详解
  3. Pravega 流存储数据演示
  4. 展望未来

FFA 2021 直播回放 & 演讲 PDF 下载

一、存储抽象的现状

img

在计算机软件设计中,有一个非常著名的观点:任何新的计算机问题都可以通过新加入的抽象层解决,对于存储也是一样。上图列出了三种大家主要使用的存储抽象,即块存储、文件存储和对象存储。块存储基本上和现代计算机工业同时期诞生;文件存储作为当今主流的存储抽象稍晚出现;对象存储更晚,其诞生于 1990 年代。而在实时计算的发展和云时代背景下,流式的数据有着越来越广泛的应用,我们认为需要一种新兴的存储抽象来应对这一种强调低延时、高并发流量的数据。而在文件存储中添加字节流可能是一个最直观的想法,但在实际需求上面临着一系列的挑战,实现反而更加复杂,如下图所示:

img

数据的写入大小对吞吐量的影响至关重要,为了平衡延时和吞吐量,在实现上需要引入 batching,并且需要预分配空间避免块分配造成的性能损耗,最后作为存储,持久化也必须保证。

img

本地文件系统本质上是不安全的。在现实世界中,每时每刻硬件节点,磁盘介质都可能会损坏。为了解决这些问题,就需要引入分布式存储系统,例如常见的多副本系统,但副本的拷贝费时费空间,分布式一致性协议的数据安全问题又会成为新的难题。

img

如果基于 shared-nothing 架构设计,完全并行不存在共享资源,例如上图中有三个副本分别存于三个独立的物理节点之上,那么单条流数据的存储大小就受限于单个物理界点的存储上限,所以这依然不是一个完备的解决方法。

由此可见,由于上述一系列的问题,基于文件系统构建流存储是相当复杂的。

img

于是,我们受到了开篇的观点的启示,尝试换个角度,使用分布式文件和对象存储的分层架构模式来解决这个问题。底层的可扩展存储可以作为一个数据湖,流的历史数据可以存入其中与其他非流的数据集共存,在节省了数据迁移、存储运维开销的同时可以解决数据孤岛的问题,批流结合的计算将会更加方便。

img

分层架构可以解决分散的多客户端。为了解决容错恢复的问题,我们在流存储的基础上增加了分布式 log 存储。

img

在真实应用实例中,实时应用程序的流量可能随着时间波动,为了应对数据的峰谷,我们引入了动态伸缩功能。

在左上角的图标中,横轴表示时间,纵轴表示应用程序的数据。它的波形图刚开始很平稳,到了特定点时数据量突然变大,这往往是一些跟时间有关的应用程序的特性,比如早晚高峰、双十一等场景,这个时候流量就会蜂拥而入。

一个完备的流存储系统应该能够感知到实时流量的变化进行资源的合理分配。当数据量变大时,底层会动态地分配更多的存储单元处理数据。在云原生时代的底层架构中,动态伸缩也是通用的存储系统中非常重要的一点。

img

二、Pravega 性能架构详解

Pravega 的设计宗旨是成为流的实时存储解决方案。

  • 第一,应用程序将数据持久化存储到 Pravega 中,借助分层存储架构,Pravega Stream 实现了无上限的流存储;
  • 第二,Pravega 支持端到端的仅一次语义,包括读端的 checkpoint 与事务性写功能,使得计算可以拆分为多个可靠的独立应用程序,实现了流式系统的微服务架构;
  • 第三,Pravega 的动态伸缩机制,可以实现流量监控并自动在底层进行资源的分配,让开发和运维人员无需手动调度集群。

Pravega 独立的伸缩机制,让生产者和消费者互不影响,数据处理管道变得富有弹性,能对数据的实时变化做出适时的反应。

img

如图所示,Pravega 是从存储的视角看待流数据。Kafka 本身的定位是消息系统,所以它会从消息视角看待流数据。消息系统与存储系统的定位是不同的,消息系统是指消息传输系统,主要关注数据传输与生产消费的过程。Pravega 的定位是企业级的分布式流存储产品,不但满足流的属性还支持数据存储的持久化、安全可靠、隔离等属性。

视角的不同带来了设计架构上的差异性,由于消息系统无需处理长时间的数据存储,因此都会需要额外的任务和组件进行数据的搬运来完成持久化。而定位流存储的 Pravega 则在主存储中直接解决了数据 retention 问题。Pravega 的数据存储的核心引擎称之为 segment store,直接对接 HDFS 或 S3 的分布式存储组件用以进行长期、持久化的存储。依托底层存储组件的成熟架构与可扩展能力,Pravega 在存储端也就自然具备了大规模存储和可扩展的特性。

img

另一个架构上的差异则来自于客户端的小写优化。在典型的 IoT 场景中,边缘端的写入端数量通常比较大,而每次写入的数据量可能并不多。Pravega 的设计也充分考虑了这一场景,采用了在客户端和 segment store 两次 batching 的优化,将来自多个客户端的小写合并成对于底层磁盘友好的小批量写入,从而在保证低延时的基础上,大幅提升了高并发写入的性能。

这一设计也相应地对性能产生了影响。Pravega 测试了在同样的高并发负载下,与 Kafka 和 Pulsar 的性能对比,实验结果如下图所示。在我们的测试中使用高度并行的负载,每个 Stream/Topic 最多有 100 个写入端和 5000 个 segment。Pravega 可以在所有情况下都维持 250MBps 的速率,这也是测试云环境中磁盘的写入最大速率。而左右两图中可以看到,Kafka 和 Pulsar 在增加分区和生产者数量时,性能都会显著降低,在大规模的并发度下先后出现性能的降级。

img

这一实验过程和环境也完整地公开在这一篇博客之中,实验的代码也完全开源并贡献到了 openmessaging-benchmark 之中,有兴趣的同学可以尝试重现。

三、Pravega 流存储数据演示

从存储角度,我们已经介绍了 Pravega 对流存储的变化和架构特点。接下来,我们讲讲如何消费流存储数据。Pravega 如何跟 Flink 配合,构建端到端的大数据流水处理线。

img

我们提出的大数据架构,以 Apache Flink 作为计算引擎,通过统一的模型以及 API 来统一批处理和流处理;以 Pravega 作为存储引擎,为流式数据存储提供统一的抽象,使得对历史和实时数据有一致的访问方式。两者统一形成了从存储到计算的闭环,能够同时应对高吞吐的历史数据和低延时的实时数据。

img

更进一步,对于边缘计算的场景,Pravega 也兼容常用的消息通信协议,实现了相应的数据接收器,可以作为大数据流水处理的管道,从管道收集数据,把数据给到下游计算引擎应用程序,完成从边缘到数据中心的数据处理流水线。通过这样的方式,企业级用户可以很容易地搭建自己的大数据处理流水线。这也是我们开发流存储产品的目的。

img

我们认为在云原生时代,动态伸缩的功能是非常重要的,这样不但可以减轻应用程序开发的难度,而且可以更高效地利用底层的硬件资源。之前介绍了 Pravega 的动态伸缩,Flink 的新版本也支持了动态伸缩功能。那么我们将两个独立的伸缩联系起来,把动态伸缩功能推到整条流水线呢?

img

我们跟社区一起合作,完成了完整的伸缩链路,把端到端的 Auto-scaling 功能带给所有的客户。上图是端到端 Auto-scaling 概念的示意图。当数据注入变大时,Pravega 能够发生自动伸缩,分配更多的 segment 处理存储端的压力。而通过 metrics 以及 Kubernetes HPA 功能,Flink 也可以相应地分配更多并行计算的节点给到相应的计算任务中去,从而应对数据流量的变化。这是新一代对企业级用户非常关键的云原生能力。

四、展望未来

img

在 Flink Forward Asia 2021 大会上,Pravega 社区也跟 Flink 一起,共同发布了数据库同步方案的白皮书。Pravega 作为 CNCF 的项目也在不断发展,同时也会更坚定地拥抱开源。

img

随着技术的不断发展,越来越多的流式引擎和数据库引擎开始朝着融合的方向发展。展望未来,存储和计算,流和表的界限逐渐模糊。Pravega 批流一体的存储设计也暗合了 Flink 未来很重要的一个发展方向。Pravega 也会积极与包括 Flink 在内的数据湖仓相关的开源社区沟通合作,为企业级用户构建更友好、更强大的新一代数据流水线。


FFA 2021 直播回放 & 演讲 PDF 下载

更多 Flink 相关技术问题,可扫码加入社区钉钉交流群
第一时间获取最新技术文章和社区动态,请关注公众号~

image.png

活动推荐

阿里云基于 Apache Flink 构建的企业级产品-实时计算Flink版现开启活动:
99 元试用 实时计算Flink版(包年包月、10CU)即有机会获得 Flink 独家定制卫衣;另包 3 个月及以上还有 85 折优惠!
了解活动详情:https://www.aliyun.com/product/bigdata/sc

image.png

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
4天前
|
存储 大数据 数据处理
PHP 与大数据:构建高效数据处理系统
传统的数据处理系统往往难以应对大规模数据的处理需求,而PHP作为一种常用的服务器端脚本语言,在数据处理方面也有其独特的优势。本文将探讨如何利用PHP构建高效的大数据处理系统,结合实际案例分析其应用场景及优势所在。
24 2
|
2天前
|
存储 算法 关系型数据库
实时计算 Flink版产品使用合集之在Flink Stream API中,可以在任务启动时初始化一些静态的参数并将其存储在内存中吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
17 4
|
4天前
|
存储 关系型数据库 MySQL
Mysql 存储大数据量问题
Mysql 存储大数据量问题
104 1
|
3天前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之在进行数据同步作业时,有什么方法可以用于检查源端和目标端的数据一致性
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
11 0
|
4天前
|
存储 分布式计算 大数据
MaxCompute产品使用合集之大数据计算MaxCompute中需要存储16进制的数据,我该怎么操作
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
4天前
|
SQL 大数据 数据处理
[AIGC大数据基础] Flink: 大数据流处理的未来
[AIGC大数据基础] Flink: 大数据流处理的未来
|
4天前
|
SQL 分布式计算 Hadoop
利用Hive与Hadoop构建大数据仓库:从零到一
【4月更文挑战第7天】本文介绍了如何使用Apache Hive与Hadoop构建大数据仓库。Hadoop的HDFS和YARN提供分布式存储和资源管理,而Hive作为基于Hadoop的数据仓库系统,通过HiveQL简化大数据查询。构建过程包括设置Hadoop集群、安装配置Hive、数据导入与管理、查询分析以及ETL与调度。大数据仓库的应用场景包括海量数据存储、离线分析、数据服务化和数据湖构建,为企业决策和创新提供支持。
95 1
|
4天前
|
SQL 存储 监控
构建端到端的开源现代数据平台
构建端到端的开源现代数据平台
64 4
|
4天前
|
人工智能 DataWorks 数据可视化
心动基于阿里云DataWorks构建游戏行业通用大数据模型
心动游戏在阿里云上构建云原生大数据平台,基于DataWorks构建行业通用大数据模型,如玩家、产品、SDK、事件、发行等,满足各种不同的分析型应用的要求,如AI场景、风控场景、数据分析场景等。
348 1
|
4天前
|
SQL 大数据 API
大数据技术之Flink---day01概述、快速上手
大数据技术之Flink---day01概述、快速上手

热门文章

最新文章

  • 1
    实时计算 Flink版操作报错合集之遇到报错:"An OperatorEvent from an OperatorCoordinator to a task was lost. Triggering task failover to ensure consistency." ,该怎么办
    9
  • 2
    实时计算 Flink版操作报错合集之在连接Oracle 19c时报错如何解决
    8
  • 3
    实时计算 Flink版操作报错合集之写入 Kafka 报错 "Failed to send data to Kafka: Failed to allocate memory within the configured max blocking time 60000 ms",该怎么解决
    10
  • 4
    实时计算 Flink版操作报错合集之报错显示“Unsupported SQL query! sqlUpdate() only accepts SQL statements of type INSERT and DELETE"是什么意思
    9
  • 5
    实时计算 Flink版操作报错合集之报错io.debezium.DebeziumException: The db history topic or its content is fully or partially missing. Please check database history topic configuration and re-execute the snapshot. 是什么原因
    10
  • 6
    实时计算 Flink版操作报错合集之本地打成jar包,运行报错,idea运行不报错,是什么导致的
    8
  • 7
    实时计算 Flink版操作报错合集之使用 Event Time Temporal Join 关联多个 HBase 后,Kafka 数据的某个字段变为 null 是什么原因导致的
    9
  • 8
    实时计算 Flink版操作报错合集之使用 Event Time Temporal Join 关联多个 HBase 后,Kafka 数据的某个字段变为 null 是什么原因导致的
    10
  • 9
    实时计算 Flink版操作报错合集之查询sqlserver ,全量阶段出现报错如何解决
    11
  • 10
    实时计算 Flink版操作报错合集之执行Flink job,报错“Could not execute SQL statement. Reason:org.apache.flink.table.api.ValidationException: One or more required options are missing”,该怎么办
    8
  • 相关产品

  • 实时计算 Flink版
  • http://www.vxiaotou.com