Kafka實戰-入門

哥不是小蘿莉發表於2015-05-26

1.概述

  經過一個多月的時間觀察,業務上在整合Kafka後,各方面還算穩定,這裡打算抽時間給大家分享一下Kafka在實際場景中的一些使用心得。本篇部落格打算先給大家入個門,讓大家對Kafka有個初步的瞭解,知道Kafka是做什麼的,下面是本篇部落格的目錄內容:

  • Kafka背景
  • Kafka應用場景
  • Kafka架構原理

  下面開始今天的部落格分享內容。

2.Kafka背景

  Kafka它本質上是一個訊息系統,由當時從LinkedIn出來創業的三人小組開發,他們開發出了Apache Kafka實時資訊佇列技術,該技術致力於為各行各業的公司提供實時資料處理服務解決方案。Kafka為LinkedIn的中樞神經系統,管理從各個應用程式的匯聚,這些資料經過處理後再被分發到其他地方。Kafka不同於傳統的企業資訊佇列系統,它是以近乎實時的方式處理流經一個公司的所有資料,目前已經服務於LinkedIn、Netflix、Uber以及Verizon,併為此建立了實時資訊處理平臺。

  流水資料是所有站點對其網站使用情況做報表時都要用到的資料中最常用的一部分,流水資料包括PV,瀏覽內容資訊以及搜尋記錄等。這些資料通常是先以日誌檔案的形式存在,然後有周期的去對這些日誌檔案進行統計分析處理,然後獲得需要的KPI指標結果。

3.Kafka應用場景

  我們在接觸一門新技術或是新語言時,得明白這門技術(或是語言)的應用場景,也就說要明白它能做什麼,服務的物件是誰,下面用一個圖來說明,如下圖所示:

  首先,Kafka可以應用於訊息系統,比如,當下較為熱門的訊息推送,這些訊息推送系統的訊息源,可以使用Kafka作為系統的核心組建來完成訊息的生產和訊息的消費。然後是網站的行跡,我們可以將企業的Portal,使用者的操作記錄等資訊傳送到Kafka中,按照實際業務需求,可以進行實時監控,或者做離線處理等。最後,一個是日誌收集,類似於Flume套件這樣的日誌收集系統,但Kafka的設計架構採用push/pull,適合異構叢集,Kafka可以批量提交訊息,對Producer來說,在效能方面基本上是無消耗的,而在Consumer端中,我們可以使用HDFS這類的分散式檔案儲存系統進行儲存。

4.Kafka架構原理

  Kafka的設計之初是希望做一個統一的資訊收集平臺,能夠實時的收集反饋資訊,並且具有良好的容錯能力。Kafka中我們最直觀的感受就是它的消費者與生產者,如下圖所示:

4.1Producer And Consumer

  這裡Kafka對訊息的儲存是根據Topic進行歸類的,由訊息生產者(Producer)和訊息消費者(Consumer)組成,另外,每一個Server稱為一個Broker。對於Kafka叢集而言,Producer和Consumer都依賴於ZooKeeper來保證資料的一致性。

4.2Topic

  在每條訊息輸送到Kafka叢集后,訊息都會由一個Type,這個Type被稱為一個Topic,不同的Topic的訊息是分開儲存的。如下圖所示:

  一個Topic會被歸類為一則訊息,每個Topic可以被分割為多個Partition,在每條訊息中,它在檔案中的位置稱為Offset,用於標記唯一一條訊息。在Kafka中,訊息被消費後,訊息仍然會被保留一定時間後在刪除,比如在配置資訊中,檔案資訊保留7天,那麼7天后,不管Kafka中的訊息是否被消費,都會被刪除;以此來釋放磁碟空間,減少磁碟的IO消耗。

  在Kafka中,一個Topic的多個分割槽,被分佈在Kafka叢集的多個Server上,每個Server負責分割槽中訊息的讀寫操作。另外,Kafka還可以配置分割槽需要備份的個數,以便提高可用行。由於用到來ZK來協調,每個分割槽都有一個Server為Leader狀態,服務對外響應(如讀寫操作),若該Leader當機,會由其他的Follower來選舉出新的Leader來保證叢集的高可用性。

5.總結

  總體來說,介紹Kafka的相關背景,概述及原理,這些較為偏理論,概念性較強,需要大家認真的去理解、琢磨,這裡可以大致熟悉一下,心中有個輪廓,後面會陸續介紹Kafka的實戰用法,讓大家在實際業務和編碼中去體會Kafka的這些原理。

6.結束語

  這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行討論或傳送郵件給我,我會盡我所能為您解答,與君共勉!

相關文章