关于RocketMQ Topic的创建机制,我还有一些细节上的思考
微信公众号「后端进阶」,专注后端技术分享:Java、Golang、WEB框架、分布式中间件、服务治理等等。
老司机倾囊相授,带你一路进阶,来不及解释了快上车!
在撸完RocketMQ Topic的创建机制后,我似乎还有一些意犹未尽的感觉,总觉得还缺一些什么。于是我就趁热打铁,提出以下两点我自己的一些思考。
当集群新增broker后,如何保证队列负载?
假设我现在有两个master broker分别为b1和b2组成了一个集群,我选择手动创建topic1,此时topic1的路由信息会发送到b1和b2,同时b1和b2会将路由信息注册到nameserver,发送topic1的消息时,会从nameserver获取topic1的路由信息,然后进行负载均衡平均分发到b1和b2。
以上是前提。
如果此时topic1的消息量剧增,b1和b2负载过高,集群这时加了b3和b4两个master broker节点,但此时b3和b4并没有topic1的路由信息,也就是topic1此时从nameserver获取到的broker信息只有b1和b2,因此虽然加了b3和b4,但topic1的消息并不会路由到b3和b4去,这时只有新加入的topic才会有机会路由到b3和b4那里。
你们有没有想过是如何处理这个问题呢?或者根本不去处理?
通过撸源码可以知道,RocketMQ目前只能是通过手动配置topic1到b3和b4,那么这时问题又来了,如果集群中有成百上千个topic呢?手动配置真的够呛,流量突然增大这时你手动扩容topic时效性也差。那如何来解决这个问题呢?
我们可以按业务分集群,把topic归类到不同的集群中,这样每个集群添加broker后,需要重新分配的topic就大大减少了。
更好的解决方案是添加一个复制功能,新增的broker自动从nameserver拉取需要复制到新broker的topic配置。期待以后的版本迭代中如愿增加这个功能吧。
如何在集群中固定队列数量?
假设集群有20个master broker,有个topic1,这个topic1需要在集群中保持拥有10个消息队列。
以上是前提。
我们都知道手动创建topic有broker模式创建和集群模式创建,我们可以很简单地通过broker模式来创建topic1拥有10个队列,即broker数量*每个broker队列数量就行了,但是通过broker模式创建的话,就有可能造成某些broker负载过高,于是我想通过集群模式去创建topic,我们都知道集群模式创建broker会默认在集群下的每个broker都创建topic的队列路由信息,那么我现在这个集群中创建的每个topic的消息队列至少都会有20个了。
有没有可能以后会多一个创建机制:在集群模式下,只需要输入topic名称和消息队列数量,至于队列被分配到哪个broker,取决于broker的负载情况。
同样期待以后的版本迭代中如愿增加这个功能吧。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
惊!原来你是会内存泄漏的ThreadLocal
前言 在上周发的《求求你别用SimpleDateFormat了!》这篇文章中,有简单的提过在ThreadLocal的使用过程中不规范的话,可能会有坑,所以我们今天就来探讨一下有哪些坑需要我们在开发的过程中注意的。 正文 基本使用 ThreadLocal可以让你创建只能在自己线程里面读写的变量,也就是说,在同一个TreadLocal变量里面,不同的线程存取的变量只能自己看到,其他线程是访问不了的。 相关操作 //创建对象ThreadLocal threadLocal = new ThreadLocal<String>();//设值threadLocal.set("深夜里的程序猿");//取值threadLocal.get();//get深夜里的程序猿 原理 threadlocal相关的操作还是比较简单的,那我们也来简单了解下它的实现原理,直接上源码。 public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null...
- 下一篇
看完就懂的无痕埋点
在移动互联网时代,对于每个公司、企业来说,用户的行为数据非常重要。重要到什么程度,用户在这个页面停留多久、点击了什么按钮、浏览了什么内容、什么手机、什么网络环境、App什么版本等都需要清清楚楚。一些大厂的蛮多业务成果都是基于用户操作行为进行推荐后二次转换。另一方面是以日志的作用帮助开发者分析线上问题的一种辅助手段。 那么有了上述的诉求,那么技术人员如何满足这些需求?引出来了一个技术点-“埋点” 0x01. 埋点手段 业界中对于代码埋点主要有3种主流的方案:代码手动埋点、可视化埋点、无痕埋点。简单说说这几种埋点方案。 代码手动埋点:根据业务需求(运营、产品、开发多个角度出发)在需要埋点地方手动调用埋点接口,上传埋点数据。 可视化埋点:通过可视化配置工具完成采集节点,在前端自动解析配置并上报埋点数据,从而实现可视化“无痕埋点” 无痕埋点:通过技术手段,完成对用户行为数据无差别的统计上传的工作。后期数据分析处理的时候通过技术手段筛选出合适的数据进行统计分析。 0x02. 技术选型 1. 代码手动埋点 该方案情况下,如果需要埋点,则需要在工程代码中,写埋点相关代码。因为侵入了业务代码,对业务代...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- 设置Eclipse缩进为4个空格,增强代码规范
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- 2048小游戏-低调大师作品