范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

RocketMQ生产者如何发送消息

  创建Topic的时候为何要指定MessageQueue数量
  首先想要搞明白生产者的工作原理,那么就必须先明白一个概念,MessageQueue是什么?
  而要明白MessageQueue是什么,就必须把他跟Topic以及Broker综合起来看,才能搞明白。如果我们要使用RocketMQ,你先部署出来一套RocketMQ集群这个肯定是必须的,有了集群之后,就必须根据你的业务需求去创建一些Topic。
  像我们创建的这些Topic就可以在上面提到的rocketmq-console控制台去创建,在创建Topic的时候,需要指定一个很关键的参数,就是MessageQueue。
  简单来说,就是你要指定你和这个Topic对应了多少个队列,也就是多少个MessageQueue。
  那么这个MessageQueue是用来干嘛的?Topic、MessageQueue以及Broker之间的关系
  假设我们现在创建了一个Topic,指定了4个MessageQueue,那么这个Topic的数据在Broker集群中是如何分布的?
  每个Topic的数据都是分布式存储在多个Broker中的,那么我们如何决定这个topic的哪些数据放在这个broker上,哪些数据放在那个broker上呢?
  所以RocketMQ引入了MessageQueue的概念,本质上就是一个数据分片的机制。在这个机制中,假设Topic有1万条数据,然后Topic有4个MessageQueue,那么大致可以认为会在每个MessageQueue中放入2500条数据。
  当然,这不是绝对的,有可能有MessageQueue得到数据多,有的数据少,这个要根据你的消息写入MessageQueue的策略来定。
  我们可以先假定每个MessageQueue中会平均分配Topic的数据吧,那么我们有4个MessageQueue平均分配了Topic的数据,这些MessageQueue放在哪里?
  当然是放在Broker上了,也就是说很可能就是2个broker上,每个broker放两个MessageQueue。
  所以其实MessageQueue就是RocketMQ中非常关键的一个数据分片机制,他通过MessageQueue将一个Topic的数据拆分为了很多个数据分片,然后在每个Broker机器上都存储一些MessageQueue。
  通过这个方法,就可以实现Topic数据的分布式存储。 生产者发送消息的时候写入哪个MessageQueue
  接着要思考一个问题,就是生产者在发送消息的时候,会写入哪个MessageQueue中?
  要解决这个问题,大家首先要记得一个重要的点,生产者会跟NameServer进行通信获取Topic的路由数据。所以生产者从NameServer中就会知道,一个Topic有几个MessageQueue,哪些MessageQueue在哪台Broker机器上,哪些MessageQueue在另外一台Broker机器上。
  现在我们暂时先认为生产者会均匀的把消息写入各个MessageQueue中,就是比如这个生产者发送出去20条数据,那么4个MessageQueue就是每个都会写入5条数据。
  通过这个方法,就可以让生产者把写入请求分散给多个broker,可以让每个broker都均匀分摊到一定的写入请求压力。
  假设单个broker可以抗每秒7万并发,那么两个broker就可以抗到每秒14万并发,这样就可以实现RocketMQ集群抗下每秒10万+超高并发的场景了。
  另外通过这个方法,也可以让一个Topic中的数据分散在多个MessageQueue中,进而分散在多个Broker机器上,就可以实现RocketMQ集群分布式存储海量的消息数据了。 如果某个broker出现故障该怎么办
  如果某个Broker临时出现故障了,比如Master Broker挂了,此时正在等待的其他Slave Broker自动热切换为Master Broker,那么这个时候对这一组Broker就没有Master Broker可以写入了。
  此时如果还是按照之前的策略来均匀把数据写入各个Broker上的MessageQueue,那么会导致你在一段时间内,每次访问到这个挂掉的Master Broker都会访问失败。
  对于这个问题,通常来说建议大家在Producer中开启一个开关,就是sendLatencyFaultEnable。
  一旦打开了这个开关,那么他会有一个自动容错机制,比如如果某次访问一个Broker发现网络延迟有500ms,然后还无法访问,那么就会自动回避访问这个Broker一段时间,比如接下来的300ms内,就不会访问这个Broker了。
  这样的话,就可以避免一个Broker故障之后,短时间内生产者频繁的发送消息到这个故障的Broker上去,出现较多次的异常,而是在一个Broker故障之后,自动回避一段时间不要访问这个Broker,过段时间再去访问他。
  那么这样过一段时间之后,可能这个Master Broker就已经恢复好了,比如他的Slave Broker已经切换为了Master可以让别人访问了。

WindowsService服务和定时任务框架quartz之间原来是这种关系前言项目开发完成后,对接的项目有很多个模块,由于其中的一个环节疏忽,现在需要在原有的基础上把缺失的数据自动写入数据库存储起来。重新修改程序逻辑已然不现实,现在需要一个补丁来进行逻辑和付费网盘说再见,跟着本文自己起个网盘(Java)项目源码获取关注转发之后私信回复源码即可免费获取到一项目介绍一款开源使用简单功能完整的Java网盘云盘系统。支持在线视频播放文档在线预览音乐播放图片查看等功能的文件云存储平台。技术记一次使用线程池出现的问题(线程池异常)背景之前在工作中遇到一个问题,我定义了一个线程池来执行任务,程序执行结束后任务没有全部执行完。业务场景是这样的由于统计业务需要,订单信息需要从主库中经过统计业务代码写入统计库。由于不可忽视的Dubbo线程池避坑指南推荐阅读阿里巴巴4面Java岗位算法性能调优并发多线程数据库DubboKafkaMyBatisreidsSpring多线程等,学完就去面试BAT问题描述线上突然出现Dubbo超时调面试三轮我倒在了一道sql题上sql性能优化一前言最近小农在找工作,因为今年疫情的特殊原因,导致工作不是特别好找,所以一旦有面试电话,如果可以,都会去试一试,刚好接到一个面试邀请,感觉公司还不错,于是就确定了面试时间,准备了idea远程调试,一个用上就被老大表扬的黑科技不知道各位有没有遇见以下情况国服第一测试我本地环境出了一个bug,那个稀饭下雪你过来看看。或者国服第一测试外网正式服出了一个bug,我导了数据库环境到本地,看了下确实是bug,那个基于ServletJSP开发的小米商城项目源码分享小米商城项目流程展示注意jsp页面数据库以及部分Utils工具已提供,我们只需要创建项目导入创建和编写其他代码即可。页面展示过程被红色线框圈住地方是我们需要做的商城入口,点击该入口小米智能音箱高清扬声器评论价格令人印象深刻小米Mi智能扬声器高清是该品牌于2018年在无线扬声器市场中的入门产品,尽管它主要针对说汉语的消费者,但它可以与其他大品牌竞争对手一较高下。极简主义和离散的浅灰色立方体(如果您选择2020,华为和荣耀艰难的一年,负重前行,不忘初心。由于显而易见的原因,2019年对华为来说尤其糟糕,至少我们当中有些人认为2020年会如此。尽管如此,华为仍然勉强维持生计,甚至能够推出一些很棒的产品,从耳机和智能手表到智能手机和笔小米POCO悄悄布局海外市场,可谓计划长远,野心不小啊Poco在2020年1月成为独立实体,在不到运营的一年内就实现了这一里程碑。该报告称,Poco现在在在线交易量上已落后于竞争对手OnePlus和Realme。Counterpoin荣耀V405G出现在视频中,发布推迟到1月22日上周,Honor表示将在1月18日在中国推出V405G,但现在该公司已宣布将在1月22日推出这款手机。荣耀援引了会议场地和设备相关问题的延误,但承诺将在当地时间1月22日开始销售V