0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Kafka的四個(gè)基礎(chǔ)概念學(xué)習(xí)

汽車(chē)玩家 ? 來(lái)源:簡(jiǎn)書(shū) ? 作者:我沒(méi)有三顆心臟 ? 2020-05-03 18:20 ? 次閱讀

Kafka 創(chuàng)建背景

Kafka是一個(gè)消息系統(tǒng),原本開(kāi)發(fā)自 LinkedIn,用作 LinkedIn 的活動(dòng)流(Activity Stream)和運(yùn)營(yíng)數(shù)據(jù)處理管道(Pipeline)的基礎(chǔ)?,F(xiàn)在它已被多家不同類(lèi)型的公司 作為多種類(lèi)型的數(shù)據(jù)管道和消息系統(tǒng)使用。

活動(dòng)流數(shù)據(jù)是幾乎所有站點(diǎn)在對(duì)其網(wǎng)站使用情況做報(bào)表時(shí)都要用到的數(shù)據(jù)中最常規(guī)的部分?;顒?dòng)數(shù)據(jù)包括頁(yè)面訪(fǎng)問(wèn)量(Page View)、被查看內(nèi)容方面的信息以及搜索情況等內(nèi)容。這種數(shù)據(jù)通常的處理方式是先把各種活動(dòng)以日志的形式寫(xiě)入某種文件,然后周期性地對(duì)這些文件進(jìn)行統(tǒng)計(jì)分析。運(yùn)營(yíng)數(shù)據(jù)指的是服務(wù)器的性能數(shù)據(jù)(CPU、IO 使用率、請(qǐng)求時(shí)間、服務(wù)日志等等數(shù)據(jù))。運(yùn)營(yíng)數(shù)據(jù)的統(tǒng)計(jì)方法種類(lèi)繁多。

近年來(lái),活動(dòng)和運(yùn)營(yíng)數(shù)據(jù)處理已經(jīng)成為了網(wǎng)站軟件產(chǎn)品特性中一個(gè)至關(guān)重要的組成部分,這就需要一套稍微更加復(fù)雜的基礎(chǔ)設(shè)施對(duì)其提供支持。

Kafka 簡(jiǎn)介

Kafka 是一種分布式的,基于發(fā)布 / 訂閱的消息系統(tǒng)。主要設(shè)計(jì)目標(biāo)如下:

以時(shí)間復(fù)雜度為 O(1) 的方式提供消息持久化能力,即使對(duì) TB 級(jí)以上數(shù)據(jù)也能保證常數(shù)時(shí)間復(fù)雜度的訪(fǎng)問(wèn)性能。

高吞吐率。即使在非常廉價(jià)的商用機(jī)器上也能做到單機(jī)支持每秒 100K 條以上消息的傳輸。

支持 Kafka Server 間的消息分區(qū),及分布式消費(fèi),同時(shí)保證每個(gè) Partition 內(nèi)的消息順序傳輸。

同時(shí)支持離線(xiàn)數(shù)據(jù)處理和實(shí)時(shí)數(shù)據(jù)處理。

Scale out:支持在線(xiàn)水平擴(kuò)展。

Kafka 基礎(chǔ)概念

概念一:生產(chǎn)者與消費(fèi)者

Kafka的四個(gè)基礎(chǔ)概念學(xué)習(xí)

對(duì)于 Kafka 來(lái)說(shuō)客戶(hù)端有兩種基本類(lèi)型:生產(chǎn)者(Producer)和消費(fèi)者(Consumer)。除此之外,還有用來(lái)做數(shù)據(jù)集成的 Kafka Connect API 和流式處理的 Kafka Streams 等高階客戶(hù)端,但這些高階客戶(hù)端底層仍然是生產(chǎn)者和消費(fèi)者API,它們只不過(guò)是在上層做了封裝。

這很容易理解,生產(chǎn)者(也稱(chēng)為發(fā)布者)創(chuàng)建消息,而消費(fèi)者(也稱(chēng)為訂閱者)負(fù)責(zé)消費(fèi)or讀取消息。

概念二:主題(Topic)與分區(qū)(Partition)

Kafka的四個(gè)基礎(chǔ)概念學(xué)習(xí)

在 Kafka 中,消息以主題(Topic)來(lái)分類(lèi),每一個(gè)主題都對(duì)應(yīng)一個(gè)「消息隊(duì)列」,這有點(diǎn)兒類(lèi)似于數(shù)據(jù)庫(kù)中的表。但是如果我們把所有同類(lèi)的消息都塞入到一個(gè)“中心”隊(duì)列中,勢(shì)必缺少可伸縮性,無(wú)論是生產(chǎn)者/消費(fèi)者數(shù)目的增加,還是消息數(shù)量的增加,都可能耗盡系統(tǒng)的性能或存儲(chǔ)。

