1. 程式人生 > >Kafka架構、Kafka核心元件、Kafka工作原理、Kafka應用場景

Kafka架構、Kafka核心元件、Kafka工作原理、Kafka應用場景

什麼是訊息系統?

         訊息系統負責將資料從一個應用程式傳輸到另一個應用程式,因此應用程式可以專注於資料,但不擔心如何共享它。 分散式訊息傳遞基於可靠訊息佇列的概念。 訊息在客戶端應用程式和訊息傳遞系統之間非同步排隊。 有兩種型別的訊息模式可用 - 一種是點對點,另一種是釋出 - 訂閱(pub-sub)訊息系統。 大多數訊息模式遵循 pub-sub 。

一、Kafka 簡介

(1)、Apache Kafka是一個開源訊息系統,由Scala寫成。是由Apache軟體基金會開發的一個開源訊息系統專案。

(2)、Kafka最初是由LinkedIn開發,並於2011年初開源。2012年10月從Apache Incubator畢業。該專案的目標是為處理實時資料提供一個統一、高通量、低等待的平臺。

(3)、Kafka是一個分散式訊息佇列:生產者、消費者的功能。它提供了類似於JMS的特性,但是在設計實現上完全不同,此外它並不是JMS規範的實現。

(4)、Kafka對訊息儲存時根據Topic進行歸類,傳送訊息者稱為Producer,訊息接受者稱為Consumer,此外kafka叢集有多個kafka例項組成,每個例項(server)稱為broker。

(5)、無論是Kafka叢集,還是producer和consumer都依賴於zookeeper叢集儲存一些meta資訊,來保證系統可用性

Kafka憑藉著自身的優勢,越來越受到網際網路企業的青睞,唯品會也採用Kafka作為其內部核心訊息引擎之一。Kafka作為一個商業級訊息中介軟體,訊息可靠性的重要性可想而知。先了解下Kafka的基本原理,然後通過對kakfa的儲存機制、複製原理、同步原理、可靠性和永續性保證等等一步步對其可靠性進行分析,最後通過benchmark來增強對Kafka高可靠性的認知。

 

我們需要理解發布訂閱訊息的概念及其重要性。需要注意釋出-訂閱訊息佇列的特徵是訊息的sender(publisher)並不直接將data(message)傳送給receiver, publisher 以某種方法對訊息進行分類,而receiver (subscriber) 會訂閱接收特定類別的訊息。Pub/Sub 系統通常會有broker(訊息被髮布到的中心點)來進行實現,訊息將被髮送至broker。

 

二、Kafka 特性

(1)、多個生產者

       無論kafka 多個生產者的客戶端正在使用很多topic 還是同一個topic ,Kafka 都能夠無縫處理好這些生產者。這使得kafka 成為一個從多個前端系統聚合資料,然後提供一致的資料格式的理想系統. 例如, 一個通過多個微服務向用戶提供內容的站點, 可以為統計page view 而只設立一個topic, 所有的服務將pageview 以統一的格式寫入這個topic. 消費程式能夠以統一的資料格式來接收page view 資料, 而不需要去協調多個生產者流。

(2)、多個消費者

       除了多個生產者之外,kafka 也被設計為多個消費者去讀取任意的單個訊息流而不相互影響;而其他的很多訊息佇列系統,一旦一個訊息被一個客戶端消費,那麼這個訊息就不能被其他客戶端消費,這是kafka 與其他佇列不同的地方;同時多個kafka 消費者也可以選擇作為一個組的一部分,來分擔一個訊息流,確保這整個組,這個訊息只被消費一次。

(3)、基於硬碟的訊息儲存

       Kafka 不僅能夠處理多個消費者,而且能夠持久的儲存訊息這也意味著消費者不一定需要實時的處理資料。訊息將按照持久化配置規則儲存在硬碟上。這個可以根據每個topic 進行設定,允許根據不同的消費者的需求不同 設定不同訊息流的儲存時間不同, 持久化儲存意味著一旦消費者來不及消費或者突然出現流量高峰, 而不會有丟失資料的風險.同樣也意味著訊息可以由consumer 來負責管理, 比如消費訊息掉線了一段時間,不需要擔心訊息會在producer 上累積或者訊息丟失, consumer 能夠從上次停止的地方繼續消費。

(4)、可擴充套件性

       Kafka 最開始設計的時候就把靈活擴充套件考慮到裡面,使其能夠處理任意數量的資料;使用者剛開始可以用一臺進行驗證其相關的理念,然後將其擴充套件成小的三臺broker 的開發叢集,隨著資料的增加,甚至擴充套件為數十臺,上百臺規模的大叢集。擴充套件可以在叢集正常執行的時候進行,對於整個系統的運作沒有影響;這也就意味著,對於很多臺broker 的叢集,如果一臺broker 有故障,不影響為client 提供服務.叢集如果要同時容忍更多的故障的話, 可以配置更高的replication factors。

(5)、高效能

       上面的這些特性使得Apache Kafka 成為一個能夠在高負載的情況下表現出優越效能的釋出-訂閱訊息系統。Producer, consumer 和broker 都能在大資料流的情況下輕鬆的擴充套件. 擴充套件過程能夠在依然提供從生產到消費亞秒級服務的情況下完成。

 

三、Kafka 核心元件

深入學習Kafka之前,必須瞭解主題(Topic)、經紀人(Broker)、生產者(Producer)或者釋出者,以及消費者(Consumer)或者訂閱者等主要術語

Topic:每一類訊息的主題,Kafka將訊息按照主題分類

Producer:傳送訊息者

Consumer:消費訊息者(必須訂閱後才可以消費,一個消費者可以消費1個或多個主題)

broker:傳送的訊息儲存在一組伺服器上,稱之為Kafka叢集,叢集中的每一個Kafka就是一個blocker

 

四、Kafka的使用場景

(1)日誌收集:一個公司可以用Kafka可以收集各種服務的log,通過kafka以統一介面服務的方式開放給各種consumer,例如Hadoop、Hbase、Solr等;

(2)訊息系統:解耦和生產者和消費者、快取訊息等;

(3)使用者活動跟蹤:Kafka經常被用來記錄web使用者或者app使用者的各種活動,如瀏覽網頁、搜尋、點選等活動,這些活動資訊被各個伺服器釋出到kafka的topic中,然後訂閱者通過訂閱這些topic來做實時的監控分析,或者裝載到Hadoop、資料倉庫中做離線分析和挖掘;

(4)運營指標:Kafka也經常用來記錄運營監控資料。包括收集各種分散式應用的資料,生產各種操作的集中反饋,比如報警和報告;

(5)流式處理:比如spark streaming和storm;

(6)事件源;