KAFKA

KAFKA介紹:
https://www.cnblogs.com/seaspring/p/6138080.html

KAFKA:Controller
http://blog.csdn.net/zhanglh046/article/details/72821995

http://blog.csdn.net/jewes/article/details/42970799

https://www.cnblogs.com/huxi2b/p/6050778.html

KAFKA

KAFKA簡(jiǎn)介

  • Kafka由Linkedin開發(fā)的消息隊(duì)列德谅,使用Scala語言編寫
  • 分布式玄帕、多分區(qū)遥倦、多副本、基于發(fā)布/訂閱的消息系統(tǒng)
  • Kafka設(shè)計(jì)的初衷是希望作為一個(gè)統(tǒng)一的信息收集平臺(tái),能夠?qū)崟r(shí)的收集反饋信息毯炮,并能夠支撐較大的數(shù)據(jù)量分瘾,且具備良好的容錯(cuò)能力

KAFKA特性

  • 消息持久化:采用時(shí)間復(fù)雜度O(1)的磁盤結(jié)構(gòu)順序存儲(chǔ)
  • 高吞吐量:支持每秒百萬級(jí)別的消息
  • 易擴(kuò)展:新增機(jī)器适揉,集群無需停機(jī)窖剑,自動(dòng)感知
  • 高容錯(cuò):通過多分區(qū),多副本提供高容錯(cuò)性
  • 多客戶端支持:Java捌斧、PHP笛质、Python等
  • 實(shí)時(shí)性:進(jìn)入到Kafka的消息能夠立即被消費(fèi)者消費(fèi)

Kafka消息隊(duì)列的作用

  • 應(yīng)用程序解耦并行處理
  • 順序保證
  • 高吞吐率
  • 高容錯(cuò)、高可用
  • 可擴(kuò)展
  • 峰值處理

Kafka的原理

  • 在Kafka中捞蚂,發(fā)送消息者稱為Producer妇押,而消息拉取者稱為Consumer ,通常consumer是被定義在Consumer Group里
  • Kafka通過Zookeeper管理集群


  • Kafka集群由多個(gè)實(shí)例組成姓迅,每個(gè)節(jié)點(diǎn)稱為Broker,對(duì)消息保存時(shí)根 據(jù)Topic進(jìn)行歸類
  • 一個(gè)Topic可以被劃分為多個(gè)Partition
  • 每個(gè)Partition可以有多個(gè)副本


  • Partition內(nèi)順序存儲(chǔ)肩杈,寫入新消息采用追加的方式解寝,消費(fèi)消息采用 FIFO的方式順序拉取消息
  • 一個(gè)Topic可以有多個(gè)分區(qū),Kafka只保證同一個(gè)分區(qū)內(nèi)有序与学,不保 證Topic整體(多個(gè)分區(qū)之間)有序


  • Consumer Group(CG)索守,為了加快讀取速度抑片,多個(gè)consumer可以劃 分為一個(gè)組,并行消費(fèi)一個(gè)Topic
  • 一個(gè)Topic可以由多個(gè)CG訂閱截汪,多個(gè)CG之間是平等的植捎,同一個(gè)CG 內(nèi)可以有一個(gè)或多個(gè)consumer焰枢,同一個(gè)CG內(nèi)的consumer之間是競(jìng)爭(zhēng) 關(guān)系,一個(gè)消息在一個(gè)CG內(nèi)的只能被一個(gè)consumer消費(fèi)


