kafka學(xué)習(xí)(4) 主題與分區(qū)

主題和分區(qū)是kafka的核心概念, 主題作為消息的歸類, 可以細(xì)分為一個(gè)或者多個(gè)分區(qū), 分區(qū)可以看做是消息的二次歸類, 分區(qū)的劃分不僅為kafka提供了可伸縮性, 水平拓展的功能, 還通過多副本機(jī)制來為kafka提供數(shù)據(jù)冗雜以提高數(shù)據(jù)可靠性.

創(chuàng)建主題

在kafka配置文件中, 如果auto.create.topics.enable=true,則當(dāng)生產(chǎn)者向一個(gè)未創(chuàng)建的主題發(fā)送消息或者消費(fèi)者從一個(gè)未創(chuàng)建的主題拉取消息時(shí), 會(huì)自動(dòng)創(chuàng)建一個(gè)num.partitions=1(默認(rèn))和default.replication.factor=1(默認(rèn))的主題, 建議關(guān)閉設(shè)為false
使用kafka-topic.sh創(chuàng)建主題
kafka-topics --zookeeper cloudera02/kafka --create --topic test_gp --partitions 4 --replication-factor 2
執(zhí)行完成后會(huì)在kafka的log.dir或者log.dirs目錄下創(chuàng)建對應(yīng)的主題分區(qū)文件夾

[root@cloudera01 data]# ls |grep test_gp
test_gp-0
test_gp-2
[root@cloudera01 data]# ssh cloudera02
Last login: Thu Jul  2 18:08:19 2020 from cloudera03
[root@cloudera02 ~]# cd /home/kafka/data/
[root@cloudera02 data]# ls |grep test_gp
test_gp-1
test_gp-2
test_gp-3
[root@cloudera02 data]# ssh cloudera03
Last login: Thu Jul  2 18:07:52 2020 from cloudera01
[root@cloudera03 ~]# cd /home/kafka/data/
[root@cloudera03 data]# ls |grep test_gp
test_gp-0
test_gp-1
test_gp-3

三個(gè)broker節(jié)點(diǎn)一共創(chuàng)建了8個(gè)文件夾, 是4個(gè)分區(qū), 2個(gè)備份相乘的結(jié)果, 每個(gè)副本就是一個(gè)日志文件


主題,分區(qū),副本和Log日志的關(guān)系.png

主題和分區(qū)都是提供給上層用戶的抽象, 而在副本層面或者說在Log層面才是真正的物理存儲(chǔ)
同一個(gè)分區(qū)中的多個(gè)副本必須分布在不同的broker中(機(jī)器節(jié)點(diǎn)), 這樣才能提供有效的數(shù)據(jù)冗雜

kafka-topics.sh中zookeeper, partitions, replication-factor和topic者四個(gè)參數(shù)分別表示zookeeper鏈接地址, 分區(qū)數(shù), 副本因子和主題名稱, 還有其他指令命令, 包括create, list, describe, alter, delete
可以通過describe指令來查看分區(qū)副本的分配細(xì)節(jié)

[root@cloudera02 ~]# kafka-topics --describe --zookeeper cloudera02/kafka --topic test_gp
Topic:test_gp   PartitionCount:4    ReplicationFactor:2 Configs:
    Topic: test_gp  Partition: 0    Leader: 78  Replicas: 78,77 Isr: 78,77
    Topic: test_gp  Partition: 1    Leader: 77  Replicas: 77,78 Isr: 77,78
    Topic: test_gp  Partition: 2    Leader: 78  Replicas: 78,77 Isr: 78,77
    Topic: test_gp  Partition: 3    Leader: 77  Replicas: 77,78 Isr: 77,7

Topic表示主題名稱, Partition表示分區(qū)號(hào), PartitionCount表示主題中的分區(qū)個(gè)數(shù), ReplicationFactor表示副本因子,下面的Leader表示Leader副本所在的brokerid等等

創(chuàng)建主題時(shí)主題名不能與已經(jīng)存在的主題同名 ,否則會(huì)報(bào)錯(cuò)

20/07/02 18:34:45 ERROR admin.TopicCommand$: org.apache.kafka.common.errors.TopicExistsException: Topic 'test_gp' already exists.

