RocketMQ 是什么
RocketMQ 是一款分布式、队列模型的消息中间件-能保证消息的顺序消费、消息拉取模式、高效的订阅者水平扩展能力、实时消息订阅机制、亿级消息堆积能力。具有高性能、高可靠、高实时、分布式特点。 | |
Producer、 Consumer、队列都可以分布式 | |
Producer 向一些队列轮流发送消息,队列集合称为 Topic, Consumer 如果做广播消费,则一个 consumer实例消费这个 Topic 对应的所有队列,如果做集群消费,则多个 Consumer 实例平均消费这个 topic 对应的队列集合 | |
能够保证严格的消息顺序、提供丰富的消息拉取模式、高效的订阅者水平扩展能力 | |
实时的消息订阅机制、亿级消息堆积能力、较少的依赖 | |
RocketMq性能比较高的原因 | 1.通信层面:netty高效的NIO框架 2.RocketMQ 大量使用多线程、异步 3.采用零拷贝技术优化MMAP ( 中间节约一次拷贝,性能提高50%,磁盘--内核态内存--网卡驱动---网卡;省去了内核态到用户态拷贝) 4.采用文件存储,顺序读写 5.锁优化。(CAS 无锁化机制) 6.存储设计:读写分离 |
消息拉取长轮询机制分析 | RocketMQ未真正实现消息推模式,而是消费者主动向消息服务器拉取消息,RocketMQ推模式是循环向消息服务端发起消息拉取请求,如果消息消费者向RocketMQ拉取消息时,消息未到达消费队列时,如果不启用长轮询机制,则会在服务端等待shortPollingTimeMills时间后(挂起)再去判断消息是否已经到达指定消息队列,如果消息仍未到达则提示拉取消息客户端PULL—NOT—FOUND(消息不存在);如果开启长轮询模式,RocketMQ一方面会每隔5s轮询检查一次消息是否可达,同时一有消息达到后立马通知挂起线程再次验证消息是否是自己感兴趣的消息,如果是则从CommitLog文件中提取消息返回给消息拉取客户端,否则直到挂起超时,超时时间由消息拉取方在消息拉取是封装在请求参数中,PUSH模式为15s,PULL模式通过DefaultMQPullConsumer#setBrokerSuspendMaxTimeMillis设置。RocketMQ通过在Broker客户端配置longPollingEnable为true来开启长轮询模式。 |
RocketMQ 物理部署结构 | |
RocketMQ 网络部署特点 | NameServer 是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。 |
Broker 部署相对复杂, Broker 分为 Master 与 Slave,一个 Master 可以对 |