Kafka流程分析-生產(chǎn)者

Kafka 工作流程分析

1杖剪、Kafka生產(chǎn)過程分析

(1)寫入方式

producer采用推(push)模式將消息發(fā)布到broker冻押,每條消息都被追加(append)到分區(qū)(patition)中,屬于順序?qū)懘疟P(順序?qū)懘疟P效率比隨機寫內(nèi)存要高盛嘿,保障kafka吞吐率)

(2)partition

說明:

  • 消息發(fā)送時都被發(fā)送到一個topic洛巢,其本質(zhì)就是一個目錄,而topic是由一些Partition Logs(分區(qū)日志)組成.
  • 每個Partition中的消息都是有序的次兆,生產(chǎn)的消息被不斷追加到Partition log上稿茉,其中的每一個消息都被賦予了一個唯一的offset值。

分區(qū)原因:

  • 提升拓展性:每個Partition可以通過調(diào)整以適應它所在的機器,而一個topic又可以有多個Partition組成漓库,因此整個集群就可以適應任意大小的數(shù)據(jù)了
  • 提高吞吐能力:在進行數(shù)據(jù)寫入時以 Partition 為單位進行寫入恃慧。

分區(qū)依據(jù):

public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {
        List<PartitionInfo> partitions = cluster.partitionsForTopic(topic);
        // (1) 指定了patition,則直接使用該 Partition
        int numPartitions = partitions.size();
        if (keyBytes == null) {
            int nextValue = nextValue(topic);
            List<PartitionInfo> availablePartitions = cluster.availablePartitionsForTopic(topic);
            if (availablePartitions.size() > 0) {
                int part = Utils.toPositive(nextValue) % availablePartitions.size();
                return availablePartitions.get(part).partition();
            } else {
                // no partitions are available, give a non-available partition
                return Utils.toPositive(nextValue) % numPartitions;
            }
        } else {
            // hash the keyBytes to choose a partition
            return Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;
        }
    }
  • 對于已經(jīng)指定了 partition 的渺蒿,則直接使用該partition痢士;
  • 未指定patition但指定key,通過對key的value進行hash出一個patition茂装;
  • patition和key都未指定良瞧,使用輪詢選出一個patition;
(3)Replica(副本)
Replica流程
(4)寫入流程

流程圖:

producer寫入流程

流程描述:

  • producer先從zookeeper的 "/brokers/.../state"節(jié)點找到該partition的leader
  • producer將消息發(fā)送給該leader
  • leader將消息寫入本地log
  • followers從leader pull消息
  • Follower將 pull到的消息寫入本地log
  • Follower 寫入成功值后向leader發(fā)送ACK
  • leader收到所有ISR中的replication的ACK后训唱,增加HW
  • 向producer發(fā)送ACK

2褥蚯、 Broker 保存消息

(1)存儲說明
  • 物理上把topic分成一個或多個patition,每個patition物理上對應一個文件夾(該文件夾存儲該patition的所有消息和索引文件)
  • Kafka讀取特定消息的時間復雜度為O(1);
  • 消息數(shù)據(jù)是存儲在partition文件夾下的*.log文件中的况增;
  • 消息存儲時常有兩個策略赞庶,分別為:
基于時間存儲策略:默認保留168小時(log.retention.hours=168)  
基于大小保留策略:默認保留 1G(log.retention.bytes=1073741824)
(2)Zk存儲結構
Zk存儲結構

3、consumer flow

(1) 高級API與低級API
  • kafka提供了兩套consumer API:高級Consumer API和低級Consumer API澳骤。
  • 高級API不需要自行去管理offset歧强,partition replica等,系統(tǒng)通過Zk自行管理为肮。(低級 API反之)
(2)Consumer Group(消費者組)

流程圖:

Consumer Group

描述說明:

  • Consumer Group 由多個Consumer 組成摊册,同時一個Consumer只有屬于一個Consumer Group。
  • Consumer Group 保證了其訂閱的Topic partition 會被該Consumer Group 中的Consumer消費颊艳。對于多個Consumer Group訂閱了同一個Topic茅特,每個Consumer Group之間互不影響。
  • 如果要實現(xiàn)一個消息被多個 consumer 消費棋枕,則可以將當consumer 單獨添加到單獨的Consumer Group中(反之白修,如果要實現(xiàn)一個消息 被一個 consumer 消費,則可以將當consumer 添加到同一個Consumer Group中)
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末重斑,一起剝皮案震驚了整個濱河市兵睛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窥浪,老刑警劉巖祖很,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異漾脂,居然都是意外死亡假颇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門符相,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拆融,“玉大人,你說我怎么就攤上這事啊终【当” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵蓝牲,是天一觀的道長趟脂。 經(jīng)常有香客問我,道長例衍,這世上最難降的妖魔是什么昔期? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮佛玄,結果婚禮上硼一,老公的妹妹穿的比我還像新娘。我一直安慰自己梦抢,他們只是感情好般贼,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奥吩,像睡著了一般哼蛆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上霞赫,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天腮介,我揣著相機與錄音,去河邊找鬼端衰。 笑死叠洗,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的旅东。 我是一名探鬼主播惕味,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼玉锌!你這毒婦竟也來了名挥?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤主守,失蹤者是張志新(化名)和其女友劉穎禀倔,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體参淫,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡救湖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了涎才。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鞋既。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡力九,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出邑闺,到底是詐尸還是另有隱情跌前,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布陡舅,位于F島的核電站抵乓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏靶衍。R本人自食惡果不足惜灾炭,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望颅眶。 院中可真熱鬧蜈出,春花似錦、人聲如沸涛酗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煤杀。三九已至眷蜈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沈自,已是汗流浹背酌儒。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留枯途,地道東北人忌怎。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像酪夷,于是被迫代替她去往敵國和親榴啸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345