RocketMQ内部知识体系

RocketMQ,阿里开源,社区活跃度高,现在很多企业都在用,我们今天来聊一下它的内部机制,以帮助我们更灵活的使用MQ。

RocketMQ内部结构:

RocketMQ内部知识体系_第1张图片

  • Name Server:命名服务,可以理解为消息队列的协调服务,broker向它注册路由信息,client从它获取路由信息,类似zk,broker和每个nameserver建立长连接。

  • Broker:mq的核心,提供消息的接收、存储和拉取等功能,为保证高可用,broker分master和slave,master宕机,消费者会从slave获取消息,一个master可对应多个slave,master与slave定义相同的brokerName,通过brokerId区分,brokerId=0表示master,其他表示slave。

    每个broker与Name Server所有节点建立长连接,每30s注册topic到name server上,name server每10s扫描broker连接,如果两分钟后没收到心跳,则name server与broker断开连接。

  • Producer:生产者,与Name Server建立连接,每30s从Name Server获取topic路由信息,并向提供topic服务的broker master/slave建立连接,每30s向关联的broker发送心跳,broker每10s扫描存活连接,broker没有收到心跳,就会关闭与producer的连接。

  • Consumer:消费者,与Name Server建立连接,定时从Name Server获取topic路由信息,并向提供topic服务的broker master/slave建立连接,定时向master/slave发心跳。consumer可以从master/slave订阅消息,订阅规则由broker配置决定。

    consumer每隔30s从name server获取topic最新队列信息,意味着broker如果不可用,consumer30s才能感知。

    consumer每30s发送心跳给broker的master/slave,broker每30s扫描存活的连接,若两分钟内没有连接,则关闭连接,并向consumer group的所有consumer发出通知,group内consumer重新分配队列,继续消费。

    consumer得知master宕机,会去slave请求,slave不能100%同步消息,会有少量消息丢失,一旦master重启,未同步的消息会被最终消费掉。

  • 发送和接收消息前要先创建topic,用来区分不同类型的消息,一个topic可以设置多个queue。

未完,

你可能感兴趣的:(【MQ】)