新聞中心
最近在學(xué)習(xí) Kafka,發(fā)現(xiàn)其核心概念與 RocketMQ 還是存在一定的差別,下面我來(lái)說(shuō)下 Kafka 分區(qū) 與 RocketMQ隊(duì)列之間的區(qū)別。

RocketMQ 隊(duì)列
RocketMQ 每個(gè)主題都會(huì)有若干個(gè)隊(duì)列,分布于集群中各個(gè) broker 上,分布規(guī)律如下:
隊(duì)列會(huì)在 broker 中抽象成一個(gè) consumer queue,在集群模式下,每個(gè)隊(duì)列每個(gè)消費(fèi)組只能存在一個(gè)消費(fèi)者進(jìn)行訂閱消費(fèi),但是一個(gè)消費(fèi)者可以消費(fèi)多個(gè)隊(duì)列,這也保證了在集群模式下消息不會(huì)被重復(fù)消費(fèi),如下圖所示:
在RocketMQ開(kāi)源版本中,在創(chuàng)建主題時(shí),通過(guò)集群創(chuàng)建模式,指定主題在集群中的隊(duì)列數(shù)量,比如集群中有 2 個(gè) broker,我們創(chuàng)建主題時(shí)選擇隊(duì)列數(shù)量為 4,就會(huì)在每個(gè) broker 中為該主題創(chuàng)建 4 個(gè) 隊(duì)列,那么該主題在集群中就會(huì)有 4 * 2 個(gè)隊(duì)列數(shù)量,這里有個(gè)不好的地方就是無(wú)法精確控制隊(duì)列數(shù)量,但這個(gè)問(wèn)題不大。
RocketMQ 是通過(guò)主從模式實(shí)現(xiàn)消息的冗余,在生產(chǎn)環(huán)境中,也會(huì)采取多 Master 多 Slave 模式搭建集群,主從之間的隊(duì)列數(shù)據(jù)同步有同步復(fù)制和異步復(fù)制兩種。
因此,RocketMQ 是依靠隊(duì)列進(jìn)行消費(fèi)的,而隊(duì)列數(shù)據(jù)通過(guò)主從同步實(shí)現(xiàn)消息的冗余。
Kafka分區(qū)與副本
Kafka 的分區(qū)概念是其核心概念之一,分區(qū)機(jī)制使得 Kafka 具備了水平擴(kuò)展的能力,在其分區(qū)之上,Kafka 還可以設(shè)置分區(qū)的副本,大大提高了 Kafka 消息的可靠性。
在 Kafka 中,一個(gè)主題在集群中會(huì)擁有一個(gè)以上分區(qū),每個(gè)分區(qū)在每個(gè)消費(fèi)集群中只能有一個(gè)消費(fèi)者進(jìn)行訂閱消費(fèi),,但是一個(gè)消費(fèi)者可以消費(fèi)多個(gè)隊(duì)列,與 RocketMQ 隊(duì)列一樣:
我們可以通過(guò)調(diào)整主題的分區(qū)數(shù)量提高消息的吞吐量,還可以為分區(qū)設(shè)置副本因子,即該分區(qū)在集群中擁有多少個(gè)副本(replica),副本分為 leader replica 與 follower replica,它們之間通過(guò) ISR(in-sync replica)與 leader replica 保持?jǐn)?shù)據(jù)同步。
在創(chuàng)建主題topic-demo時(shí),可以指定主題在集群中的分區(qū)數(shù)量,以及副本因子大?。?/p>
--partitions 4 --replication-factor 2
以上參數(shù)為該主題創(chuàng)建了 4 個(gè)分區(qū),副本因子為 2,我現(xiàn)在有個(gè)集群,有 3 個(gè) broker:
nodel brokerid=O
node2 brokerid=l
node3 brokerid=2
根據(jù) Kafka 的默認(rèn)分配:
node1: topic-demo-0、topic-demo-1
node2: topic-demo-1、topic-demo-2、topic-demo-3
node3: topic-demo-0、topic-demo-2、topic-demo-3
有沒(méi)有發(fā)現(xiàn),每個(gè)分區(qū)都分配了一個(gè)副本,而且分區(qū)的分布盡量均衡,分區(qū)副本盡量不在同一個(gè)節(jié)點(diǎn)上,如果我們?cè)O(shè)置副本因子為 3,原理一樣。
不同于 RocketMQ 隊(duì)列,Kafka 的分區(qū)可以在集群中精確設(shè)置多少個(gè),然后隨機(jī)均衡地分布在集群上,還可以自由定義副本的多少,而 RocketMQ 的 Master-Slave 模式看起來(lái)僅有一份副本,當(dāng)然為了節(jié)省存儲(chǔ)空間以及提高性能,一般副本因子設(shè)置 2 也就夠了。
相對(duì)比 RocketMQ 的隊(duì)列與主從同步機(jī)制,Kafka 的分區(qū)與副本機(jī)制顯得更加靈活,而且也更加合理。
分享標(biāo)題:Kafka分區(qū)副本與RocketMQ隊(duì)列的不同
文章轉(zhuǎn)載:http://m.fisionsoft.com.cn/article/dpocecp.html


咨詢(xún)
建站咨詢(xún)