我們使用一個(gè)生活中的例子來(lái)說(shuō)明:現(xiàn)在 A 城市生產(chǎn)的某商品需要運(yùn)輸?shù)?B 城市,走的是公路,那么單通道的高速公路不論是在「A 城市商品增多」還是「現(xiàn)在 C 城市也要往 B 城市運(yùn)輸東西」這樣的情況下都會(huì)出現(xiàn)「吞吐量不足」的問(wèn)題。所以我們現(xiàn)在引入分區(qū)(Partition)的概念,類(lèi)似“允許多修幾條道”的方式對(duì)我們的主題完成了水平擴(kuò)展。

概念三:Broker 和集群(Cluster)

一個(gè) Kafka 服務(wù)器也稱(chēng)為 Broker,它接受生產(chǎn)者發(fā)送的消息并存入磁盤(pán);Broker 同時(shí)服務(wù)消費(fèi)者拉取分區(qū)消息的請(qǐng)求,返回目前已經(jīng)提交的消息。使用特定的機(jī)器硬件,一個(gè) Broker 每秒可以處理成千上萬(wàn)的分區(qū)和百萬(wàn)量級(jí)的消息。(現(xiàn)在動(dòng)不動(dòng)就百萬(wàn)量級(jí)..我特地去查了一把,好像確實(shí)集群的情況下吞吐量挺高的..摁..)

若干個(gè) Broker 組成一個(gè)集群(Cluster),其中集群內(nèi)某個(gè) Broker 會(huì)成為集群控制器(Cluster Controller),它負(fù)責(zé)管理集群,包括分配分區(qū)到 Broker、監(jiān)控 Broker 故障等。在集群內(nèi),一個(gè)分區(qū)由一個(gè) Broker 負(fù)責(zé),這個(gè) Broker 也稱(chēng)為這個(gè)分區(qū)的 Leader;當(dāng)然一個(gè)分區(qū)可以被復(fù)制到多個(gè) Broker 上來(lái)實(shí)現(xiàn)冗余,這樣當(dāng)存在 Broker 故障時(shí)可以將其分區(qū)重新分配到其他 Broker 來(lái)負(fù)責(zé)。下圖是一個(gè)樣例:

Kafka的四個(gè)基礎(chǔ)概念學(xué)習(xí)

Kafka 的一個(gè)關(guān)鍵性質(zhì)是日志保留(retention),我們可以配置主題的消息保留策略,譬如只保留一段時(shí)間的日志或者只保留特定大小的日志。當(dāng)超過(guò)這些限制時(shí),老的消息會(huì)被刪除。我們也可以針對(duì)某個(gè)主題單獨(dú)設(shè)置消息過(guò)期策略,這樣對(duì)于不同應(yīng)用可以實(shí)現(xiàn)個(gè)性化。

概念四:多集群

隨著業(yè)務(wù)發(fā)展,我們往往需要多集群,通常處于下面幾個(gè)原因:

基于數(shù)據(jù)的隔離;

基于安全的隔離;

多數(shù)據(jù)中心(容災(zāi))

當(dāng)構(gòu)建多個(gè)數(shù)據(jù)中心時(shí),往往需要實(shí)現(xiàn)消息互通。舉個(gè)例子,假如用戶(hù)修改了個(gè)人資料,那么后續(xù)的請(qǐng)求無(wú)論被哪個(gè)數(shù)據(jù)中心處理,這個(gè)更新需要反映出來(lái)。又或者,多個(gè)數(shù)據(jù)中心的數(shù)據(jù)需要匯總到一個(gè)總控中心來(lái)做數(shù)據(jù)分析。

