rocketMQ的初步认识,topicnameServerbroker相关概念的解释
Posted 道祖且长
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rocketMQ的初步认识,topicnameServerbroker相关概念的解释相关的知识,希望对你有一定的参考价值。
针对我学过kafka,然后半年过去了,基本什么概念都没,kafka的任何知识都忘了的学习状况,决定多多记录自己在学习新知识的各种见解,即使几个月以后回首望去,感觉这些知识太基础了也在所不惜。绝对不能重蹈kafka的覆辙。
在rocketMQ中,有topic、nameServer、broker三个最基本概念:
我眼里的三大最基础概念:
1、topic:
主题。每一个消息都会且只会属于某一个主题。消息和主题是属于一对一的关系,而主题和消息是属于一对多的关系。如下图,可以看到主题和消息的关系:
如上图,生产者生产各种不同的消息,每个消息会自动归属于对应的主题。消费者消费是针对于主题的,一个消费者只会对一种主题中的消息感兴趣(群发模式例外)。
2、broker
Broker是RocketMQ的核心,大部分工作都在Broker中完成,包括接收请求,处理消费,消费持久,消息的HA,以及服务端过滤等都在里面完成
Broker既是物理上的概念(可以想成是一个电脑主机),也是逻辑上的概念。多个物理Broker通过IP:PORT区分,多个逻辑Broker通过BrokerName区分。
多个逻辑Broker组成Cluster。
Broker与Topic是多对多的关系。
3、nameServer
这么说吧,nameServer就类似于微服务架构中的注册中心,学过微服务的,懂得都懂 (^ V ^)
它提供了路由管理、服务注册、服务发现的功能。
以上三者用一张图来表示就更加清晰了:
其他重要概念:
标签
消息标签,用来进一步区分某个 Topic 下的消息分类,消息队列 RocketMQ 允许消费者按照 Tag 对消息进行过滤,确保消费者最终只消费到他关注的消息类型。
Topic 与 Tag 都是业务上用来归类的标识,区分在于 Topic 是一级分类,而 Tag 可以说是二级分类
比如:有一个Topic叫做‘发货’,下游消费者希望可以根据货源进行不同的处理,可以通过‘tag=北京’以及‘tag=上海’来区分不同的发货源。下游消费者,可以单独订阅‘上海’的货物,或者‘tag=上海|江苏|浙江’来订阅这三个地区的货物,还可以‘tag=*’来订阅全国的货物。
队列
队列相信大家都熟悉了,主要就是用于保存消息。(注意一下,挺多资料中,队列也叫分区,在rocketMQ中两者是同一个概念嘀)
消费者组
一个RocketMQ集群是如何区分消费者是谁的呢?就是通过消费组,相同消费组的机器,MQ认为消费行为是一致的。业务上一定要保证相同消费组有相同的消费行为。对于不同的消费组名字,RocketMQ就认为是个不同消费者了。如果修改了消费组的名字,那就是新的消费者,就会按照新的消费组的消费进度处理消费。
消息那么多,项目都重启无数次了,RocketMQ是如何记录消息消费到什么地方了呢?
也是通过消费组,RocketMQ内部会维护一个关系,记录Consumer Group和消费进度之间的联系。所以,如果把Consumer Group的名字改掉是可能重新消费之前的所有数据的(视初始消费位置而定)
分片
官方来说,是没有分片这个概念的,但是在很多roketMQ的学习资料中都有分片的概念的。我在学习roketMQ中看到分片时是能够迅速理解的,因为之前在学习elasticSearch时,讲了很多分片的概念。在es中,可能会将一篇文章的索引进行拆分,放在不同的集群上,在使用时在按照规则组装,这个过程就是分片(个人理解,可以忽略哈),我记得英文好像是叫sharding。
分片用图片来说明就是:
这张图片仔细看的话是非常容易理解的,横着看是有TopicA、TopicB、TopicC三大主题,竖着看的话,是有BrokerA、BrokerB、BrokerC三大Broker。也就是说一个Topic主题类型的消息存在三个不同的Broker中。如果单看TopicA,三个Broker中的所有TopicA类型的消息合起来就是所有的完整的TopicA主题消息了。即一个Topic被分在了不同的Broker,这就是分区。
–我是“道祖且长”,一个在互联网"苟且偷生"的Java程序员
“有任何问题,可评论,我看到就会回复”
以上是关于rocketMQ的初步认识,topicnameServerbroker相关概念的解释的主要内容,如果未能解决你的问题,请参考以下文章