Kafka 基礎(chǔ)概念:Message & Topic

What's kafka

kafka.jpg

What's kafka

  • Kafka 可以提供 MQ 功能:發(fā)布 & 訂閱消息
  • Kafka 可以提供 stream processing 功能
  • Kafka 提供對 messages/ streams 的存儲功能(通過配置刃跛,決定存儲的 retention,當(dāng)然苛萎,本質(zhì)上我們不能把 Kafka 當(dāng)成真正的存儲系統(tǒng)來用)
  • Kafka 是 distributed system桨昙,搭建 cluster 來靈活動態(tài)的伸縮容

Kafka vs Messaging system

Kafka 是一個 MQ 系統(tǒng),支持 publish & subscribe messages腌歉,就像 ActiveMQ, RabbitMQ蛙酪,核心就是處理消息,提供 producer & consumer 的解耦翘盖。
Kafka 和普通 MQ 系統(tǒng)的真正不同在于它的 stream processing capabilities桂塞,可以通過該功能讀取 streams & 動態(tài)的輸出 streams。

Kafka vs RabbitMQ

  • RabbitMQ 不會存數(shù)據(jù)馍驯,沒有消費者的話藐俺,msg 就丟了
  • RabbitMQ 支持靈活的 exchange 策略,Kafka 的 topic 不支持
  • Kafka 需要 Zookeeper 來管理 cluster泥彤,RabbitMQ 不需要
  • Kafka 對 Java 友好
  • Kafka 的社區(qū)活躍度比 RabbitMQ 高

Kafka vs Big data systems

Hadoop 支持大規(guī)模的 data 存儲 & 周期性的處理文件數(shù)據(jù)欲芹。
Kafka 側(cè)重于提供實時、低延遲的大量 data 處理能力

Kafka vs ETL tools

ETL 的主要能力在于:從一個系統(tǒng)中獲取到數(shù)據(jù)吟吝,插入到新的系統(tǒng)中菱父。Kafka 也可以提供該能力。

Summary

Kafka 通過抽象數(shù)據(jù)流的概念,把以上三種類型系統(tǒng)的能力結(jié)合了起來浙宜。而 stream processing 正是 Kafka 的突出亮點官辽。

Messages and Batches

Messages

kafka 中 message 是可以持久化一定時間的,但是不同的配置 (retention)會影響 messages 保留的時間長短粟瞬。觸發(fā)閾值時同仆,消息會被刪除。

retention 是針對 topic 來配置的裙品,可以配置的項有兩個:

  • log.retention.ms: Retention by time is performed by examining the last modified time (mtime) on each log segment file on disk.
  • log.retention.bytes: all retention is performed for an individual partition, not the topic.
    If you have specified a value for both log.retention.bytes and log.retention.ms (or another parameter for retention by time), messages may be removed when either criteria is met.

不同的業(yè)務(wù)場景對 message 丟失俗批、重復(fù)、延遲的忍耐程度不同市怎,需要使用不同的配置參數(shù)岁忘、不同的 API

Batches

Batches 是一組 messages。Batches 中的 messages 擁有相同的 topic and partition区匠。
producer client 創(chuàng)建消息后干像,實際上會先緩存在本地的 buffer 中,等收集到一定量后驰弄,batches 發(fā)送給 broker麻汰。這種方式提升了效率,但導(dǎo)致了消息發(fā)送的延遲戚篙∈惨遥可以根據(jù)業(yè)務(wù)需求,通過配置 batch 的 size 來調(diào)節(jié)延遲已球。

Serializer and deserializer

message 在網(wǎng)絡(luò)間傳遞時臣镣,是需要 serialize 的,這時就需要有 serializer智亮。

kafka 中有以下幾種 serializer:

  • string serializer
  • Custom Serializer
  • Serializing Using Apache Avro

