1.什么是kafka
Kafka 是一個(gè)分布式,基于zookeeper協(xié)調(diào)的分布式——訂閱消息傳遞系統(tǒng)和一個(gè)強(qiáng)大的隊(duì)列系統(tǒng)。
組成:( Kafka 體系架構(gòu)包括若干 Producer、若干 Broker、若干 Consumer,以及一個(gè) ZooKeeper集群)
kafka是一個(gè) 支持一對(duì)一,一對(duì)多的發(fā)布和訂閱消息系統(tǒng)
什么是消息系統(tǒng): 一個(gè)負(fù)責(zé)接受消息和發(fā)送消息到兩個(gè)不同第三方程序的系統(tǒng)
2.Kafka 特性
高吞吐量、低延遲:kafka每秒可以處理幾十萬(wàn)條消息,它的延遲最低只有幾毫秒,每個(gè)topic可以分多個(gè)partition, consumer group 對(duì)partition進(jìn)行consume操作。
可擴(kuò)展性:kafka集群支持熱擴(kuò)展,Kafka消息傳遞系統(tǒng)輕松縮放,無(wú)需停機(jī)。
持久性、可靠性:消息被持久化到本地磁盤(pán),并且支持?jǐn)?shù)據(jù)備份防止數(shù)據(jù)丟失
容錯(cuò)性:允許集群中節(jié)點(diǎn)失?。ㄈ舾北緮?shù)量為n,則允許n-1個(gè)節(jié)點(diǎn)失?。?/p>
高并發(fā):支持?jǐn)?shù)千個(gè)客戶(hù)端同時(shí)讀寫(xiě)
3.Kafka 三大主體
1.Producer: 生產(chǎn)者,也就是發(fā)送消息的一方。生產(chǎn)者負(fù)責(zé)創(chuàng)建消息 , 然后將其投遞到
2.Consumer:消費(fèi)者,也就是接收消息的 一方。消費(fèi)者連接到 Kafka 上并接收消息,進(jìn)
而進(jìn)行相應(yīng)的業(yè)務(wù)邏輯處理 。
3.Broker:服務(wù)代理節(jié)點(diǎn)。對(duì)于 Kafka 而言, Broker 可以簡(jiǎn)單地看作一個(gè)獨(dú)立的 Kafka 服務(wù)節(jié)點(diǎn)或 Kafka服務(wù)實(shí)例。大多數(shù)情況下也可以將 Broker看作一臺(tái) Kafka服務(wù)器,前提是這 臺(tái)服務(wù)器上只部署了一個(gè) Kafka 實(shí)例。一個(gè)或多個(gè) Broker 組成了 一個(gè) Kafka 集群。
4.三大角色
消息系統(tǒng): Kafka 和傳統(tǒng)的消息系統(tǒng)(也稱(chēng)作消息中間件〉都具備系統(tǒng)解稿、冗余存 儲(chǔ)、流量削峰、緩沖、異步通信、擴(kuò)展性、 可恢復(fù)性等功能。與此同時(shí), Kafka 還提 供了大多數(shù)消息系統(tǒng)難以實(shí)現(xiàn)的消息 順序性保障及回溯消費(fèi) 的功能 。
存儲(chǔ)系統(tǒng): Kafka 把消息持久化到磁盤(pán),相比于其他基于內(nèi)存存儲(chǔ)的系統(tǒng)而言,有效 地降低了數(shù)據(jù)丟失的風(fēng)險(xiǎn) 。 也正是得益于 Kafka 的消息持久化功能和多副本機(jī)制,我 們可以把 Kafka 作為長(zhǎng)期的數(shù)據(jù)存儲(chǔ)系統(tǒng)來(lái)使用,只需要把對(duì)應(yīng)的數(shù)據(jù)保留策略設(shè)置 為“永久”或啟用主題的日志壓縮功能即可 。
流式處理平臺(tái): Kafka 不僅為每個(gè)流行的流式處理框架提供了可靠 的數(shù)據(jù)來(lái)源,還 提 供了一個(gè)完整的流式處理類(lèi)庫(kù),比如窗口、連接、變換和聚合等各類(lèi)操作 。
5.Kafka 名詞
主題(Topic) :
Kafka中的消 息以主題為單位進(jìn)行歸類(lèi),生產(chǎn)者負(fù)責(zé)將消息發(fā)送到特定的主題(發(fā)送到 Kafka 集群中的每一 條消息都要指定一個(gè)主題),而消費(fèi)者負(fù)責(zé)訂閱主題并進(jìn)行消費(fèi)。分區(qū)(Partition) :
一個(gè)主題(Topic) 有多個(gè)分區(qū),一個(gè)分區(qū)可以看坐一個(gè)存儲(chǔ)的信息文件,信息最終事分配存儲(chǔ)到具體的分區(qū),
每條消息都有會(huì)一個(gè)偏移量
kafka 中的分區(qū)可以分布在不同的服務(wù)器 (broker)上,也 就是說(shuō),一個(gè)主題可以橫跨多個(gè) broker,以 此來(lái)提供比單個(gè) broker 更強(qiáng)大的性能 。
(多個(gè)分區(qū)的好處:解決I/O的性能瓶頸,類(lèi)型數(shù)據(jù)庫(kù)的分表處理,可以對(duì)分區(qū)的數(shù)量進(jìn)行增加進(jìn)行水平擴(kuò)展)offset :
offset是消息在分區(qū)中的唯一標(biāo)識(shí), Kafka通過(guò)它來(lái)保 證消息在分區(qū)內(nèi)的順序性,不過(guò) offset并不跨越分區(qū),也就是說(shuō), Kafka保證的是分區(qū)有序而不 是主題有序。broker:
服務(wù)代理節(jié)點(diǎn)。對(duì)于 Kafka 而言, Broker 可以簡(jiǎn)單地看作一個(gè)獨(dú)立的 Kafka 服務(wù)節(jié)點(diǎn)或 Kafka服務(wù)實(shí)例。大多數(shù)情況下也可以將 Broker看作一臺(tái) Kafka服務(wù)器,前提是這 臺(tái)服務(wù)器上只部署了一個(gè) Kafka 實(shí)例。一個(gè)或多個(gè) Broker 組成了 一個(gè) Kafka 集群 。一般而言, 我們更習(xí)慣使用首字母小寫(xiě)的 broker 來(lái)表示服務(wù)代理節(jié)點(diǎn) 。
Replica
為分區(qū)引入了多副本 (Replica) 機(jī)制, 通過(guò)增加副本數(shù)量可以提升容災(zāi)能力。同一 分區(qū)的不同副本中保存的是相同的消息(在同一時(shí)刻,副本之間并非完全一樣),自1J本之間是 “一主多從”的關(guān)系,其中 leader副本負(fù)責(zé)處理讀寫(xiě)請(qǐng)求, follower副本只負(fù)責(zé)與 leader副本的 消息同步。副本處于不同的 broker 中 ,當(dāng) leader 副本出現(xiàn)故障時(shí),從 follower 副本中重新選舉 新的 leader副本對(duì)外提供服務(wù)。 Kafka通過(guò)多副本機(jī)制實(shí)現(xiàn)了故障的自動(dòng)轉(zhuǎn)移,當(dāng) Kafka集群中某個(gè) broker 失效時(shí)仍然能保證服務(wù)可用.
6. Kafka的使用場(chǎng)景:
- 日志收集
- 消息系統(tǒng)
- 用戶(hù)活動(dòng)跟蹤
- 運(yùn)營(yíng)指標(biāo)
- 流式處理
- 事件源