可以使用if-not-exists參數(shù)來避免這個(gè)問題,如果有重名則不創(chuàng)建, 也不報(bào)錯(cuò), 如果沒有出現(xiàn)重名, 則會(huì)成功創(chuàng)建

[root@cloudera02 data]# kafka-topics --zookeeper cloudera02/kafka --create --topic test_gp --partitions 4 --replication-factor 2 --if-not-exists

主題名如果存在"." kafka會(huì)自動(dòng)把"."轉(zhuǎn)化為下劃線"", 所以topic.1_2和topic_1.2創(chuàng)建的主題名是一樣的, 會(huì)報(bào)沖突
kafka主題的命名不推薦以雙下劃線
_開頭, 雙下劃線一般是kafka的內(nèi)部主題, 也不能只有"."

查看主題

使用list 和describe 指令來查看主題
通過list可以查看當(dāng)前所有可用的主題

kafka-topics --zookeeper cloudera02/kafka --list

使用describe查看單個(gè)或者多個(gè)主題的信息, 多個(gè)主題之間用逗號(hào)隔開

kafka-topics --describe --zookeeper cloudera02/kafka --topic test_gp,test_pg
Topic:test_gp   PartitionCount:4    ReplicationFactor:2 Configs:
    Topic: test_gp  Partition: 0    Leader: 79  Replicas: 79,78 Isr: 79,78
    Topic: test_gp  Partition: 1    Leader: 77  Replicas: 77,79 Isr: 77,79
    Topic: test_gp  Partition: 2    Leader: 78  Replicas: 78,77 Isr: 78,77
    Topic: test_gp  Partition: 3    Leader: 79  Replicas: 79,77 Isr: 79,77
Topic:test_pg   PartitionCount:3    ReplicationFactor:2 Configs:
    Topic: test_pg  Partition: 0    Leader: 77  Replicas: 77,78 Isr: 78,77
    Topic: test_pg  Partition: 1    Leader: 78  Replicas: 78,77 Isr: 78,77
    Topic: test_pg  Partition: 2    Leader: 77  Replicas: 77,78 Isr: 78,77

修改主題

主題創(chuàng)建好之后可以對其進(jìn)行修改, 包括修改分區(qū)數(shù)等等, 使用alter指令

[root@cloudera02 data]# kafka-topics --zookeeper cloudera02/kafka --alter --topic test_gp --partitions 5

建議在一開始就設(shè)置好分區(qū), 避免進(jìn)行調(diào)整, 目前kafka只支持增加分區(qū)數(shù), 不支持減小分區(qū)數(shù)

分區(qū)管理

優(yōu)先副本的選舉

分區(qū)使用多副本機(jī)制來提升可靠性,但只有l(wèi)eader副本對外提供讀寫

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旋炒,一起剝皮案震驚了整個(gè)濱河市憨琳,隨后出現(xiàn)的幾起案子谣沸,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枯饿,死亡現(xiàn)場離奇詭異番川,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)懈糯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門涤妒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赚哗,你說我怎么就攤上這事她紫。” “怎么了屿储?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵贿讹,是天一觀的道長。 經(jīng)常有香客問我够掠,道長民褂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任疯潭,我火速辦了婚禮赊堪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘竖哩。我一直安慰自己哭廉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布期丰。 她就那樣靜靜地躺著群叶,像睡著了一般吃挑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上街立,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天舶衬,我揣著相機(jī)與錄音,去河邊找鬼赎离。 笑死逛犹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梁剔。 我是一名探鬼主播虽画,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼荣病!你這毒婦竟也來了码撰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤个盆,失蹤者是張志新(化名)和其女友劉穎脖岛,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颊亮,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柴梆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了终惑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绍在。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖雹有,靈堂內(nèi)的尸體忽然破棺而出偿渡,到底是詐尸還是另有隱情,我是刑警寧澤件舵,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布卸察,位于F島的核電站,受9級特大地震影響铅祸,放射性物質(zhì)發(fā)生泄漏坑质。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一临梗、第九天 我趴在偏房一處隱蔽的房頂上張望涡扼。 院中可真熱鬧,春花似錦盟庞、人聲如沸吃沪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽票彪。三九已至红淡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間降铸,已是汗流浹背在旱。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留推掸,地道東北人桶蝎。 一個(gè)月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像谅畅,于是被迫代替她去往敵國和親登渣。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354