在咱們大量使用分佈式數據庫、分佈式計算集羣的時候,是否會遇到這樣的一些問題:前端
咱們想分析下用戶行爲(pageviews),以便咱們設計出更好的廣告位
我想對用戶的搜索關鍵詞進行統計,分析出當前的流行趨勢
有些數據,存儲數據庫浪費,直接存儲硬盤效率又低web
這些場景都有一個共同點:
數據是由上游模塊產生,上游模塊,使用上游模塊的數據計算、統計、分析,這個時候就可使用消息系統,尤爲是分佈式消息系統!數據庫
知道了咱們有必要在數據處理系統中使用一個消息系統,可是咱們爲何必定要選kafka呢?如今的消息系統可不僅有kafka。tomcat
話說阿里中間件團隊和LinkedIn團隊都作了一個Kafka、RabbitMQ、RocketMQ的三者對比。這邊就不獻醜了,實際結果能夠參考如下兩篇博文:安全
阿里測試:http://jm.taobao.org/2016/04/01/kafka-vs-rabbitmq-vs-rocketmq-message-send-performance/服務器
LinkedIn測試:https://blog.csdn.net/SJF0115/article/details/78480433併發
對比圖負載均衡
Kafka是Linkedin於2010年12月份建立的開源消息系統,它主要用於處理活躍的流式數據。活躍的流式數據在web網站應用中很是常見,這些活動數據包括頁面訪問量(Page View)、被查看內容方面的信息以及搜索狀況等內容。 這些數據一般以日誌的形式記錄下來,而後每隔一段時間進行一次統計分析。分佈式
傳統的日誌分析系統是一種離線處理日誌信息的方式,但若要進行實時處理,一般會有較大延遲。而現有的消息隊列系統可以很好的處理實時或者近似實時的應用,但未處理的數據一般不會寫到磁盤上,這對於Hadoop之類,間隔時間較長的離線應用而言,在數據安全上會出現問題。Kafka正是爲了解決以上問題而設計的,它可以很好地進行離線和在線應用。oop
消息隊列(Message Queue,簡稱MQ),從字面意思上看,本質是個隊列,FIFO先入先出,只不過隊列中存放的內容是message而已。其主要用途:不一樣進程Process/線程Thread之間通訊。
高吞吐量:能夠知足每秒百萬級別消息的生產和消費——生產消費。
負載均衡:經過zookeeper對Producer,Broker,Consumer的動態加入與離開進行管理。
拉取系統:因爲kafka broker會持久化數據,broker沒有內存壓力,所以,consumer很是適合採起pull的方式消費數據
動態擴展:當須要增長broker結點時,新增的broker會向zookeeper註冊,而producer及consumer會經過zookeeper感知這些變化,並及時做出調整。
消息刪除策略:數據文件將會根據broker中的配置要求,保留必定的時間以後刪除。kafka經過這種簡單的手段,來釋放磁盤空間。
啓動Zookeeper及Broker.
Producer鏈接Broker後,將消息發佈到Broker中指定Topic上(能夠指定Patition)。
Broker集羣接收到Producer發過來的消息後,將其持久化到硬盤,並將消息該保留指定時長(可配置),而不關注消息是否被消費。
Consumer鏈接到Broker後,啓動消息泵對Broker進行偵聽,當有消息到來時,會觸發消息泵循環獲取消息,獲取消息後Zookeeper將記錄該Consumer的消息Offset。
對於kafka而言,kafka服務就像是一個大的水池。不斷的生產、存儲、消費着各類類別的消息。那麼kafka由何組成呢?
Broker
: Kafka消息服務器,消息中心。一個Broker能夠容納多個Topic。
Producer
:消息生產者,就是向Kafka broker發消息的客戶端。
Consumer
:消息消費者,向Kafka broker取消息的客戶端。
Zookeeper
:管理Producer,Broker,Consumer的動態加入與離開。
Topic
:能夠爲各類消息劃分爲多個不一樣的主題,Topic就是主題名稱。Producer能夠針對某個主題進行生產,Consumer能夠針對某個主題進行訂閱。
Consumer Group
: Kafka採用廣播的方式進行消息分發,而Consumer集羣在消費某Topic時, Zookeeper會爲該集羣創建Offset消費偏移量,最新Consumer加入並消費該主題時,能夠從最新的Offset點開始消費。
Partition
:Kafka採用對數據文件切片(Partition)的方式能夠將一個Topic能夠分佈存儲到多個Broker上,一個Topic能夠分爲多個Partition。在多個Consumer併發訪問一個partition會有同步鎖控制。
有的時候,不光是燈紅酒綠的世界可讓人沉迷,技術的世界也一樣如此。並且有的時候,技術的世界比前者更加可怕,它不但能讓你悄無聲息的陷入進去,還能讓你產生一種你很上進,你很努力的假象,以致於等到你恍然大悟那天,已經悔之晚矣。這裏向你們推薦一個測試交流圈q裙:790047143。
因此你們必定要找準本身的方向,不能由於今天阿里招聘需求這麼寫就去學這些,明天看到一個技術很牛逼又去學那個。
目前該中間件只完成了初級階段功能,不少功能都不完善不深刻,隨着應用業務的拓展及Kafka將來版本功能支持。以Kafka消息中間件爲中心的大數據處理平臺還有不少任務去實現。
通常在互聯網中所流動的數據由如下幾種類型:
須要實時響應的交易數據,用戶提交一個表單,輸入一段內容,這種數據最後是存放在關係數據庫(Oracle, MySQL)中的,有些須要事務支持。 活動流數據,準實時的,例如頁面訪問量、用戶行爲、搜索狀況等。咱們能夠針對這些數據廣播、排序、個性化推薦、運營監控等。這種數據通常是前端服務器先寫文件,而後經過批量的方式把文件倒到Hadoop(離線數據分析平臺)這種大數據分析器裏面,進行慢慢的分析。 各個層面程序產生的日誌,例如http的日誌、tomcat的日誌、其餘各類程序產生的日誌。這種數據一個是用來監控報警,還有就是用來作分析。