标签:异步发送 not sele ble 主从 pack ima tag store
1、NameServer 协调者,类似zookeeper,基于内存完成
2、Broker 实例
3、Topic
4、tag topic里的标签
5、Message Queue topic里的队列
6、offset 标记消息在Message Queue里的位置,标记消费读取时自增长
Clustering
同一个 ConsumerGroup (GroupName相同)里的Consumer 只消费所订阅消息一部分内容。
Broadcasting
同一个 ConsumerGroup (GroupName相同)里的Consumer 只消费所订阅消息是全部内容。
三、生产消费
DefaultMQProducer
返回状态:FLUSH_DISK_TIMEOUT表示同步刷盘策略下规定时间内未完成刷盘 FLUSH_SLAVE_TIMEOUT表示主备模式下SYNC_MASTER方式规定时间内未完成主从同步 SLAVE_NOT_AVAILABLE表示主备模式下SYNC_MASTER方式没有找到Slave SEND_OK表示发送成功
延时消息:setDelayTimeLevel设置延迟时间
自定义消息发送规则:使用MessageQueueSelector类在覆写select方法中返回选中的MessageQueue
事务支持:两阶段提交协议 发送方向RocketMQ发送待确认消息-持久化后返回发送成功-将本地事务逻辑与发送确认消息包装在同一事务中并执行事务-RocketMQ收到确认消息后订阅方对消息可见并消费 发送方事务阶段异常则待确认消息作废 发送方提供给RocketMQ回查接口用于查询事务结果
同步发送: 需要等MQ返回相应
异步发送:无需MQ返回相应,需要实现SendCallback
消费者: (分push、pull模式)
interface MQPushConsumer:
DefaultMQPushConsumer:由系统控制读取操作,收到消息后自动调用传人的处理方法来处理
interface MQPullConsumer:
实现类 DefaultMQPullConsumer:读取操作中的大部分功能由使用者自主控制,使用者记录offset
1.功能
概览:各角色机器均定期发送数据至协调者 协调者根据消息请求码做相应处理,更新存储的对应信息 协调者彼此之间互相独立 无状态
2.结构
HashMap<String,List<QueueData>> topicQueueTable key为Topic名称 List长度代表Master Broker个数 QueueData存储Broker名称、读写queue数量、同步标识
HashMap<String,BrokerData> BrokerAddrTable key为Broker名称 BrokerData包含所属的Cluster名称、Master Broker地址和Slave Broker地址
HashMap<String,Set<String>> ClusterAddrTable key为Cluster名称 value为BrokerName集合
HashMap<String,BrokerLiveInfo> BrokerLiveTable key为BrokerAddr BrokerLiveInfo包括这台Broker机器的上次更新时间
HashMap<String,List<String>> filterServerTable key为BrokerAddr value为与这个Broker关联的多个FilterServer地址
3.Remoting模块
概览: 通信通过Remoting模块统一自定义消息格式RemotingCommand完成
4.协议格式
1.消息存储结构
物理存储文件CommitLog 消息的逻辑队列ConsumerQueue类似数据库的索引文件 每个Topic下的每个MessageQueue有一个对应的ConsumeQueue文件
2.高可用机制
在创建Topic时将Topic的多个MessageQueue创建在多个Broker组中(相同Broker名称 不同BrokerId的机器组成一个Broker组),当一个Broker组内的Master不可用时可向其他Broker组的Master发送消息
3.同步刷盘和异步刷盘
异步刷盘:写入到内存即返回写成功 当内存消息量累计到一定程度后,统一写入磁盘
同步刷盘:写入内存后通知刷盘线程刷盘,刷盘完成后刷盘线程唤醒等待的线程返回写成功的状态
4.同步复制和异步复制
同步复制:Master和Slave均写成功后返回成功状态
异步复制:Master写成功即返回成功状态
5.磁盘读取机制
顺序写,随机读,零拷贝
6.写入及复制机制
Master读和写,Slave只读,生产者写入Master,Master复制到Slave
顺序机制
1、完全顺序
需要把Topic的读写队列设置为1,Producer 和 Consumer 并发设置为1
2、部分顺序
1)生产者需要把消息发送到同一个Message Queue;
2)消费组需要不并发读一个Message Queue;
为什么不用Zookeeper
RocketMQ不需要Master选举等复杂功能
rocketMQ和kafka不同
1、偏向事务机制;
2、不支持Master选举,即不能Slave转Master
标签:异步发送 not sele ble 主从 pack ima tag store
原文地址:https://www.cnblogs.com/anhaogoon/p/12844853.html