kafka原理和實踐(六)總結升華


系列目錄

kafka原理和實踐(一)原理:10分鍾入門

kafka原理和實踐(二)spring-kafka簡單實踐

kafka原理和實踐(三)spring-kafka生產者源碼

kafka原理和實踐(四)spring-kafka消費者源碼

kafka原理和實踐(五)spring-kafka配置詳解

kafka原理和實踐(六)總結升華

 =========正文分割線==============

總結篇

本系列spring-kafka文章,分別從入門、簡單實踐、生產者和消費源碼、配置詳解、乃至最后本文的總結共六個章節,從不同角度分析原理和實踐。

只能算是入門級簡單分析,很多kafka特性並沒有拓展開來分析,下面我們總結一下kafka應用和重要特性:

1.官方介紹

Kafka™ is a distributed streaming platform,官方這樣描述kafka,即分布式流處理平台

1.系統具備發布和訂閱流數據的能力, 在這方面, 它類似於消息隊列或企業消息總線--》消息系統

2.系統具備在存儲數據時具備容錯能力--》儲存系統

3.系統具備在數據流觸發時進行實時處理--》數據流處理

2.特點

  1. 同時為發布和訂閱提供高吞吐量。據了解,Kafka每秒可以生產約25萬消息(50 MB),每秒處理55萬消息(110 MB)。
  2. 可進行持久化操作。將消息持久化到磁盤,因此可用於批量消費,例如ETL,以及實時應用程序。通過將數據持久化到硬盤以及replication防止數據丟失。
  3. 分布式系統,易於向外擴展。所有的producer、broker和consumer都會有多個,均為分布式的。無需停機即可擴展機器。
  4. 消息被處理的狀態是在consumer端維護,而不是由server端維護。當失敗時能自動平衡。
  5. 支持online和offline的場景。

3.Kafka的設計

1、吞吐量

高吞吐是kafka需要實現的核心目標之一,為此kafka做了以下一些設計:

  1. 數據磁盤持久化:消息不在內存中cache,直接寫入到磁盤,充分利用磁盤的順序讀寫性能
  2. zero-copy:減少IO操作步驟
  3. 數據批量發送
  4. 數據壓縮
  5. Topic划分為多個partition,提高parallelism

2.負載均衡

  1. producer根據用戶指定的算法,將消息發送到指定的partition
  2. 存在多個partiiton,每個partition有自己的replica,每個replica分布在不同的Broker節點上
  3. 多個partition需要選取出lead partition,lead partition負責讀寫,並由zookeeper負責fail over
  4. 通過zookeeper管理broker與consumer的動態加入與離開

4.Kafka的應用場景

1.消息隊列

比起大多數的消息系統來說,Kafka有更好的吞吐量,內置的分區,冗余及容錯性,這讓Kafka成為了一個很好的大規模消息處理應用的解決方案。 消息系統一般吞吐量相對較低,但是需要更小的端到端延時,並嘗嘗依賴於Kafka提供的強大的持久性保障。在這個領域,Kafka足以媲美傳統消息系統, 如ActiveMRRabbitMQ

2.行為跟蹤

Kafka的另一個應用場景是跟蹤用戶瀏覽頁面、搜索及其他行為,以發布-訂閱的模式實時記錄到對應的topic里。那么這些結果被訂閱者拿到后,就可以做進一步的實時處理,或實時監控,或放到hadoop/離線數據倉庫里處理。

3.元信息監控

作為操作記錄的監控模塊來使用,即匯集記錄一些操作信息,可以理解為運維性質的數據監控吧。

4.日志收集

日志收集方面,其實開源產品有很多,包括Scribe、Apache Flume。很多人使用Kafka代替日志聚合(log aggregation)。日志聚合一般來說是從服務器上收集日志文件,然后放到一個集中的位置(文件服務器或HDFS)進行處理。然而Kafka忽略掉 文件的細節,將其更清晰地抽象成一個個日志或事件的消息流。這就讓Kafka處理過程延遲更低,更容易支持多數據源和分布式數據處理。比起以日志為中心的 系統比如Scribe或者Flume來說,Kafka提供同樣高效的性能和因為復制導致的更高的耐用性保證,以及更低的端到端延遲。

5.流處理

這個場景可能比較多,也很好理解。保存收集流數據,以提供之后對接的Storm或其他流式計算框架進行處理。很多用戶會將那些從原始topic來的 數據進行階段性處理,匯總,擴充或者以其他的方式轉換到新的topic下再繼續后面的處理。例如一個文章推薦的處理流程,可能是先從RSS數據源中抓取文 章的內容,然后將其丟入一個叫做“文章”的topic中;后續操作可能是需要對這個內容進行清理,比如回復正常數據或者刪除重復數據,最后再將內容匹配的 結果返還給用戶。這就在一個獨立的topic之外,產生了一系列的實時數據處理的流程。StromSamza是非常著名的實現這種類型數據轉換的框架。

6.事件源

事件源是一種應用程序設計的方式,該方式的狀態轉移被記錄為按時間順序排序的記錄序列。Kafka可以存儲大量的日志數據,這使得它成為一個對這種方式的應用來說絕佳的后台。比如動態匯總(News feed)。

7.持久性日志(commit log)

Kafka可以為一種外部的持久性日志的分布式系統提供服務。這種日志可以在節點間備份數據,並為故障節點數據回復提供一種重新同步的機制。Kafka中日志壓縮功能為這種用法提供了條件。在這種用法中,Kafka類似於Apache BookKeeper項目。

實際應用中,適用最多最廣泛的自然是MQ的功能。

5.總結

kafka官方認為是一個分布式流處理平台,然而現實很殘酷,在互聯網領域,它頂多也就是個MQ,終極一句話總結:一個吞吐量還不錯的MQ,一個應用於各種場景的MQ。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM