
kafka的特點(diǎn):
1.消息持久化:通過0(1)的磁盤數(shù)據(jù)結(jié)構(gòu)提供數(shù)據(jù)的持久化,kafka中可以存儲(chǔ)數(shù)據(jù),存儲(chǔ)量決定可以放多少數(shù)據(jù),數(shù)據(jù)按照接受順序發(fā)送給streaming,批量發(fā)送
2.高吞吐:每秒百萬級(jí)的消息讀寫,消息來源廣
3.分布式:強(qiáng)大的擴(kuò)展能力
4.實(shí)時(shí)性:消費(fèi)者可以即時(shí)看到生產(chǎn)者的message
組件:
1.broker:一臺(tái)機(jī)器即一個(gè)broker,kafka一般擁有多個(gè)broker,
2.producer:消息的生產(chǎn)者,用來寫日志的,接flume
3.consumer:日志的消費(fèi)者,用來讀數(shù)據(jù)的,接streaming、storm、flink等
4.topic:不同的消費(fèi)者往不同的topic讀數(shù)據(jù),不同的生產(chǎn)者向不同的topic寫數(shù)據(jù)
5.partition:topic的基礎(chǔ)上做的進(jìn)一步分層,一般命名方式為topic名字是“test”,partition名字為“test-0”、“test-1”,一個(gè)partition只對(duì)應(yīng)一個(gè)consumer,一個(gè)consumer可以對(duì)應(yīng)多個(gè)partition
6.zookeeper負(fù)載均衡:將topic分成多個(gè)區(qū),每個(gè)broker存儲(chǔ)一個(gè)或者多個(gè)partition
topic和log
topic是一個(gè)用于發(fā)布消息的分類和feed名,kafka使用分區(qū)的日志,每個(gè)分區(qū)有順序且不變的消息隊(duì)列
commit的log可以不斷追加,消息在每個(gè)分區(qū)中都分配了一個(gè)叫offset的id序列,這個(gè)序列可以識(shí)別分區(qū)中的消息

可以在/kafka-consumer-offset-checker.sh中查看offset,在zookeeper中:get /consumers/group_test/offsets/中得到offset
數(shù)據(jù)持久化
topic中的partition對(duì)應(yīng)一個(gè)邏輯日志,日志是相同大小的一組分段文件;producer發(fā)布消息到一個(gè)分區(qū)中,broker會(huì)將數(shù)據(jù)追加到最后一個(gè)段文件中,當(dāng)接收的數(shù)據(jù)達(dá)到已經(jīng)設(shè)定好最大值或者經(jīng)過設(shè)定好的時(shí)間后,一段文件真正flush到磁盤中,寫入完成后,消息再公開給消費(fèi)者,這個(gè)消息通過offset來公開。