Kafka基本原理
Kafka原理介紹
- Kafka結(jié)構(gòu)
生產(chǎn)者(Producer)將消息發(fā)布到Kafka主題(Topic)上,消費(fèi)者(Consumer)訂閱這些主題并消費(fèi)這些消息。在Kafka集群上一個(gè)服務(wù)器稱為一個(gè)Broker。對(duì)于每一個(gè)主題,Kafka集群保留一個(gè)用于縮放、并行化和容錯(cuò)性的分區(qū)(Partition)。每個(gè)分區(qū)是一個(gè)有序、不可變的消息序列,并不斷追加到提交日志文件。分區(qū)的消息每個(gè)也被賦值一個(gè)稱為偏移順序(Offset)的序列化編號(hào)。
各模塊功能介紹如下:
Broker
在Kafka集群上一個(gè)服務(wù)器稱為一個(gè)Broker。
Topic/主題
一個(gè)Topic就是一個(gè)類別或者一個(gè)可訂閱的條目名稱,也即一類消息。一個(gè)主題可以有多個(gè)分區(qū),這些分區(qū)可以作為并行的一個(gè)單元。
Partition/分區(qū)
是一個(gè)有序的、不可變的消息序列,這個(gè)序列可以被連續(xù)地追加—個(gè)提交日志。在分區(qū)內(nèi)的每條消息都有一個(gè)有序的ID號(hào),這個(gè)ID號(hào)被稱為偏移(Offset),這個(gè)偏移量可以唯一確定每條消息在分區(qū)內(nèi)的位置。
Producer/生產(chǎn)者
向Kafka的主題發(fā)布消息。
Consumer/消費(fèi)者
向Topic訂閱,并且接收發(fā)布到這些Topic的消息。
- Kafka原理
消息可靠性
Kafka Broker收到消息后,會(huì)持久化到磁盤,同時(shí),Topic的每個(gè)Partition有自己的Replica(備份),每個(gè)Replica分布在不同的Broker節(jié)點(diǎn)上,以保證當(dāng)某一節(jié)點(diǎn)失效時(shí),可以自動(dòng)故障轉(zhuǎn)移到可用消息節(jié)點(diǎn)。
高吞吐量
Kafka通過以下方式提供系統(tǒng)高吞吐量:
1、數(shù)據(jù)磁盤持久化:消息不在內(nèi)存中cache,直接寫入到磁盤,充分利用磁盤的順序讀寫性能。
2、Zero-copy:減少IO操作步驟。
3、數(shù)據(jù)批量發(fā)送:提高網(wǎng)絡(luò)利用率。
4、Topic劃分為多個(gè)Partition,提高并發(fā)度,可以由多個(gè)Producer、Consumer數(shù)目之間的關(guān)系并發(fā)來讀、寫消息。Producer根據(jù)用戶指定的算法,將消息發(fā)送到指定的Partition。
消息訂閱-通知機(jī)制
消費(fèi)者對(duì)感興趣的主題進(jìn)行訂閱,并采取pull的方式消費(fèi)數(shù)據(jù),使得消費(fèi)者可以根據(jù)其消費(fèi)能力自主地控制消息拉取速度,同時(shí),可以根據(jù)自身情況自主選擇消費(fèi)模式,例如批量、重復(fù)消費(fèi),從尾端開始消費(fèi)等;另外,需要消費(fèi)者自己負(fù)責(zé)維護(hù)其自身消息的消費(fèi)記錄。
可擴(kuò)展性
當(dāng)在Kafka集群中可通過增加Broker節(jié)點(diǎn)以提供更大容量時(shí)。新增的Broker會(huì)向ZooKeeper注冊(cè),而Producer及Consumer會(huì)及時(shí)從ZooKeeper感知到這些變化,并及時(shí)作出調(diào)整。

Kafka開源增強(qiáng)特性
-
支持監(jiān)控Topic級(jí)別的指標(biāo)
支持監(jiān)控Topic級(jí)別的指標(biāo)包括:Topic輸入的字節(jié)流量、Topic輸出的字節(jié)流量、Topic拒絕的字節(jié)流量、Topic每秒失敗的fetch請(qǐng)求數(shù)、Topic每秒失敗的Produce請(qǐng)求數(shù)、Topic每秒輸入的消息條數(shù)、Topic每秒的fetch請(qǐng)求數(shù)和Topic每秒的produce請(qǐng)求數(shù)。
支持監(jiān)控Topic級(jí)別的指標(biāo)包括:Topic輸入的字節(jié)流量、Topic輸出的字節(jié)流量、Topic拒絕的字節(jié)流量、Topic每秒失敗的fetch請(qǐng)求數(shù)、Topic每秒失敗的Produce請(qǐng)求數(shù)、Topic每秒輸入的消息條數(shù)、Topic每秒的fetch請(qǐng)求數(shù)和Topic每秒的produce請(qǐng)求數(shù)。
-
支持查詢Broker ID與節(jié)點(diǎn)IP的對(duì)應(yīng)關(guān)系
在Linux客戶端下,使用kafka-broker-info.sh查詢Broker ID與節(jié)點(diǎn)IP的對(duì)應(yīng)關(guān)系。
在Linux客戶端下,使用kafka-broker-info.sh查詢Broker ID與節(jié)點(diǎn)IP的對(duì)應(yīng)關(guān)系。