真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Kafka的三種客戶端線程模型和一個(gè)小驚喜

Kafka 作為一個(gè)流式數(shù)據(jù)平臺(tái),對(duì)開發(fā)者提供了三種客戶端:生產(chǎn)者 / 消費(fèi)者、連接器、流處理。本文著重分析這三種客戶端的線程模型??吹阶詈蟮耐ǔ6加畜@喜。
消費(fèi)者的線程模型
0.8 版本以前的消費(fèi)者客戶端會(huì)創(chuàng)建一個(gè)基于 ZK 的消費(fèi)者連接器,一個(gè)消費(fèi)者客戶端是一個(gè) Java 進(jìn)程,消費(fèi)者可以訂閱多個(gè)主題,每個(gè)主題也可以多個(gè)線程。為了讓消息在多個(gè)節(jié)點(diǎn)被分布式地消費(fèi),提高消息處理的吞吐量,Kafka 允許多個(gè)消費(fèi)者訂閱同一個(gè)主題,這些消費(fèi)者需要滿足“一個(gè)分區(qū)只能被一個(gè)消費(fèi)者中的一個(gè)線程處理”的限制條件。通常,我們會(huì)將同一份相同業(yè)務(wù)處理邏輯的應(yīng)用程序部署在不同機(jī)器上,并且指定一個(gè)消費(fèi)組編號(hào)。當(dāng)不同機(jī)器上的消費(fèi)者進(jìn)程啟動(dòng)后,所有這些消費(fèi)者進(jìn)程就組成了一個(gè)邏輯意義上的消費(fèi)組。

新源網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,新源網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為新源上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的新源做網(wǎng)站的公司定做!

消費(fèi)組中的消費(fèi)者數(shù)量是動(dòng)態(tài)變化的,當(dāng)有新消費(fèi)者加入消費(fèi)組,或者舊消費(fèi)者離開消費(fèi)組,都會(huì)觸發(fā)基于 ZK 的消費(fèi)組“再平衡”操作。當(dāng)“再平衡”操作發(fā)生時(shí),每個(gè)消費(fèi)者都會(huì)在客戶端執(zhí)行分區(qū)分配算法,然后從全局的分配結(jié)果中獲取屬于自己的分區(qū)。它的缺點(diǎn)是消費(fèi)者會(huì)和 ZK 產(chǎn)生頻繁的交互,造成 ZK 集群的壓力過大,并且容易產(chǎn)生羊群效應(yīng)和腦裂等問題。

在 0.8 版本以后,Kafka 重新設(shè)計(jì)了客戶端,并且引入了“協(xié)調(diào)者”和“消費(fèi)組管理協(xié)議”。新的消費(fèi)者將“消費(fèi)組管理協(xié)議”和“分區(qū)分配策略”進(jìn)行了分離。協(xié)調(diào)者負(fù)責(zé)消費(fèi)組的管理,而分區(qū)分配則會(huì)在消費(fèi)組的一個(gè)主消費(fèi)者中完成。采用這種方式,每個(gè)消費(fèi)者都需要發(fā)送下面兩種請(qǐng)求給協(xié)調(diào)者。

加入組請(qǐng)求:協(xié)調(diào)者收集消費(fèi)組的所有消費(fèi)者,并選舉一個(gè)主消費(fèi)者執(zhí)行分區(qū)分配工作。

同步組請(qǐng)求:主消費(fèi)者完成分區(qū)分配,由協(xié)調(diào)者將分區(qū)的分配結(jié)果傳播給每個(gè)消費(fèi)者。

新版本的消費(fèi)者客戶端引入了一個(gè)客戶端協(xié)調(diào)者的抽象類,它的實(shí)現(xiàn)除了消費(fèi)者的協(xié)調(diào)者,還有一個(gè)連接器的實(shí)現(xiàn)。

連接器的線程模型
Kafka 連接器的出現(xiàn)標(biāo)準(zhǔn)化了 Kafka 與各種外部存儲(chǔ)系統(tǒng)的數(shù)據(jù)同步。用戶開發(fā)和使用連接器就變得非常簡(jiǎn)單,只需要在配置文件中定義連接器,就可以將外部系統(tǒng)的數(shù)據(jù)導(dǎo)入 Kafka 或?qū)?Kafka 數(shù)據(jù)導(dǎo)出到外部系統(tǒng)。如圖 1 所示,中間部分都是 Kafka 連接器的內(nèi)部組件,包括源連接器(Source Connector)和目標(biāo)連接器(Sink Connector)。
Kafka的三種客戶端線程模型和一個(gè)小驚喜

圖 1 Kafka 連接器的源連接器與目標(biāo)連接器

Kafka 連接器的單機(jī)模式會(huì)在一個(gè)進(jìn)程內(nèi)啟動(dòng)一個(gè) Worker 以及所有的連接器和任務(wù)。分布式模式的每個(gè)進(jìn)程都有一個(gè) Worker,而連接器和任務(wù)則分別運(yùn)行在各個(gè)節(jié)點(diǎn)上。圖 2 列舉了連接器和任務(wù)在不同 Worker 上的四種分布方式:

一個(gè) Worker,一個(gè)源任務(wù)、一個(gè)目標(biāo)任務(wù)

一個(gè) Worker,兩個(gè)源任務(wù)、兩個(gè)目標(biāo)任務(wù)

兩個(gè) Worker,兩個(gè)源任務(wù)、兩個(gè)目標(biāo)任務(wù)