默認(rèn)的 string serializer 不夠靈活忆某,custom serializer 又需要投入大量的時間開發(fā),比較建議使用現(xiàn)成的 serializer 工具阔蛉,如 Apache Avro弃舒。Avro 通過 schema 的概念很好的實現(xiàn)了 serialize & deserialize 的功能。schemas 存儲在獨立的 register 中状原。producer & consumer 都從 schema repository 中讀取 schema 來達(dá)到自動更新兩端的能力聋呢。


message registry.jpg

Topic

kafka 中的消息是按 topic 來組織的〉咔可以把 topic 理解成數(shù)據(jù)庫中 table 的概念削锰。

Partitions

partition 是 topic scale 的重要手段,它跟存儲系統(tǒng)中的分片是一個概念毕莱。topic split 成多個 partitions器贩,topic 中的 messages 分布到不同的 partitions 中颅夺,平衡負(fù)載,提高寫性能蛹稍,同時通過增加 consumer group 中 consumers 的個數(shù)吧黄,達(dá)到提高讀性能的目的。

kafka 可以保證單個 partition 上的 msg 是有序的唆姐,但是在各個 partition 間拗慨,是無法維持一個全局有序的。

如何決定消息落到哪個 partition 上:

  1. 不指定 message 的 partition & key 參數(shù)奉芦,根據(jù) round-robin algorithm 赵抢,隨機(jī)落到某個 partition
  2. 指定 message 的 key
    2.1 默認(rèn)的 partitioner 對 key 應(yīng)用一定的 hash 算法,來決定 partition 位置
    2.2 默認(rèn)的 key partition 算法在某種業(yè)務(wù)場景下仗阅,會導(dǎo)致各個 partition 的數(shù)據(jù)量嚴(yán)重不平衡。根據(jù)業(yè)務(wù)場景自定義 partitioner国夜,對 key 應(yīng)用自定義的算法來分配 partition 位置
  3. 指定 partition减噪,則忽略 key,直接按照配置的 partition 去存儲消息

改變 topic 的 partition 個數(shù)后车吹,相同 key 的 messages 在改變前后可能分配到不同的 partition 中筹裕,如果業(yè)務(wù)系統(tǒng)對此敏感,則建議:
1窄驹、初始時朝卒,估算好恰當(dāng)?shù)摹⒆銐虼蟮?partitions
2乐埠、初始化后抗斤,盡量不改

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市丈咐,隨后出現(xiàn)的幾起案子瑞眼,更是在濱河造成了極大的恐慌,老刑警劉巖棵逊,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伤疙,死亡現(xiàn)場離奇詭異,居然都是意外死亡辆影,警方通過查閱死者的電腦和手機(jī)徒像,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛙讥,“玉大人锯蛀,你說我怎么就攤上這事〈温” “怎么了谬墙?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵今布,是天一觀的道長。 經(jīng)常有香客問我拭抬,道長部默,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任造虎,我火速辦了婚禮傅蹂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘算凿。我一直安慰自己份蝴,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布氓轰。 她就那樣靜靜地躺著婚夫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪署鸡。 梳的紋絲不亂的頭發(fā)上案糙,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機(jī)與錄音靴庆,去河邊找鬼时捌。 笑死,一個胖子當(dāng)著我的面吹牛炉抒,可吹牛的內(nèi)容都是我干的奢讨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼焰薄,長吁一口氣:“原來是場噩夢啊……” “哼拿诸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起塞茅,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤佳镜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后凡桥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蟀伸,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡百姓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年锐极,在試婚紗的時候發(fā)現(xiàn)自己被綠了叫挟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吵冒。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡袱箱,死狀恐怖福稳,靈堂內(nèi)的尸體忽然破棺而出向图,到底是詐尸還是另有隱情荡短,我是刑警寧澤啡省,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布娜睛,位于F島的核電站髓霞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏畦戒。R本人自食惡果不足惜方库,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望障斋。 院中可真熱鬧纵潦,春花似錦、人聲如沸垃环。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遂庄。三九已至寥院,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涛目,已是汗流浹背秸谢。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留泌绣,地道東北人钮追。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓预厌,卻偏偏與公主長得像阿迈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子轧叽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

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