Kafka官網(wǎng)是見過比較簡單毁涉,直敘的網(wǎng)站,“kafka是一個高吞吐的分布式的消息系統(tǒng)”笨枯。 Kafka最初起家于LinkedIn薪丁,當時原本作為linkedin用來管理活動流(PV,用戶行為分析,搜索情況)和運營數(shù)據(jù)處理的pipline的基礎(chǔ)馅精。
因為其分布式以及高吞吐被廣泛使用严嗜,如與Cloudera, Hadoop, Storm, Spark etc.
Kafka首先作為一個消息系統(tǒng),提供了基本功能洲敢,如解耦漫玄,順序性,異步性等。同時優(yōu)質(zhì)的設(shè)計理念支撐高吞吐睦优,提供O(1)時間負責度持久化能力渗常,數(shù)據(jù)級別達到TB/PB以上,支持離線與實時處理汗盘,即與hadoop皱碘,storm對接,支持水平scale out隐孽。
架構(gòu)圖:
可以看到癌椿,kafka是一個分布式架構(gòu)設(shè)計(當然DT時代,不支持水平scale out無法生存)菱阵, 前段producer并發(fā)(支持批量)push消息到kafka特定topic集群服務(wù)器broker踢俄,每個topic又包含多個partition便于水平擴展,消費者consumer通過consumer group向broker服務(wù)器pull獲取消息晴及。kafka通過zk管理集群配置都办,選舉leader,以及rebalance虑稼。消息模式為push/pull琳钉。
我們來建一個kafka集群服務(wù):
通過zk發(fā)送,消費消息:
用java來生產(chǎn)/消費消息:
比較直白动雹,這里注意可以批量發(fā)送消息槽卫,不是所有消息中間件可以批量發(fā)送的,批量發(fā)送是高吞吐原因之一胰蝠。
這里使用stream流來消費payload歼培,消息流迭代器用不停止,類似監(jiān)聽消息一樣茸塞。
kafka之所以高效或者其創(chuàng)新點:
消息刪除管理
通常消息中間件會消費一個消息躲庄,刪除一個消息,這使得消息的使用代價非常高額钾虐。而kafka使用無狀態(tài)管理噪窘,引入消息偏移量,消息基于時間的SLA應(yīng)用保留策略效扫,當消息超過一定時間后才被刪除倔监,這樣按照官網(wǎng)的說法,消費Kafka消息就是非常輕量級:come and go. 聽起來像外賣一樣菌仁,take and go. 甚至浩习,由于引入偏移量,消費者可以隨意獲取任意位置消息济丘,包括重新獲取已經(jīng)消費過的消息谱秽。
Kafka利用linux sendfile從linux kernel復制文件
kafka引入zk洽蛀,管理分布式協(xié)調(diào),HA疟赊,容錯郊供。zk用來管理kafaka代理broker,當kafka新增或者某代理失效近哟, zk服務(wù)將通知生產(chǎn)者與消費者驮审。
生產(chǎn)者性能,消息結(jié)構(gòu)優(yōu)化大小以及批量發(fā)送:
消費者性能:消息結(jié)構(gòu)優(yōu)化以及無狀態(tài)引入便宜量,無需為何b+樹索引。
總體來說kafka表現(xiàn)異常突出掰盘,不失為通常消息中間件的代替品涛目,如果管理hadoop,stream更是首推靠抑。另外如果處理網(wǎng)站日志量九,用戶使用行為分析,或者離線處理log等都是不二之選颂碧。
好了荠列,先到這里了,起個大早來寫東西载城,果然不靠譜肌似,時間緊任務(wù)重啊。望大家包涵诉瓦,有些圖借用自網(wǎng)絡(luò)川队。
關(guān)注公眾號:技術(shù)極客TechBooster