重磅!Flink 完美搭档:开源分布式流存储 Pravega
大数据架构变迁
Lambda 架构之痛
-
两条流水线处理的延迟相差较大,无法同时结合两条流水线进行迅速的聚合操作,同时结合历史数据和实时数据的处理性能低下。 -
数据存储成本大。而在上图的架构中,相同的数据会在多个存储组件中都存在一份或多份拷贝,数据的冗余无疑会大大增加企业客户的成本。并且开源存储的数据容错和持久化可靠性一直也是值得商榷的地方,对于数据安全敏感的企业用户来说,需要严格保证数据的不丢失。 -
重复开发。同样的处理流程被两条流水线进行了两次,相同的数据仅仅因为处理时间不同而要在不同的框架内分别计算一次,无疑会增加数据开发者重复开发的负担。
流式存储的特点
-
对于来自序列旧部分的历史数据,需要提供高吞吐的读性能,即 catch-up read -
对于来自序列新部分的实时数据,需要提供低延迟的 append-only 尾写 tailing write 以及尾读 tailing read
重构的流式存储架构
重构的大数据架构
Pravega 简介
Pravega 基本概念
-
Stream
-
Stream Segments
-
Event
-
Routing Key
-
Reader Group
http://pravega.io/docs/latest/pravega-concepts
Pravega 系统架构
-
Tier 1 存储
-
Long-term 存储
Pravega 进阶特性
读写分离
弹性伸缩
-
数据流在 t0 时刻写入 Pravega,根据路由键数据会路由到 Segment0 和Segment1 中,如果数据写入速度保持恒定不变,那么 Segemnt 数量不会发生变化。 -
在 t1 时刻系统感知到 segment1 数据写入速率加快,于是将其划分为两个部分:Segment2 和 Segment3。这时候 Segment1 会进入 Sealed 状态,不再接受写入数据,数据会根据路由键分别重定向到 Segment2 和 Segment3. -
与 Scale-Up 操作相对应,系统也可以根据数据写入速度变慢后提供 Scale-Down 操作。如在 t3 时刻系统 Segment2 和 Segment5 写入流量减少,因此合并成新的 Segment6。
端到端的弹性伸缩
事务性写入
Pravega vs. Kafka
Pravega Flink Connector
-
对 Reader 和 Writer 都提供了 Exactly-once 语义保证,确保整条流水线端到端的 Exactly-Once -
与 Flink 的 checkpoints 和 savepoints 机制的无缝耦合 -
支持高吞吐低延迟的并发读写 -
Table API 来统一对 Pravega Sream 的流批统一处理
车联网使用场景
-
需要对车况路况数据做实时的处理以及时对路线规划做出微观的预测和规划 -
需要对较长期行驶数据运行机器学习算法来做路线的宏观预测和规划,这属于批处理 -
同时需要结合实时处理和批处理,利用历史数据生成的机器学习模型和实时数据反馈来优化检测结果
-
如何保证高效地端到端处理速度 -
如何尽可能减少机器学习模型的训练时间 -
如何尽可能降低存储数据的消耗与成本
解决方案比较
-
Pravega 作为抽象的存储接口,数据在 Pravega 层就实现了一个数据湖:批处理,实时处理和全文搜索都只需要从 Pravega 中获取数据。数据只在 Pravega 存储一份,而不需要像第一种方案中数据冗余地存储在 Kafka,ElasticSearch 和 Long Term Storage 中,这可以极大减少了企业用户数据存储的成本。 -
Pravega 能够提供自动的 Tier Down,无需引入 Flume 等组件来进行额外的 ETL 开发。 -
组件得到精简,从原来的 Kafka+Flume+HDFS+ElasticSearch+Kibana+Spark+SparkStreaming 精简到 Pravega+Flink+Kibana+HDFS ,减轻运维人员的运维压力。 -
Flink 能够提供流批处理统一的功能,无需为相同的数据提供两套独立的处理代码。
总 结
欢迎加入中台|数仓技术交流群。戳:!
(备注:行业-职位-城市)
Q: 关于数据仓库,你还想了解什么?
欢迎大家扫描下方二维码订阅「数据仓库与Python大数据」内容并推荐给更多数据方向的朋友,希望有更多机会和大家交流。
更多精彩,请戳"阅读原文"到"数仓之路"查看
!关注不迷路~ 各种福利、资源定期分享!