如何分析Kafka和消息隊(duì)列之間的超快速比較,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
為隆德等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及隆德網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、隆德網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
Kafka最初是由Linkedin社區(qū)開發(fā)的一項(xiàng)技術(shù)。簡(jiǎn)而言之,它有點(diǎn)像消息隊(duì)列系統(tǒng),但它與消息隊(duì)列系統(tǒng)不同的就是它能夠支持pub/sub,可以在許多服務(wù)器上進(jìn)行擴(kuò)展,并重新播放消息。
平時(shí)你可能不太關(guān)注這些問題,但是當(dāng)你想要采用響應(yīng)式編程風(fēng)格而不是命令式編程風(fēng)格時(shí),上述這些就是你需要進(jìn)行關(guān)注的了。
命令式編程和響應(yīng)式編程之間的區(qū)別
命令式編程是我們一開始就采用的編程類型。當(dāng)發(fā)生了一些事情,換句話說,事件發(fā)生了,然后你的代碼被告知發(fā)生了該事件。例如,用戶單擊一個(gè)按鈕,你在代碼中處理這個(gè)事件的地方,就決定了你希望系統(tǒng)接下來(lái)觸發(fā)哪些動(dòng)作。您可以將記錄保存到數(shù)據(jù)庫(kù)中,調(diào)用另一個(gè)服務(wù),發(fā)送電子郵件,或者將這些動(dòng)作組合在一起。這里最重要一點(diǎn)是,事件是與這些具體發(fā)生的動(dòng)作是直接耦合的。
響應(yīng)式編程使用戶能夠響應(yīng)發(fā)生的事件,通常以流的形式出現(xiàn)。多個(gè)關(guān)注點(diǎn)可以訂閱相同的事件,并讓事件在它的域中產(chǎn)生影響,而不管其他域發(fā)生了什么。換句話說,它支持松散耦合的代碼,可以很容易地?cái)U(kuò)展到更多的功能。有可能在不同的棧中編碼的各種大的下流系統(tǒng)會(huì)受到事件的影響,甚至是在云的某個(gè)地方執(zhí)行的一大堆沒有服務(wù)器的函數(shù)。
從消息隊(duì)列到Kafka
為了理解Kafka會(huì)給你的架構(gòu)帶來(lái)什么,讓我們先談?wù)撘幌孪㈥?duì)列。我們之所以從消息隊(duì)列開始,是因?yàn)槲覀儗⒂懻撍木窒扌裕缓罂纯碖afka是如何解決這些問題的。
消息隊(duì)列允許一組訂閱者從隊(duì)列的末尾提取一條或多條消息。在消息被移除之前,隊(duì)列通常允許執(zhí)行某些級(jí)別的事務(wù),以確保在消息被刪除之前執(zhí)行所需的操作。
并不是所有的隊(duì)列系統(tǒng)都具有相同的功能,但是一旦消息被處理了,就會(huì)從隊(duì)列中刪除掉。如果你仔細(xì)想想,它其實(shí)與命令式編程非常類似,首先得發(fā)生一些事情,然后起始系統(tǒng)決定在下游系統(tǒng)中應(yīng)該執(zhí)行哪些操作。
盡管可以在隊(duì)列中擴(kuò)展多個(gè)消費(fèi)者,但它們都包含相同的功能,而這只是為了處理負(fù)載和并行處理消息,換句話說,它不允許你基于相同的事件啟動(dòng)多個(gè)獨(dú)立的操作。隊(duì)列消息的所有處理器將在相同的域中執(zhí)行相同類型的邏輯。這意味著隊(duì)列中的消息實(shí)際上是命令,它適合于命令式編程,而不是一個(gè)適合于響應(yīng)式編程的事件。
對(duì)于隊(duì)列,通常在相同的域中為隊(duì)列中的每個(gè)消息執(zhí)行相同的邏輯
另一方面,使用Kafka,你可以將消息/事件發(fā)布到主題上,它們會(huì)被持久化。當(dāng)消費(fèi)者收到這些消息時(shí),他們也不會(huì)被移除掉。這允許你重放消息,但更重要的是,它允許大量的消費(fèi)者基于相同的消息/事件處理各自不同邏輯。
你仍然可以在相同的域中進(jìn)行并行處理,但是更重要的是,你還可以添加不同類型的消費(fèi)者,這些消費(fèi)者基于相同的事件執(zhí)行不同的邏輯。換句話說,對(duì)于Kafka,用戶可以采用一個(gè)被動(dòng)的pub/sub體系結(jié)構(gòu)。
不同的邏輯可以由不同的系統(tǒng)基于相同的事件來(lái)執(zhí)行
在使用Kafka的情況下,這是可能的,因?yàn)樾畔⑹潜A舻?,消費(fèi)者群體的概念也是如此。Kafka的消費(fèi)者團(tuán)體在向Kafka詢問關(guān)于某個(gè)話題的信息時(shí),將自己定位于Kafka。Kafka將會(huì)記錄哪些消息(偏移量)被傳送到哪個(gè)消費(fèi)者組,這樣它就不會(huì)再為它服務(wù)了。實(shí)際上,它比這要復(fù)雜一些,因?yàn)槟性S多可用的配置選項(xiàng)來(lái)控制這一點(diǎn),但是我們不需要全面地探索這些選項(xiàng),只是為了在高層次上理解Kafka。
關(guān)于如何分析Kafka和消息隊(duì)列之間的超快速比較問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。