KAFKA 常用命令解析

創(chuàng)建kafka topic

bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic topicname --partitions 12 --replication-factor 2

注:?partitions指定topic分區(qū)數(shù)榛搔,replication-factor指定topic每個分區(qū)的副本數(shù)

partitions分區(qū)數(shù):

partitions :分區(qū)數(shù)倦始,控制topic將分片成多少個log∶畋裕可以顯示指定吉懊,如果不指定則會使用broker(server.properties)中的num.partitions配置的數(shù)量

雖然增加分區(qū)數(shù)可以提供kafka集群的吞吐量、但是過多的分區(qū)數(shù)或者或是單臺服務(wù)器上的分區(qū)數(shù)過多假勿,會增加不可用及延遲的風(fēng)險(xiǎn)借嗽。因?yàn)槎嗟姆謪^(qū)數(shù),意味著需要打開更多的文件句柄转培、增加點(diǎn)到點(diǎn)的延時恶导、增加客戶端的內(nèi)存消耗。

分區(qū)數(shù)也限制了consumer的并行度浸须,即限制了并行consumer消息的線程數(shù)不能大于分區(qū)數(shù)

分區(qū)數(shù)也限制了producer發(fā)送消息是指定的分區(qū)惨寿。如創(chuàng)建topic時分區(qū)設(shè)置為1,producer發(fā)送消息時通過自定義的分區(qū)方法指定分區(qū)為2或以上的數(shù)都會出錯的删窒;這種情況可以通過alter –partitions 來增加分區(qū)數(shù)裂垦。

replication-factor副本

replication factor 控制消息保存在幾個broker(服務(wù)器)上,一般情況下等于broker的個數(shù)肌索。

如果沒有在創(chuàng)建時顯示指定或通過API向一個不存在的topic生產(chǎn)消息時會使用broker(server.properties)中的default.replication.factor配置的數(shù)量

查看所有topic列表

bin/kafka-topics.sh --zookeeper localhost:2181 --list

查看指定topic信息

bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic t_cdr


控制臺向topic生產(chǎn)數(shù)據(jù)

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic t_cdr

控制臺消費(fèi)topic的數(shù)據(jù)

bin/kafka-console-consumer.sh? --zookeeper localhost:2181? --topic t_cdr --from-beginning

查看topic某分區(qū)偏移量最大(薪堵!)值

bin/kafka-run-class.sh kafka.tools.GetOffsetShell --topic hive-mdatabase-hostsltable? --time -1 --broker-list localhost:9092 --partitions 0

注:?time為-1時表示最大值,time為-2時表示最小值

增加topic分區(qū)數(shù)

為topic t_cdr 增加10個分區(qū)

bin/kafka-topics.sh --zookeeper localhost:2181? --alter --topic t_cdr --partitions 10

刪除topic,慎用晕换,只會刪除zookeeper中的元數(shù)據(jù)午乓,消息文件須手動刪除

bin/kafka-run-class.sh kafka.admin.DeleteTopicCommand --zookeeper localhost:2181 --topic t_cdr

查看topic消費(fèi)進(jìn)度

這個會顯示出consumer group的offset情況, 必須參數(shù)為--group闸准, 不指定--topic益愈,默認(rèn)為所有topic

Displays the: Consumer Group, Topic, Partitions, Offset, logSize, Lag, Owner for the specified set of Topics and Consumer Group

bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker

required argument: [group]

Option Description

------ -----------

--broker-info Print broker info

--group Consumer group.

--help Print this message.

--topic Comma-separated list of consumer

? topics (all topics if absent).

--zkconnect ZooKeeper connect string. (default: localhost:2181)

Example,

bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --group pv

Group? ? ? ? ? Topic? ? ? ? ? ? ? Pid Offset? logSize? ? Lag? ? Owner

pv? ? ? ? ? ? ? page_visits? ? ? ? 0? 21? ? ? 21? ? ? ? 0? ? ? none

pv? ? ? ? ? ? ? page_visits? ? ? ? 1? 19? ? ? 19? ? ? ? 0? ? ? none

pv? ? ? ? ? ? ? page_visits? ? ? ? 2? 20? ? ? 20? ? ? ? 0? ? ? none


Kafka 原理?

Kafka是最初由Linkedin公司開發(fā),是一個分布式夷家、分區(qū)的蒸其、多副本的、多訂閱者瘾英,基于zookeeper協(xié)調(diào)的分布式日志系統(tǒng)(也可以當(dāng)做MQ系統(tǒng))枣接,常見可以用于web/nginx日志、訪問日志缺谴,消息服務(wù)等等但惶,Linkedin于2010年貢獻(xiàn)給了Apache基金會并成為頂級開源項(xiàng)目。

Kafka主要設(shè)計(jì)目標(biāo)如下:

以時間復(fù)雜度為O(1)的方式提供消息持久化能力湿蛔,即使對TB級以上數(shù)據(jù)也能保證常數(shù)時間的訪問性能膀曾。

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

支持Kafka Server間的消息分區(qū)添谊,及分布式消費(fèi),同時保證每個partition內(nèi)的消息順序傳輸察迟。

同時支持離線數(shù)據(jù)處理和實(shí)時數(shù)據(jù)處理斩狱。

Kafka專用術(shù)語:

