是個消息中間件嗎?那和市面上其餘一堆堆的中間件例如ActiveMQ, RabbitMQ有什麼區別?前端
答案只有一個:mysql
Kafka是個集羣的消息中間件+存儲,一個節點能夠存儲幾T的數據!sql
爲啥一箇中間件須要存儲數據呢?mongodb
原來,對於Linkin這樣的互聯網企業來講,用戶和網站上產生的數據有三種:數據庫
Linkin的牛逼之處,就在於他們發現了原先2,3的數據處理方式有問題,對於2而言,原來動輒一兩個鐘頭批處理一次的方式已經不行了,用戶在一次購買完以後最好立刻就能看到相關的推薦。而對於3而言,傳統的syslog模式等也很差用,並且不少狀況下2和3用的是同一批數據,只是數據消費者不同。tomcat
這2種數據的特色是:安全
因而,Linkin就本身開發了一套系統,專門用來處理這種性質的數據,這就是Kafka服務器
那麼,在整個實踐過程當中Linkin作了什麼樣的設計,解決了什麼問題?數據結構
首先看下數據流動圖:架構
多數據中心怎麼管理數據:
集羣自己的架構圖
Kafka內部架構圖,分爲數據產生者(Producer),數據中間者(Broker),數據消費者(Consumer)
顯然,這是一個集羣的發佈/訂閱系統,有以下幾個特色
因此,Kafka的設計基本上目前這個領域的惟一選擇。我也看了不少其餘實現,包括:
scribe(Facebook) | 2 | C++ | 已中止更新,不建議使用 flume(Apache, Cloudera) |1 | Java | 配置較重 chukwa(Hadoop) |12 | Java | 2012發佈最後一版,不建議使用 fluentd |1 | Ruby | 比較活躍,看起來不錯 logstash |12345| JRuby | 功能全,聽說有很多小bug splunk |12345| C/Python | 商業閉源,功能強大,可作參考 timetunnel(Alibaba) | 2 | Java | 基於thrift,10年左右成熟 kafka(Linkin) | 2 4 | Scala | 性能強勁,設計巧妙,能夠做爲基礎設施 Samza(Linkin) |12345| | =Kafka+YARN+Hadoop rabbitmq/activemq/qpid | 2 | Java | 傳統消息中間件 Storm(twitter) | 3 | Clojure | 實時計算系統 Jstorm(Alibaba) | 3 | Java | storm的Java版,聽說更穩定 S4(Yahoo) | 3 | Java | 2013年已中止維護 Streambase(IBM) | 3 | Java | 商業產品,做爲參考 HStreaming | 3 | Java | 商業產品,做爲參考 spark | 3 | Scala | 基於Hadoop mongodb | 4 | C++ | 比較浪費硬盤 mysql | 4 | C++ | 無需多說 hdfs/hbase | 4 | Java | 無需多說
從數據傳輸這塊的設計理念來講,Kafka是最爲先進的,
在目前的各類實現中,我猜想能夠和Kafka一戰的也就只有Splunk了
後面我會分析一下這個軟件的設計和實現
欲知後事如何,且聽下回分解 ~~
日誌:每一個軟件工程師都應該知道的有關實時數據的統一律念 —— 這篇比較抽象,高屋建瓴,理論先行
Building LinkedIn’s Real-time Activity Data Pipeline —— 實踐層的論文,把作事情的來龍去脈都寫明白了
分佈式發佈訂閱消息系統 Kafka 架構設計 —— 落地設計
《分佈式發佈訂閱消息系統 Kafka 架構設計》
《StreamBase簡介》
《Yahoo! s4和Twitter storm的粗略比較》
《最火爆的開源流式系統Storm vs 新星Samza》
《架構之淘寶實時數據傳輸平臺: TimeTunnel介紹》
《Graylog2 簡介》
《logstash 仍是不行》
《日誌收集以及分析:Splunk 》
《LogStash日誌分析系統》
《LogStash,使日誌管理更簡單》
《logstash VS splunk》
《個性化離線實時分析系統pora》
《日誌:每一個軟件工程師都應該知道的有關實時數據的統一律念》
《基於Flume的美團日誌收集系統(二)改進和優化》
《基於Flume的美團日誌收集系統(一)架構和設計》
《對互聯網海量數據實時計算的理解》
《流式日誌系統啓示錄》
《flume-ng+Kafka+Storm+HDFS 實時系統搭建》