中间件名称 | 单机吞吐量 | 客户端语言 | 文档完备性 | 社区活跃度 | 商业支持 | 消息丢失 | 所属公司 |
---|---|---|---|---|---|---|---|
ActiveMQ | 万级 | 支持多语言,java优先 | 高 | 高 | 无 | 低 | Apache |
RabbitMQ | 万级 | 多语言 | 高 | 高 | 无 | 低 | Mozilla Public License |
RocketMQ | 十万级 | 只支持java | 高 | 中 | Alibaba | 理论上不会 | 阿里开发,已捐献给Apache |
Kafka | 十万级 | 多语言,java优先 | 高 | 高 | 无 | 理论上不会 | Apache |
RocketMQ:
RocketMQ架构主要分为四部分:
Name Server:Name Server的作用就是记录其他节点的信息,它是无状态的(Topic等信息不会持久存储,而是每次由其他节点上报给它,Name Server关闭后将清除所有信息)。
Broker:Broker就是实际上做消息发送的,是一个集群部署上的概念,也可以理解为对应的物理机器。
Consumer:Consumer字面上的意思就是消费者,是消息的接收者,Consumer可以订阅一个或者多个Topic。
Producer:Producer是消息的生产者,它将消息发往对应的消息队列。
心跳机制:
所有的Broker都会和Name Server心跳请求,Broker每隔30秒会向所有的Name Server发送一个心跳包,心跳包中包含了自身所包含的Topic信息;如果在两分钟内都没有接收到某个Broker的心跳包,则认为该Broker已下线了,Name Server会调整Topic跟Broker的关系,但是!!!NameServer不会主动通知Consumer和Producer有Broker宕机了。
Consumer跟Broker是长连接,它会每隔30秒发送心跳信息给Broker,而Broker每隔10秒会扫描一次online的Consumer,如果两分钟内没有收到某个Consumer的心跳包,那么就会断开与该Consumer的连接,并通知该消费组的其他实例,触发该消费者集群的负载均衡。
Producer每隔30秒从Name Server获取Topic和Broker的映射关系,并更新到本地内存中;再跟Topic所涉及的所有Broker建立长连接,并且每隔30秒发送一遍心跳包,此时Broker端也会每隔十秒钟扫描一次当前注册的所有Producer,如果两分钟内没有收到某个Producer的心跳包,那么长连接断开。
.