首先,对于之前提到的 messaging 系统+文件系统,数据需要用 stream 接口进入saging 系统,但是可能以文件接口方式读出,在接口抽象上并不一致。我们需要的流存储抽象,不管是注入端还是读取端,都是 stream 接口,给应用程序统一的抽象。
其次,流存储抽象需要提供动态扩展功能。在应用程序看来,它只需要往一个 stream 里写入数据。至于这个 stream 抽象怎么基于注入量进行动态扩展,或者在多路并发下怎么保证 per-key 的 order ,由抽象层内部解决,对应用程序完全透明。
第三,在所有情况下,哪怕是动态扩展过程中,从流存储抽象层读出的数据,具有perkey 的 order 保证。
第四,流存储抽象能够在逻辑上提供基于时间的全局一致的位置点,我们称之为 StreamCut 。应用程序依赖于此能够回放到任意一个位置点,回放或重试业务逻辑。
计算引擎例如 Flink 能够利用流存储抽象提供的 StreamCut ,基于流存储系统处理的checkpointing 功能,实现端到端的 exactly-once 保证。这在文件抽象接口上,是很难做到的。
除此之外,还有很多其他针对 streaming 典型场景的的好处,例如原子读写,低延时的tail read、事务支持、历史数据 truncation 等等。
以上内容摘自《开源大数据前瞻与应用实战》电子书,点击https://developer.aliyun.com/topic/download?id=1153可下载完成版
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。