我太難了--kafka

背景

項目裏使用了kafka和spark做消息的流式處理,可是我對kafka一竅不通。每次測試找我kafka都是傻坐着,主管讓我花時間學習kafka。java

kafka介紹

在大數據時代,分析,處理和挖掘海量數據成爲了目前技術領域的熱點和難點。kafka是一款開源,輕量,分佈式,可分區,可備份的消息系統。kafka可以很好地處理活躍的流數據,使得數據在各個子系統中高性能、低延時地不停流轉。node

kafka特性

消息可持久化

kafka存儲數據使用的是文件系統。只要文件系統足夠大,數據就能夠一直追加。kafka也提供了數據最大保存時間,用戶能夠設置。由於是寫到硬盤上,因此節點故障,重啓後數據可恢復python

高吞吐量

  • kafka使用文件系統存儲數據,按理說性能不會過高。但kafka採用順序寫,順序寫比文件的隨機寫快6000倍;
  • 在寫入時採用零拷貝技術(在兩個文件描述符(打開或新建文件會返回文件描述符,讀寫文件都須要這個東西)之間進行操做,徹底內核操做),避免了文件從用戶態轉變爲內核態的數據拷貝;
  • kafka支持數據壓縮和批量發送;
  • kafka每一個主題有多個分區;

擴展性

由於依賴zk註冊,只要註冊服務。就能夠在多態廉價服務器上搭建集羣c++

多客戶端

支持java,scala,c,c++,python,go,erlang,ruby,node.js等,還好我都認識。apache

kafka streams

kafka 0.10後引入了kafka stream,一個專一於流處理的jar包。安全

安全機制

生產者,消費者鏈接代理要認證,zk鏈接代理要認證,通訊數據加密,客戶端讀寫也要認證。ruby

數據備份

kafka能夠爲每一個主題指定副本數,進行持久化備份服務器

輕量

kafka的代理是不會記錄消息是否被消費,消費偏移量的管理交由消費者本身或組協調器來維護。app

消息壓縮

kafka支持gzip,snappy,lz4三種壓縮方式,把多條消息壓縮成messageset,再放到一個消息中。框架

kafka和其餘消息中間件比較

https://rocketmq.apache.org/d...

kafka應用場景

  1. 消息系統
  2. 應用監控,kafka接收應用程序的健康相關的指標
  3. 用戶行爲追蹤。kafka和spark集成,進行數據分析。很大衆的一種解決方案
  4. 須要將流數據交給其餘流計算框架處理
  5. 持久化日誌。利用kafka的消息持久化特性,同時kafka支持和hdfs和flume整合,方便數據轉移
相關文章
相關標籤/搜索