说说对rocketmq namespace和Broker的理解?

1 个回答

  • hello
    用眼睛是看不到事物的本质的,只有心灵才能够洞察一切。
    Namespace是RocketMQ的路由中心.Namespace存在的存在是为了负责存储所有的Broker和Topic信息,从而生产者和消费者可以通过心跳的方式来注册以及更新对应的路由信息. 实际上Namespace的作用与微服务架构、分布式服务SOA架构体系中的注册中心很类似.又例如像旧版的Kafka, 会将集群的信息注册到Zookeeper.但是RocketMQ并没有使用第三方的工具,而是自研了Namespace作为一个路由的服务.同时,Namespace同样可以集群,但是它们之间都是无状态节点,并没有Master/Slave这样的概念. CommitLog,消息存储文件,所有主题的消息都存储在 CommitLog 文件中。 我们的业务系统向 RocketMQ 发送一条消息,不管在中间经历了多么复杂的流程,最终这条消息会被持久化到CommitLog文件。 我们知道,一台Broker服务器只有一个CommitLog文件(组),RocketMQ会将所有主题的消息存储在同一个文件中,这个文件中就存储着一条条Message,每条Message都会按照顺序写入。 用磁盘文件来保存消息,但是在向磁盘读写数据时,如何保证写入速度的呢?rocketMQ是怎么做到的呢? 磁盘顺序读写 零拷贝机制 ①:磁盘顺序读写         磁盘如果使用得当,磁盘的速度完全可以匹配上网络 的数据传输速度。目前的高性能磁盘,顺序写速度可以达到600MB/s, 超过了一般网卡的传输速度。但是磁盘随机写的速度只有大概100KB/s,和顺序写的性能相差6000倍!         因为有如此巨大的速度差别,好的消息队列系统会比普通的消息队列系统速度快多个数量级。RocketMQ的消息用顺序写,保证了消息存储的速度。 ②:零拷贝机制 Linux操作系统分为【用户态】和【内核态】,文件操作、网络操作需要涉及这两种形态的切换,免不了进行数据复制。RocketMQ充分利用“零拷贝”技术,提高消息存盘和网络发送的速度。零拷贝并不是不进行数据拷贝,而是减少数据拷贝的次数!
    发布于 2022-03-01 19:28 •IP属地 甘肃
    举报
    评论
    收藏