這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)怎樣實(shí)現(xiàn)Pulsar與Kafka消費(fèi)模型對(duì)比,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
成都創(chuàng)新互聯(lián)公司一直在為企業(yè)提供服務(wù),多年的磨煉,使我們?cè)趧?chuàng)意設(shè)計(jì),全網(wǎng)整合營銷推廣到技術(shù)研發(fā)擁有了開發(fā)經(jīng)驗(yàn)。我們擅長傾聽企業(yè)需求,挖掘用戶對(duì)產(chǎn)品需求服務(wù)價(jià)值,為企業(yè)制作有用的創(chuàng)意設(shè)計(jì)體驗(yàn)。核心團(tuán)隊(duì)擁有超過10余年以上行業(yè)經(jīng)驗(yàn),涵蓋創(chuàng)意,策化,開發(fā)等專業(yè)領(lǐng)域,公司涉及領(lǐng)域有基礎(chǔ)互聯(lián)網(wǎng)服務(wù)內(nèi)江機(jī)房主機(jī)托管、成都APP應(yīng)用開發(fā)、手機(jī)移動(dòng)建站、網(wǎng)頁設(shè)計(jì)、網(wǎng)絡(luò)整合營銷。
kafka 屬于 Stream 的消費(fèi)模型,為了支持多 partition 的消費(fèi)關(guān)系,引入了 consumer group 的概念,同時(shí)支持在消費(fèi)端動(dòng)態(tài)的 reblance 操作,當(dāng)多個(gè) Consumer 訂閱了同一個(gè) Topic 時(shí),會(huì)根據(jù)分區(qū)策略進(jìn)行消費(fèi)者訂閱分區(qū)的重分配。只要 consumer-group 與 topic 之間的關(guān)系發(fā)生變更,就會(huì)動(dòng)態(tài)觸發(fā) reblance 操作,諸如:
增加或減少 topic 中 partition 的數(shù)目
consumer-group 中的 consumer 數(shù)減少
consumer-group 與 topic 之間的訂閱關(guān)系發(fā)生變更
等等
引入 reblance 的好處在于,當(dāng)訂閱關(guān)系發(fā)生變更時(shí),用戶無需重新啟動(dòng)系統(tǒng),就可以實(shí)現(xiàn)訂閱關(guān)系的變更,相當(dāng)于 kafka 將這種分配的權(quán)利從服務(wù)端下放到客戶端中的 consumer 來管理,這樣用戶就可以自定義自己的分配方案。
類似 kafka 這樣的 StreamMQ,更多時(shí)候適合做離線業(yè)務(wù)的處理與分析,很多線上業(yè)務(wù)會(huì)使用 Active MQ 這樣 Queue的 MQ。為了同時(shí)兼容這兩種消費(fèi)模型,pulsar 做了一層消費(fèi)層的抽象,統(tǒng)一了 Queue 和 Stream 這兩種消費(fèi)模型。
其中,Exclusive 和 Failover 屬于 Stream 的消費(fèi)模型,Share 屬于 Queue 的消費(fèi)模型。在寫此文章時(shí),pulsar 最新版本為 2.3.1,Key_Shared 屬于pulsar 新增加的一種訂閱模型,在之后的文章中,我們會(huì)單獨(dú)對(duì) Key_shared 訂閱模型做單獨(dú)的分享,這里不在贅述。
由于 kafka 不支持 Queue 類型的消費(fèi)模型,所以 Share 這種形式在這里不做對(duì)比。下面,和大家一起討論以下在 Stream 下 pulsar 與 kafka 的消費(fèi)模型。
如下圖所示,左邊為 pulsar 在 Failover 和 Exclusive 下的消費(fèi)情況,右邊為 kafka 的消費(fèi)模型。
假設(shè)目前有一個(gè) topic,topic name 為 topic1,有 5 個(gè)partition,分別為:topic1-p1,topic1-p2,topic1-p3,topic1-p4,topic1-p5,在 kafka 中,使用了 consumer-group 且該 group 下有三個(gè) consumer,上文中提到,kafka 支持 reblance 機(jī)制,所以當(dāng) consumer-2 與 consumer-3 加入 consumer-group 的過程中,會(huì)動(dòng)態(tài)分?jǐn)傊?consumer-1 的消費(fèi)壓力,表現(xiàn)為如上圖右半部分所示,cousumer-1 消費(fèi) topic1-p1 和 ropic1-p2,consumer-2 消費(fèi) topic1-p3 和 topic1-p4,consumer-3 消費(fèi) topic1-p5 。所以當(dāng)用戶不斷的往 consumer-group 中添加 consumer 時(shí),利用 kafka 的 reblance 機(jī)制,是可以讓用戶動(dòng)態(tài)指定具體哪一個(gè) consumer 來消費(fèi) topic1 中的哪些 partition。
在 pulsar 中,你可以將 subscribe 理解為 kafka 中的 consumer-group,如果用戶在啟動(dòng) consumer 時(shí),指定的 subscribe-name 是相同的,說明這兩個(gè) consumer 屬于同一個(gè)訂閱組,代碼示例如下:
Consumer<byte[]> consumer1 = pulsarClient.newConsumer().topic("topic-1").subscriptionName("my-subscriber-name")
.subscriptionType(SubscriptionType.Failover)
.subscribe();
Consumer<byte[]> consumer2 = pulsarClient.newConsumer().topic("topic-2").subscriptionName("my-subscriber-name")
.subscriptionType(SubscriptionType.Failover)
.subscribe();
如上圖示例所示,在同一個(gè)訂閱組下,啟動(dòng)三個(gè) consumer,在 pulsar 中,每一個(gè) consumer 都會(huì)去訂閱 topic1 中的 5 個(gè) partition,所以每個(gè) consumer 都會(huì)去啟動(dòng) 5 個(gè) sub-consumer,在 failover 的訂閱模型下,會(huì)使用 hashcode 的形式,將 5 個(gè) partition 分配給三個(gè) consumer 來消費(fèi),pulsar 將當(dāng)前正在消費(fèi)的 sub-consumer 看作是處于 leader 狀態(tài)的 consumer,剩余未工作的 sub-consumer 作為從節(jié)點(diǎn),當(dāng) leader 狀態(tài)的 consumer 由于某些原因無法工作時(shí),處于從狀態(tài)的 sub-consumer 會(huì)去接替 leader 的 consumer,并繼續(xù)工作??梢园l(fā)現(xiàn),kafka 加入 reblance 的機(jī)制,允許用戶自己指定哪些 consumer 來消費(fèi) 哪些 partition,在 pulsar 中,這個(gè)工作由 failover 的機(jī)制來完成,它通過 hash 的形式,將 consumer 分配到不同的 sub-consumer 中來執(zhí)行。
現(xiàn)在,驗(yàn)證一下上述所描述的內(nèi)容。
1. 以 standalone 的形式啟 pulsar
$ docker run -it \ -p 6650:6650 \ -p 8080:8080 \ -v $PWD/pulsardata:/pulsar/data \ apachepulsar/pulsar:2.3.0 \ bin/pulsar standalone
2. 創(chuàng)建一個(gè) topic,partition 的數(shù)目為 4
$ ./bin/pulsar-admin topics mytopic1 create-partitioned-topic -p 4
以 failover 的訂閱類型,啟動(dòng) 3 個(gè) consumer,并指定他們?yōu)橥粋€(gè)訂閱組,即-s sub-1
$ ./bin/pulsar-client consume mytopic1 -s sub-1 -n 0 -t Failover
3. 啟動(dòng) producer,發(fā)送 10 條數(shù)據(jù)到 mytopic1
$ ./bin/pulsar-client produce mytopic1 -n 10 -m "hello-pulsar"
可以看到,consumer1 接收到 2 條消息,consumer2 接收到 5 條消息,consumer3 接收到 3 條消息。效果和我們所預(yù)期的是一致的。
上述情況是因?yàn)樵?producer 發(fā)送之前,就已經(jīng)啟動(dòng)好三個(gè) consumer 來消費(fèi)消息,所以 pulsar 會(huì)以 hash 的形式將消息分發(fā)到三個(gè) consumer 中來消費(fèi)。
以 Exclusive
的訂閱形式啟動(dòng)兩個(gè) consumer,效果如下:
./bin/pulsar-client consume mytopic1 -s sub-1 -n 0 -t Exclusive
當(dāng)啟動(dòng) consumer2 時(shí),會(huì)報(bào)錯(cuò) Exclusive consumer is already connected
,這是因?yàn)椋?code>Failover 的訂閱模式下,其它的 consumer 會(huì)以 “從” consumer 的形態(tài)存在,但是 Exclusive
只允許一個(gè) consumer 訂閱一個(gè) topic。
上述就是小編為大家分享的怎樣實(shí)現(xiàn)Pulsar與Kafka消費(fèi)模型對(duì)比了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
名稱欄目:怎樣實(shí)現(xiàn)Pulsar與Kafka消費(fèi)模型對(duì)比
文章源于:http://muchs.cn/article2/pjjiic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、企業(yè)網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、建站公司、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)