Kafka核心概念

  • Broker:啟動(dòng)kafka的一個(gè)實(shí)例就是一個(gè)broker暑椰,一個(gè)kafka集 群可以啟動(dòng)多個(gè)broker
  • Topic:kafka中同一種類型數(shù)據(jù)集的名稱荐绝,相當(dāng)于數(shù)據(jù)庫中 的表,productor將同一類型的數(shù)據(jù)寫入的同一個(gè)topic下召夹, consumer從一個(gè)topic消費(fèi)同一類型的數(shù)據(jù)
  • Partition:一個(gè)topic可以設(shè)置多個(gè)分區(qū)委造,相當(dāng)于把一個(gè)數(shù)據(jù) 集分成多份分別放到不同的分區(qū)中存儲(chǔ)昏兆,一個(gè)topic可以有一 個(gè)或者多個(gè)分區(qū),分區(qū)內(nèi)消息有序
  • Replication:副本爬虱,一個(gè)partition可以設(shè)置一個(gè)或者多個(gè)副本 跑筝,副本主要保證系統(tǒng)能夠持續(xù)不丟失的對(duì)外提供服務(wù),提高 系統(tǒng)的容錯(cuò)能力
  • Producer:消息生產(chǎn)者赞警,負(fù)責(zé)向kafka中發(fā)布消息
  • Consumer Group:消費(fèi)者所屬組,一個(gè)Consumer Group可以包含一個(gè)或者多個(gè)consumer世剖,當(dāng)一個(gè)topic被一個(gè)Consumer Group消費(fèi)的時(shí)候笤虫,Consumer Group內(nèi)只能有一個(gè)consumer消費(fèi)同一條消息,不會(huì)出現(xiàn)同一個(gè)Consumer Group多個(gè)consumer同時(shí)消費(fèi)一條消息造成一個(gè)消息被一個(gè)Consumer Group消費(fèi)多次的情況
  • Consumer:消息消費(fèi)者酬凳,consumer從kafka指定的主題中拉取消息
  • Zookeeper:Zookeeper在kafka集群中主要用于協(xié)調(diào)管理遭庶,Kafka將
    元數(shù)據(jù)信息保存在Zookeeper中峦睡,通過Zookeeper管理維護(hù)整個(gè)Kafka 集群的動(dòng)態(tài)擴(kuò)展、各個(gè)Broker負(fù)載均衡拉队、Partition leader選舉等

Kafka的存儲(chǔ)

  • 每個(gè)partition的副本是一個(gè)目錄
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:07 topicnewtest1-0
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:07 topicnewtest1-2
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:08 topicnewtest1-3
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:08 topicnewtest1-4
[hadoop@hadoop4 kafka-logs]$ tree topicnewtest1-0
topicnewtest1-0
├── 00000000000000000000.index
├── 00000000000000000000.log
└── 00000000000000000000.timeindex
  • Segment:段文件阻逮,kafka中最小數(shù)據(jù)存儲(chǔ)單位叔扼,一個(gè)partition包含多 個(gè)segment文件,每個(gè)segment以message在partition中的起始偏移量 命名以log結(jié)尾的文件
  • Offset:消息在分區(qū)中的偏移量鳍咱,用來在分區(qū)中唯一的標(biāo)識(shí)這個(gè)消 息



    圖中的文件名是偏移量第一個(gè)文件記錄了0--368768的數(shù)據(jù),第二個(gè)記錄了368769-737337的數(shù)據(jù)
    查看topic的信息可以發(fā)現(xiàn):

[hadoop@hadoop4 kafka_2.11-0.10.2.1]$ bin/kafka-topics.sh --describe --zookeeper hadoop0:2181 --topic topicnewtest1
Topic:topicnewtest1 PartitionCount:5    ReplicationFactor:2 Configs:
    Topic: topicnewtest1    Partition: 0    Leader: 2   Replicas: 2,0   Isr: 2,0
    Topic: topicnewtest1    Partition: 1    Leader: 0   Replicas: 0,1   Isr: 1,0
    Topic: topicnewtest1    Partition: 2    Leader: 1   Replicas: 1,2   Isr: 2,1
    Topic: topicnewtest1    Partition: 3    Leader: 2   Replicas: 2,1   Isr: 2,1
    Topic: topicnewtest1    Partition: 4    Leader: 0   Replicas: 0,2   Isr: 2,0

topicnewtest1這個(gè)主題中,有五個(gè)partition,每個(gè)partition有2個(gè)replication,第0個(gè)partition的Leader是broker為2的節(jié)點(diǎn),replication是在2,0,這兩個(gè)節(jié)點(diǎn) ISR 是2,和 0 節(jié)點(diǎn).查看broker0 的節(jié)點(diǎn)log目錄中,存在partition0 的副本:

[hadoop@hadoop2 kafka-logs]$ ll
total 28
-rw-rw-r--. 1 hadoop hadoop    4 Jan 31 10:07 cleaner-offset-checkpoint
-rw-rw-r--. 1 hadoop hadoop   54 Jan 31 09:32 meta.properties
-rw-rw-r--. 1 hadoop hadoop   58 Jan 31 11:44 recovery-point-offset-checkpoint
-rw-rw-r--. 1 hadoop hadoop   58 Jan 31 11:45 replication-offset-checkpoint
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:27 topicnewtest1-0
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:27 topicnewtest1-1
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 31 10:27 topicnewtest1-4
[hadoop@hadoop2 kafka-logs]$ pwd
/home/hadoop/apps/kafka_2.11-0.10.2.1/kafka-logs
[hadoop@hadoop2 kafka-logs]$

