37|云原生:MQ的分层存储架构都有哪些实现方案?
什么是分层存储
- 深入了解
- 翻译
- 解释
- 总结
消息队列(MQ)的分层存储架构是一种重要的成本优化手段,通过将数据存储到远程位置,降低了本地硬盘的负载压力,从而降低了存储成本。本文介绍了分层存储的实现方案,包括远程文件系统的选择、生产性能优化、消费性能优化等技术要点。在消费性能优化方面,文章探讨了远程数据的读取方式,以及资源隔离、限流、集群回滚等操作。此外,对业界主流消息队列的架构分析,重点分析了Kafka和RocketMQ的分层存储实现。RocketMQ采用准实时的消息上传方式,而Kafka则采用异步上传方式。分层存储是一种可选项,而不是必选项,是一个用户可控开关的特性。从技术实现上看,Kafka的分层存储核心思路是将底层分区维度的分段数据上传到远端存储,在消费时再从远端读取数据返回给客户端。社区版本的Kafka的分层存储目前还在开发阶段,还不能在业务中使用。RocketMQ需要将开启分层存储的Topic的数据从Broker维度的CommitLog中分离出来,重新构建Topic维度的CommitLog,然后将新的CommitLog上传到远程。总的来说,分层存储的核心作用是降低成本,但性能必然会有所降低。因此在一些对性能不敏感的场景,分层存储能起到节省成本的作用。而在性能敏感的场景,不建议开启分层存储。分层存储的基础是选择合适的远程文件系统,云厂商提供的对象存储服务是一个比较优的选择。生产和消费的性能优化是分层存储的核心,集群资源的隔离性以及回滚方案设计,能够极大地提高消息队列集群的稳定性。业界主流消息队列的分层思路,主要有实时写入和异步上传两种方式,选择主要和消息队列集群的特性相关。
《深入拆解消息队列 47 讲》,新⼈⾸单¥59
全部留言(2)
- 最新
- 精选
- Geek_ec80d2bundle除了用于负载均衡外,引入bundle可以大大降低元数据的数量,zk里面只需要保存bundle与broker的对应关系即可,不需要保存topic与broker的对应关系,这也是为什么pulsar可以实现百万topic管理的原因。
作者回复: “pulsar可以实现百万topic管理”从实践上来看是值的商榷的。这一点就不展开在这里讨论,有兴趣的话,大佬,我们加群细聊~。
2023-09-27归属地:北京 - shan分层存储总结 分层存储指的是冷热数据分开存储,在数据写入的时候将数据写入本地,然后通过一定策略将一部分数据上传到远程分布式文件系统中,在消费的时候,再从远程拉取数据到本地,以此降低本地磁盘的负载压力和存储成本。 不过远程存储存在以下问题: (1)远程存储性能比本地硬盘低; (2)引入第三方存储,会影响系统的稳定性; 至于是否需要分层存储,一般结合业务场景,如果是大流量、对稳定性要求不高的场景中,分层存储是一个很重要的优化手段,如果对可靠性、稳定性要求较高的场景,则不适合分层存储。 分层存储需要关注的几个地方 1. 远程文件系统选择 各个云厂商提供的对象存储服务比较适合分层存储,稳定性和成本都比较有优势,如果自建服务,一般选择HDFS。 2. 生产性能优化 如果异步写入,对于生产端一般影响不大。如果是同步写入,性能会受到影响。 3. 消费者 消费者主要的问题在于,如果消费的数据不在本地,需要从远程获取,一般有以下两种方案: (1)远程文件先下载到本地(可以设计一个预读算法,将数据提前下载到本地),消费时从本地读取; (2)数据在本地就在本地读取,在远程就直接流式从远程读取; 4. 隔离性 隔离性指的是避免远程上传下载文件过度挤占资源,影响正常消息的生产与消费。有以下几点可以参考: (1)CPU进行绑核操作,比如将上传下载文件的线程绑定到一个固定的CPU上; (2)对于内存方面,可以通过堆外内存、DirectID等手段控制,避免占用过多内存; (3)对于网卡方面,可以控制同一时间上传上线文件的速度,避免网卡带宽资源用光; (4)硬盘IO方面,可以通过扩容存储空间解决; 5. 回滚 回滚指的是当远程存储出现问题时,需要将集群切回到非分层的状态,对于消息有以下两种处理方案: (1)新增数据不再上传到远程存储,保存在本地; (2)消费的数据在远程存储时,给出提示,保证只允许消费在本地的数据;2023-09-25归属地:河南