当创建一个 stream 的时候,和其他可扩展系统不同,用户并不需要指定并发的个Pravega 内部,segment 是真正的数据存储单元。一个 stream 可以拥有一个或多个segment(s)。Pravega 通过动态调整 segment 的个数实现动态扩展。
所有写入 stream 的数据都被当作是一串 append only 的 bytes 最终写入 segment 中。可以是一行 log,可以是一张图片,通过 serializer/deserializer 决定语义,没有格式的限制,也没有必须是小文件的限制。
当 stream 拥有多个 segment 的时候,数据会并发写入这多个 segment 中。这多个segment 将 namespace 分成同等数量的 key space ,写入的数据可以通过绑定 routingkey,决定自己写入哪个 key space(segment)中。相同 routing key 的数据会被写入同一个 segment 中,获得 order 保证。比如,传感器产生的连续数据都可以使用传感器的设备号作为 routing key,以保证同一传感器产生的数据拥有相同的 routing key 而被写入同一个 segment ,以保证读取时的时序性。实际上,Pravega 的 transaction,exactly-once等特性正是基于此实现的。
以上内容摘自《开源大数据前瞻与应用实战》电子书,点击https://developer.aliyun.com/topic/download?id=1153可下载完成版
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。