Pravega一大特点是解决流批统一问题,那么Flink是怎么实现流批统一的呢?
Flink怎么实现流批统一?
提供三层API
可以用不同级别的抽象来开发流/批统一
通过Table API和SQL来实现流批统一,核心是流批共用一套引擎.
什么是Pravega?
首先我们来探讨,为什么需要Pravega?
用来实现流批统一的分布式流存储框架.
Pravega
设计宗旨是成为流的实时存储解决方案.应用程序把数据持久化存储到Pravega中,然后Pravega的Stream可以有无限制的数量并且持久化存储任意长的时间.
使用同样的Reader API提供尾读(tail read)和(catch-up read),能够有效满足两种处理方式的统一.
从而最终实现由事件驱动,连续的而且有状态的数据处理的流式存储-计算模式
流式存储的要求
现有存储引擎无法同时满足流和批数据读取的请求
企业级流存储引擎实现难度主要体现在:
- 要把数据视为连续和无限的
- 能够自动弹性伸缩数据采集,存储和处理能力,与负载保持一致,持续快速交付结果
- 即使在延迟到达或者乱序数据情况下,也能连续交付准确的处理结果
数据视为连续和无限
- kafka采用添加到文件末尾并且追踪其内容的方式模拟连续和无限的数据流
- 受限于本地文件系统的文件描述符以及磁盘容量
- 对于数据可靠性,Kafka使用同步副本(in-sync replica)方法进行
Pravega怎么做?
- Pravega的Stream是一个命名的,持久的,append-only并且无限的Byte 序列
- 使用低延迟追加尾写的尾读(tail read/write)
- 具有来自序列较旧部分的高吞吐追赶读(catch-up read)
基于负载的自动弹性伸缩特性
- 许多写客户端同时追加写不相交的数据子集
1.写入数据