
MQ
文章平均质量分 86
消息中间件
Minor王智
好好学习,天天向上!
展开
-
Kafka设计原理
对于Leader新写入的消息,consumer不能立即消费,Leader会等待该消息被所有的ISR节点同步后更新HW,此时消息才能够被消费者消费,这样就保证了如果Leader所在的Broker节点挂了,该消息仍然可以从新选举的Leader中获取。当Kafka集群启动的时候,会自动选举一个Broker作为控制器,选举的过程就是让每一个Broker去zookeeper中创建一个/controller的临时节点,创建成功的Broker就成为控制器。kafka定期清理topic里的消息,最后保留最新的数据。...原创 2022-07-31 17:02:18 · 488 阅读 · 0 评论 -
RocketMQ的NameServer原理
RocketMQ的路由注册是通过Broker和NameServer的心跳功能实现的,Broker启动时向集群中所有的NameServer发送心跳请求,每隔30s向集群中所有NameServer发送心跳包,NameServer收到Broker的心跳包时会更新BrokerLiveTable中的时间戳信息,然后NameServer每隔10s扫描这个BrokerLiveTable,如果连续120s没有更新这个时间戳的Broker,NameServer就会移除该Broker的路由信息同时关闭Socket连接。...原创 2022-07-14 20:56:03 · 509 阅读 · 0 评论 -
RocketMQ的生产、消费高可用和Reblance、堆外内存等问题
例如,TopicA分布在2个Broker节点上,每一个Broker节点都有默认4个这个TopicA的队列,如果此时只有1个消费者,那么这个消费者就会分摊8个队列的任务,如果此时加入一个消费者,那么每一个消费者就会平均分配4个。当队列数量和消费者数量持平的时候,此时再加入消费者,是不会触发Reblance的,多出来的消费者没有任何任务负担。(这种方式的缺点是有可能重试会再一次失败,因为如果第一次失败了大部分情况是这个Broker有问题了,所以当第二次选择这个Broker的其他队列时,大概率也会失败。.....原创 2022-07-14 20:54:27 · 1594 阅读 · 0 评论 -
RocketMQ存储设计CommitLog和零拷贝等
RocketMQ操作CommitLog、ConsumeQueue是基于内存映射MMAP技术实现的,在Broker启动的时候就会加载这两个目录下的所有文件,所以不可能消息永久性的保存在服务器上。RocketMQ清除过期文件的方法是如果某个文件在一定间隔时间内没有被更新,则认为是过期的文件,可以被删除,默认每个文件的过期时间是72小时,可以配置。每个ConsumeQueue中存储的消息条目都不是全量数据,而是消息的一部分信息,包括消息在CommitLog中的偏移量、消息大小、消息Tag的哈希值。...原创 2022-07-14 20:50:40 · 726 阅读 · 0 评论 -
RocketMQ物理架构和消息
对于生产者而言,分组用来标识同一类消息的Producer,仅做标识使用,没有特别的意义,RocketMQ的生产者Group更多是在事务消息会用到(Broker回查,遇到Producer宕机可以选择Producer同一个组的生产者回查消息是否提交or回滚。管理消息的物理单元,一个Topic主题有若干个消息队列,如果一个Topic创建在不同的Broker上,则不同的Broker上都有若干个消息队列。组间共享,组内竞争。RocketMQ本身没有提供顺序消息的功能,但是可以借助一个方式来实现消息的顺序性。.....原创 2022-07-14 20:48:44 · 278 阅读 · 0 评论