Kafka存儲(chǔ)-索引文件

  • Kafka為了提高寫入谤辜、查詢速度在partition文件夾下每一個(gè)segment log文件都有同名的索引文件丑念,在kafka0.10以后的版本中會(huì)存在兩個(gè) 索引文件结蟋,一個(gè)用offset做名字以index結(jié)尾的索引文件,我們稱為 偏移量索引文件推正。一個(gè)是以消息寫入的時(shí)間戳為做名字以timeinde 結(jié)尾的索引文件,我們稱為時(shí)間戳索引文件乳丰。


偏移量索引文件

  • 以偏移量作為名稱,index為后綴
  • 索引內(nèi)容格式:offset,position
  • 采用稀疏存儲(chǔ)方式
  • 通過log.index.interval.bytes設(shè)置索引跨度


kafka高可用實(shí)現(xiàn)

  • 多分區(qū)副本
    一個(gè)topic可以有多個(gè)分區(qū)夜郁,每個(gè)分區(qū)可以有多個(gè)副本
    一個(gè)分區(qū)的多個(gè)副本選舉一個(gè)leader粘勒,由leader負(fù)責(zé)讀寫,其他副
    本作為follower從leader同步消息
    同一個(gè)partition的不同副本分布到不同的broker

  • kafka controller 選舉
    從集群中的broker選舉出一個(gè)Broker作為Controller控制節(jié)點(diǎn)
    負(fù)責(zé)整個(gè)集群的管理事富,如Broker管理乘陪、Topic管理啡邑、Partition
    Leader選舉等
    選舉過程通過向Zookeeper創(chuàng)建臨時(shí)znode實(shí)現(xiàn),為被選中的
    Broker監(jiān)聽Controller的znode贵扰,等待下次選舉

  • kafka partition Leader選舉

    • Controller負(fù)責(zé)分區(qū)Leader選舉
    • ISR列表
      • Follower批量從Leader拖取數(shù)據(jù)
      • Leader跟蹤其 保持同步flower列表ISR( In Sync Replica)流部,ISR作為下次選主的候選列表
      • Follower心跳超時(shí)或者消息落后太多枝冀,將被移除出ISR
        Leader失敗后,從ISR列表中選擇一個(gè)Follower作為新的Leader

總結(jié):
一個(gè)broker對(duì)應(yīng)多個(gè)topic,一個(gè)topic對(duì)應(yīng)多個(gè)分區(qū),一個(gè)topic可以被多個(gè)consumer group消費(fèi),但只能被同一個(gè)consumer group 中的一個(gè)consumer消費(fèi).
每個(gè)partition有多個(gè)replication,每個(gè)partition有一個(gè)Leader.
分區(qū)內(nèi)有序,整體無序.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瓷马,一起剝皮案震驚了整個(gè)濱河市欧聘,隨后出現(xiàn)的幾起案子端盆,更是在濱河造成了極大的恐慌费封,老刑警劉巖弓摘,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件韧献,死亡現(xiàn)場(chǎng)離奇詭異研叫,居然都是意外死亡嚷炉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門绘证,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嚷那,“玉大人车酣,你說我怎么就攤上這事索绪。” “怎么了娘摔?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵唤反,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我肠缨,道長(zhǎng)盏阶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任魄眉,我火速辦了婚禮坑律,結(jié)果婚禮上囊骤,老公的妹妹穿的比我還像新娘也物。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著竭讳,像睡著了一般绢慢。 火紅的嫁衣襯著肌膚如雪灿渴。 梳的紋絲不亂的頭發(fā)上骚露,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音缚窿,去河邊找鬼棘幸。 笑死倦零,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蹋嵌。 我是一名探鬼主播栽烂,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼钙态,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼册倒!你這毒婦竟也來了驻子?” 一聲冷哼從身側(cè)響起崇呵,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎汗销,沒想到半個(gè)月后弛针,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體削茁,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡慰丛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年璧帝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了睬隶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苏潜。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贴唇,死狀恐怖戳气,靈堂內(nèi)的尸體忽然破棺而出瓶您,到底是詐尸還是另有隱情纲仍,我是刑警寧澤郑叠,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布寇僧,位于F島的核電站嘁傀,受9級(jí)特大地震影響心包,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜区宇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卧晓。 院中可真熱鬧逼裆,春花似錦胜宇、人聲如沸桐愉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碎罚。三九已至荆烈,卻和暖如春憔购,著一層夾襖步出監(jiān)牢的瞬間玫鸟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人葵萎。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像卷雕,于是被迫代替她去往敵國(guó)和親爽蝴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蝎亚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容