您好,登錄后才能下訂單哦!
Apache頂級項目介紹系列-1,我們從Kafka說起。why?流行 + 名字cool。
Kafka官網是見過比較簡單,直敘的網站,“kafka是一個高吞吐的分布式的消息系統”。 Kafka最初起家于LinkedIn,當時原本作為linkedin用來管理活動流(PV,用戶行為分析,搜索情況)和運營數據處理的pipline的基礎。
因為其分布式以及高吞吐被廣泛使用,如與Cloudera, Hadoop, Storm, Spark etc.
kafka首先作為一個消息系統,提供了基本功能,如解耦,順序性,異步性等。同時優質的設計理念支撐高吞吐,提供O(1)時間負責度持久化能力,數據級別達到TB/PB以上,支持離線與實時處理,即與hadoop,storm對接,支持水平scale out。
架構圖:
可以看到,kafka是一個分布式架構設計(當然DT時代,不支持水平scale out無法生存), 前段producer并發(支持批量)push消息到kafka特定topic集群服務器broker,每個topic又包含多個partition便于水平擴展,消費者consumer通過consumer group向broker服務器pull獲取消息。kafka通過zk管理集群配置,選舉leader,以及rebalance。消息模式為push/pull。
我們來建一個kafka集群服務:
通過zk發送,消費消息:
用java來生產/消費消息:
比較直白,這里注意可以批量發送消息,不是所有消息中間件可以批量發送的,批量發送是高吞吐原因之一。
這里使用stream流來消費payload,消息流迭代器用不停止,類似監聽消息一樣。
kafka之所以高效或者其創新點:
消息刪除管理 通常消息中間件會消費一個消息,刪除一個消息,這使得消息的使用代價非常高額。而kafka使用無狀態管理,引入消息偏移量,消息基于時間的SLA應用保留策略,當消息超過一定時間后才被刪除,這樣按照官網的說法,消費Kafka消息就是非常輕量級:come and go. 聽起來像外賣一樣,take and go. 甚至,由于引入偏移量,消費者可以隨意獲取任意位置消息,包括重新獲取已經消費過的消息。
2. Kafka利用linux sendfile從linux kernel復制文件
3.kafka引入zk,管理分布式協調,HA,容錯。zk用來管理kafaka代理broker,當kafka新增或者某代理失效,zk服務將通知生產者與消費者。
4. 生產者性能,消息結構優化大小以及批量發送
5. 消費這性能:消息結構優化以及無狀態引入便宜量,無需為何b+樹索引。
總體來說kafka表現異常突出,不失為通常消息中間件的代替品,如果管理hadoop,stream更是首推。另外如果處理網站日志,用戶使用行為分析,或者離線處理log等都是不二之選。
好了,先到這里了,起個大早來寫東西,果然不靠譜,時間緊任務重啊。望大家包涵,有些圖借用自網絡。
公眾號:技術極客TechBooster
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。