三個(gè) Worker,兩個(gè)源任務(wù)、兩個(gè)目標(biāo)任務(wù)
Kafka的三種客戶端線程模型和一個(gè)小驚喜

圖 2 分布式模式的 Kafka 連接器集群

分布式模式下,不同 Worker 進(jìn)程之間的協(xié)調(diào)工作類似于消費(fèi)者的協(xié)調(diào)。消費(fèi)者通過協(xié)調(diào)者獲取分配的分區(qū),Worker 也會(huì)通過協(xié)調(diào)者獲取分配的連接器與任務(wù)。如圖 3 所示,消費(fèi)者客戶端和 Worker 客戶端為了加入到組管理中,分別通過客戶端的協(xié)調(diào)者對(duì)象來和服務(wù)端的消費(fèi)組協(xié)調(diào)(GroupCoordinator)通信。

Kafka的三種客戶端線程模型和一個(gè)小驚喜
圖 3 消費(fèi)者和 Worker 的工作都是通過協(xié)調(diào)者分配的

流處理的線程模型
Kafka 流處理的工作流程簡(jiǎn)單來看分成三個(gè)步驟:消費(fèi)者讀取輸入分區(qū)的數(shù)據(jù)、流式地處理每條數(shù)據(jù)、生產(chǎn)者將處理結(jié)果寫入輸出分區(qū),這里面步驟 1 也充分利用了“消費(fèi)組管理協(xié)議”。Kafka 流處理的輸入數(shù)據(jù)源基于具有分布式分區(qū)模型的 Kafka 主題,它的線程模型主要由下面三個(gè)類組成:

流實(shí)例(KafkaStreams):通常一個(gè)節(jié)點(diǎn)(一臺(tái)機(jī)器)只運(yùn)行一個(gè)流實(shí)例。

流線程(StreamThread):一個(gè)流實(shí)例可以配置多個(gè)流線程。

流任務(wù)(StreamTask):一個(gè)流線程可以運(yùn)行多個(gè)流任務(wù),根據(jù)輸入主題的分區(qū)數(shù)確定任務(wù)數(shù)。

如圖 4 所示,輸入主題有六個(gè)分區(qū),Kafka 流處理總共就會(huì)產(chǎn)生六個(gè)流任務(wù)。流實(shí)例可以動(dòng)態(tài)擴(kuò)展,流線程的個(gè)數(shù)也可以動(dòng)態(tài)配置。圖中一共有三個(gè)流線程,則每個(gè)流線程會(huì)有兩個(gè)流任務(wù),每個(gè)流任務(wù)都對(duì)應(yīng)輸入主題的一個(gè)分區(qū)。

Kafka的三種客戶端線程模型和一個(gè)小驚喜
圖 4 Kafka 流處理的線程模型

Kafka 的流處理框架使用并行的線程模型處理輸入主題的數(shù)據(jù)集,這種設(shè)計(jì)思路和 Kafka 的消費(fèi)者線程模型非常類似。消費(fèi)者分配到訂閱主題的不同分區(qū),流處理框架的流任務(wù)也分配到輸入主題的不同分區(qū)。如圖 5 所示,輸入主題 1 的分區(qū) P1 和輸入主題 2 的分區(qū) P1 分配給流線程 1 的流任務(wù),輸入主題 1 的分區(qū) P2 和輸入主題 2 的分區(qū) P2 分配給流線程 2 的流任務(wù)。流處理相比消費(fèi)者,還會(huì)將拓?fù)涞挠?jì)算結(jié)果寫到輸出主題。

Kafka的三種客戶端線程模型和一個(gè)小驚喜
圖 5 消費(fèi)者模型與流處理的線程模型

消費(fèi)者和流處理的故障容錯(cuò)機(jī)制也是類似的。如圖 6 所示,假設(shè)消費(fèi)者 2 進(jìn)程掛掉,它所持有的分區(qū)會(huì)被分配給同一個(gè)消費(fèi)組中的消費(fèi)者 1,這樣消費(fèi)者 1 會(huì)分配到訂閱主題的所有分區(qū)。對(duì)于流處理而言,如果流線程 2 掛掉了,流線程 2 中的流任務(wù)會(huì)分配給流線程 1。即流線程 1 會(huì)運(yùn)行兩個(gè)流任務(wù),每個(gè)流任務(wù)分配的分區(qū)仍然保持不變。

Kafka的三種客戶端線程模型和一個(gè)小驚喜
圖 6 消費(fèi)者與流處理的故障容錯(cuò)機(jī)制

小 結(jié)
Kafka 客戶端抽象出來的的“組管理協(xié)議”充分運(yùn)用在消費(fèi)者、連接器、流處理三個(gè)使用場(chǎng)景中??蛻舳酥械南M(fèi)者、連接器中的工作者、流處理中的流進(jìn)程都可以看做“組”的一個(gè)成員。當(dāng)增加或減少組成員時(shí),在這個(gè)協(xié)議的約束下,每個(gè)組成員都可以獲取到最新的任務(wù),從而做到無縫的任務(wù)遷移。一旦理解了“組管理協(xié)議”,對(duì)于理解 Kafka 的架構(gòu)設(shè)計(jì)是很有幫助的。


分享名稱:Kafka的三種客戶端線程模型和一個(gè)小驚喜
文章轉(zhuǎn)載:http://weahome.cn/article/jopssc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部