rocketmq知识脑图
2020-06-22 11:46:01 5 举报
AI智能生成
rocketmq面试脑图
作者其他创作
大纲/内容
重复消费产生原因
生产者生产消息,mq确认消息未送达
消费这消费消息,消费成功消息费送达
消费者挂掉,reblance
消息清理
10s 扫描, cleanResourceInterval
物理磁盘 85%, 不在接收消息,返回失败,
清理 凌晨四点 deleteWhen 或到达磁盘清理阈值
文件保留72h
nameserver
无状态
消费者
拉区broker的消息到 本地队列 [链接](https://blog.csdn.net/iie_libi/article/details/54236502), 默认1000, pullThresholdForQueue
pullInterval 设置拉去时间间隔
消费进度, 默认为5秒, 每隔一段时间将各个队列的消费进度存储到对应的broker上
broker 和 nameserver
broker 与所有的nameserver 长连接
borker 心跳, 30s, 心跳包包含topic配置信息。nameserver 10s 扫描存活的broker,2分钟无心跳,断开连接
断开 broker挂掉, 心跳超时 nameserver主动断开连接, 跟新topic 与 broker的对应关系, 不会通知消费者
生产者和nameserver
单个生产者和 一个nameserver保持长连接, 果该nameserver挂掉,自动连接下一个直到有可用连接为止。
轮询时间 30s, 如果broker挂点, 生产者需要30s才能知道, 期间 消息发送失败; 该时间由DefaultMQProducer的pollNameServerInteval参数决定,可手动配置。
生产者和broker
单个生产者 和 所有关联的broker保持长连接,和 NS没有心跳
- 心跳 30s heartbeatBrokerInterval; broker每隔10秒钟(此时间无法更改),扫描所有还存活的连接,若某个连接2分钟内(当前时间与最后更新时间差值超过2分钟,此时间无法更改)没有发送心跳数据,则关闭连接。
消费者和nameserver
单个消费者和一台nameserver保持长连接,定时查询topic配置信息,如果该nameserver挂掉,消费者会自动连接下一个nameserver,直到有可用连接为止,并能自动重连。
默认情况下,消费者每隔30秒从nameserver获取所有topic的最新队列情况,这意味着某个broker如果宕机,客户端最多要30秒才能感知。该时间由DefaultMQPushConsumer的pollNameServerInteval参数决定,可手动配置。
消费者和broker
单个消费者和该消费者关联的所有broker保持长连接。
心跳默认情况下,消费者每隔30秒向所有broker发送心跳,该时间由DefaultMQPushConsumer的heartbeatBrokerInterval参数决定,可手动配置。broker每隔10秒钟(此时间无法更改),扫描所有还存活的连接,若某个连接2分钟内(当前时间与最后更新时间差值超过2分钟,此时间无法更改)没有发送心跳数据,则关闭连接,并向该消费者分组的所有消费者发出通知,分组内消费者重新分配队列继续消费
消费者挂掉;心跳超时导致broker主动关闭连接; 旦连接断开,broker会立即感知到,并向该消费者分组的所有消费者发出通知,分组内消费者重新分配队列继续消费
消息分类
同步消息: send
异步消息: SendCallback
顺序消息: sendMessageOrderly, MessageQueenSelector
单项消息: sendOneWAY
延时消息:message.setDelayLevel()
批量消息:<4M
事务消息: 半消息; 提交,回滚,中间态;回查15次,transactionCheckMax
Topic 和 tag
Topic
通过不同topic 对不同业务进行分类
Tag
区分某一个Topic
消息过滤
tag: tag1||tag2, *
sql: putUserProperty,MessageSelector.bySql("i > 5")
ROcketmq Console
消费方式
集群模式(默认),多groupid通过集群订阅模式,实现广播消费;
多个group订阅同一个topic, 如果同一个group有多个消费者,则同group构成集群消费
多个group订阅同一个topic, 如果同一个group有多个消费者,则同group构成集群消费
广播(MessageModel.BROADCASTING)
消息存储
存储介质
文件系统:高性能
顺序写, 零拷贝,跳过用户态
存储结构: commit.log(原始消息).
consumerquee(消费队列索引),
index(其他数据过滤索引,时间区间,key等)
consumerquee(消费队列索引),
index(其他数据过滤索引,时间区间,key等)
刷盘机制
同步刷盘: 消息刷盘成功后返回生产者
异步刷盘: 消息内存中返回producer
Mysql:高可靠
高可用
双主双从:主负责写, 主从负责读
nameserver: 无状态
broker: 上报状态
主从复制
同步复制
异步复制
推荐使用:异步刷盘,主从同步复制
负载均衡
producer
topic 轮训,topic存储在多个message queen中,message quee 在不同的broker中
consumer
集群模式(消费者均摊消息) 分摊每一条quee
广播模式: 不会负载均衡
消息重试
顺序消息的重试: 自动触发,应避免阻塞
无序消息(集群模式): 16次, 4h16分钟, 死信队列, 设置重试次数,同一group 设置一个,全部都生效
死信队列
最大重试次数,依然失败, %DLQ%
有效期也是3天
面向group id, 和topic无关

收藏

收藏
0 条评论
下一页