針對我學過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程式員
“有任何問題,可評論,我看到就會回復”
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/290820.html
標籤:其他
上一篇:SparkSQL運行流程淺析