Broker:消息中間件處理結(jié)點(diǎn),一個Kafka節(jié)點(diǎn)就是一個broker扎瓶,多個broker可以組成一個Kafka集群所踊。

Topic:一類消息,Kafka集群能夠同時負(fù)責(zé)多個topic的分發(fā)概荷。

Partition:topic物理上的分組秕岛,一個topic可以分為多個partition,每個partition是一個有序的隊(duì)列误证。

Segment:partition物理上由多個segment組成继薛。

offset:每個partition都由一系列有序的、不可變的消息組成愈捅,這些消息被連續(xù)的追加到partition中遏考。partition中的每個消息都有一個連續(xù)的序列號叫做offset,用于partition唯一標(biāo)識一條消息

topic & partition

  在Kafka文件存儲中蓝谨,同一個topic下有多個不同partition诈皿,每個partition為一個目錄林束,partiton命名規(guī)則為topic名稱+有序序號,第一個partiton序號從0開始稽亏,序號最大值為partitions數(shù)量減1壶冒。

  這里也就是broker——>topic——>partition——>segment?

  segment file組成:由2大部分組成,分別為index file和data file截歉,此2個文件一一對應(yīng)胖腾,成對出現(xiàn),后綴".index"和“.log”分別表示為segment索引文件瘪松、數(shù)據(jù)文件咸作。

  segment文件命名規(guī)則:partion全局的第一個segment從0開始,后續(xù)每個segment文件名為上一個segment文件最后一條消息的offset值宵睦。數(shù)值最大為64位long大小记罚,19位數(shù)字字符長度,沒有數(shù)字用0填充壳嚎。

  segment中index與data file對應(yīng)關(guān)系物理結(jié)構(gòu)如下:

  索引文件存儲大量元數(shù)據(jù)桐智,數(shù)據(jù)文件存儲大量消息,索引文件中元數(shù)據(jù)指向?qū)?yīng)數(shù)據(jù)文件中message的物理偏移地址烟馅。

  其中以索引文件中元數(shù)據(jù)3,497為例说庭,依次在數(shù)據(jù)文件中表示第3個message(在全局partiton表示第368772個message),以及該消息的物理偏移地址為497郑趁。

副本(replication)策略

  ? 1.數(shù)據(jù)同步

    kafka 0.8后提供了Replication機(jī)制來保證Broker的failover刊驴。

    引入Replication之后,同一個Partition可能會有多個Replica寡润,而這時需要在這些Replication之間選出一個Leader捆憎,Producer和Consumer只與這個Leader交互,其它Replica作為Follower從Leader中復(fù)制數(shù)據(jù)梭纹。

  2.副本放置策略

Kafka分配Replica的算法如下(注意!!! 下面的broker掷酗、partition副本數(shù)這些編號都是從0開始編號的):

????將所有存活的N個Brokers和待分配的Partition排序

將第i個Partition分配到第(i mod n)個Broker上读虏,這個Partition的第一個Replica存在于這個分配的Broker上陕悬,并且會作為partition的優(yōu)先副本(?這里就基本說明了一個topic的partition在集群上的大致分布情況?)

      將第i個Partition的第j個Replica分配到第((i + j) mod n)個Broker上

      假設(shè)集群一共有4個brokers指孤,一個topic有4個partition欢摄,每個Partition有3個副本金顿。下圖是每個Broker上的副本分配情況醒颖。

對于Kafka而言剿另,定義一個Broker是否“活著”包含兩個條件:

一是它必須維護(hù)與ZooKeeper的session(這個通過ZooKeeper的Heartbeat機(jī)制來實(shí)現(xiàn))雇锡。

二是Follower必須能夠及時將Leader的消息復(fù)制過來逛钻,不能“落后太多”。

重點(diǎn)在于kafka中partition的副本放置算法锰提,同時間接說明了一個topic的partition在集群中的分配情況...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末曙痘,一起剝皮案震驚了整個濱河市芳悲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌边坤,老刑警劉巖名扛,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異茧痒,居然都是意外死亡肮韧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門旺订,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弄企,“玉大人,你說我怎么就攤上這事区拳【辛欤” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵樱调,是天一觀的道長约素。 經(jīng)常有香客問我,道長本涕,這世上最難降的妖魔是什么业汰? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮菩颖,結(jié)果婚禮上样漆,老公的妹妹穿的比我還像新娘。我一直安慰自己晦闰,他們只是感情好放祟,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呻右,像睡著了一般跪妥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上声滥,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天眉撵,我揣著相機(jī)與錄音,去河邊找鬼落塑。 笑死纽疟,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的憾赁。 我是一名探鬼主播污朽,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼龙考!你這毒婦竟也來了蟆肆?” 一聲冷哼從身側(cè)響起矾睦,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎炎功,沒想到半個月后枚冗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛇损,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年官紫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片州藕。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡束世,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出床玻,到底是詐尸還是另有隱情毁涉,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布锈死,位于F島的核電站贫堰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏待牵。R本人自食惡果不足惜其屏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缨该。 院中可真熱鬧偎行,春花似錦、人聲如沸贰拿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膨更。三九已至妙真,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間荚守,已是汗流浹背珍德。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矗漾,地道東北人锈候。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像缩功,于是被迫代替她去往敵國和親晴及。 傳聞我的和親對象是個殘疾皇子都办,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

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