上面說(shuō)的分區(qū)復(fù)制冗余機(jī)制只適用于同一個(gè) Kafka 集群內(nèi)部,對(duì)于多個(gè) Kafka 集群消息同步可以使用 Kafka 提供的 MirrorMaker 工具。本質(zhì)上來(lái)說(shuō),MirrorMaker 只是一個(gè) Kafka 消費(fèi)者和生產(chǎn)者,并使用一個(gè)隊(duì)列連接起來(lái)而已。它從一個(gè)集群中消費(fèi)消息,然后往另一個(gè)集群生產(chǎn)消息。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • LinkedIn
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    14459
  • kafka
    +關(guān)注

    關(guān)注

    0

    文章

    50

    瀏覽量

    5202
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    IGBT的四個(gè)主要參數(shù)

    IGBT的四個(gè)主要參數(shù)對(duì)于選擇合適的IGBT器件至關(guān)重要。本文將介紹IGBT的四個(gè)主要參數(shù):電壓等級(jí)、電流等級(jí)、開(kāi)關(guān)頻率和熱性能。 1. 電壓等級(jí) 電壓等級(jí)是IGBT的一個(gè)重要參數(shù),它決定了IGBT能夠承受的最大電壓。電壓等級(jí)的
    的頭像 發(fā)表于 07-25 11:05 ?2358次閱讀

    四個(gè)2輸入異或門(mén)數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《四個(gè)2輸入異或門(mén)數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 05-22 09:58 ?0次下載
    <b class='flag-5'>四個(gè)</b>2輸入異或門(mén)數(shù)據(jù)表

    四個(gè)2輸入正極和柵極數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《四個(gè)2輸入正極和柵極數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 05-17 10:28 ?0次下載
    <b class='flag-5'>四個(gè)</b>2輸入正極和柵極數(shù)據(jù)表

    四個(gè)2輸入正極和柵極數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《四個(gè)2輸入正極和柵極數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 05-16 10:22 ?0次下載
    <b class='flag-5'>四個(gè)</b>2輸入正極和柵極數(shù)據(jù)表

    四個(gè)2輸入異或門(mén)數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《四個(gè)2輸入異或門(mén)數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 05-13 11:04 ?0次下載
    <b class='flag-5'>四個(gè)</b>2輸入異或門(mén)數(shù)據(jù)表

    四個(gè)2輸入正極和柵極數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《四個(gè)2輸入正極和柵極數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 05-10 10:10 ?0次下載
    <b class='flag-5'>四個(gè)</b>2輸入正極和柵極數(shù)據(jù)表

    有源晶振四個(gè)腳是如何定義的?

    有源晶振四個(gè)腳是如何定義的?有源晶振型號(hào)類(lèi)型比較多,而且每一種型號(hào)的引腳定義都有所不同,接法也不是通用的。下面小揚(yáng)介紹一下有源晶振常用引腳識(shí)別法,以方便大家:有個(gè)點(diǎn)標(biāo)記的為1腳,按逆時(shí)針(管腳向下)分別為2、3、4。
    的頭像 發(fā)表于 04-28 15:37 ?1471次閱讀
    有源晶振<b class='flag-5'>四個(gè)</b>腳是如何定義的?

    四個(gè)引腳無(wú)源晶振的接線(xiàn)方法

    無(wú)源晶振是一種常用的被動(dòng)元件,用于產(chǎn)生穩(wěn)定的時(shí)鐘信號(hào)。它通常有四個(gè)引腳,分別是VCC、GND、OUT和NC。
    的頭像 發(fā)表于 01-23 18:15 ?5991次閱讀

    kafka基本原理詳解

    今天浩道跟大家分享一篇關(guān)于kafka相關(guān)原理的硬核干貨,可以說(shuō)即使你沒(méi)有接觸過(guò)kafka,也可以秒懂,一起看看!
    的頭像 發(fā)表于 01-03 09:57 ?842次閱讀
    <b class='flag-5'>kafka</b>基本原理詳解

    氮化鎵開(kāi)關(guān)管的四個(gè)電極是什么

    氮化鎵開(kāi)關(guān)管是一種新型的半導(dǎo)體器件,適用于高頻高壓控制信號(hào)的開(kāi)關(guān)應(yīng)用。它由四個(gè)電極組成,包括柵極(G,Gate)、源極(S,Source)、漏極(D,Drain)和襯底(B,Body)。 首先,我們
    的頭像 發(fā)表于 12-27 14:39 ?1022次閱讀

    SMT絲印技術(shù)的歷史發(fā)展的四個(gè)階段,你知道嗎?

    SMT絲印技術(shù)的歷史發(fā)展的四個(gè)階段,你知道嗎?
    的頭像 發(fā)表于 12-27 10:15 ?835次閱讀

    kafka支持哪些消息交付語(yǔ)義?

    在讀完kafka官方文檔,kafka設(shè)計(jì)里的消息交付語(yǔ)義一章后,給我的第一印象是內(nèi)容很抽象,于是草擬和總結(jié)了給個(gè)副標(biāo)題,并把相關(guān)內(nèi)容進(jìn)行了歸類(lèi);有些生澀的句子,盡量用大白話(huà)和舉例進(jìn)行說(shuō)明,并加入了總結(jié)。
    的頭像 發(fā)表于 12-22 11:27 ?448次閱讀
    <b class='flag-5'>kafka</b>支持哪些消息交付語(yǔ)義?

    如何保證kafka消息不丟失

    如果在簡(jiǎn)歷上寫(xiě)了使用過(guò)kafka消息中間件,面試官大概80%的概率會(huì)問(wèn)你:"如何保證kafka消息不丟失?"反正我是屢試不爽。
    的頭像 發(fā)表于 12-19 09:52 ?697次閱讀
    如何保證<b class='flag-5'>kafka</b>消息不丟失

    四個(gè)問(wèn)題幫你確定是否需要采用有源電纜(AEC)解決方案

    四個(gè)問(wèn)題幫你確定是否需要采用有源電纜(AEC)解決方案
    的頭像 發(fā)表于 12-05 14:38 ?954次閱讀
    <b class='flag-5'>四個(gè)</b>問(wèn)題幫你確定是否需要采用有源電纜(AEC)解決方案

    vlookup函數(shù)的四個(gè)參數(shù)含義

    VLOOKUP函數(shù)是一種用于在Excel中查找和提取數(shù)據(jù)的功能強(qiáng)大的函數(shù)。它的四個(gè)參數(shù)含義分別是:查找值、查找范圍、返回列索引和區(qū)域或表標(biāo)志。 首先,讓我們來(lái)詳細(xì)了解這四個(gè)參數(shù)的含義,并討論如何正確
    的頭像 發(fā)表于 12-01 09:57 ?6872次閱讀