1. 程式人生 > >kafka學習筆記(一)

kafka學習筆記(一)

首先,kafka是什麼:

kafka 是一個分散式訊息佇列系統,用於大資料分析,其中主要是日誌分析系統:

然後思考一下以下幾個場景:

  • 我想分析一下使用者行為(pageviews),以便我能設計出更好的廣告位

  • 我想對使用者的搜尋關鍵詞進行統計,分析出當前的流行趨勢。這個很有意思,在經濟學上有個長裙理論,就是說,如果長裙的銷量高了,說明經濟不景氣了,因為姑娘們沒錢買各種絲襪了。

  • 有些資料,我覺得存資料庫浪費,直接存硬碟又怕到時候操作效率低。

這個時候,我們就可以用到分散式訊息系統了。雖然上面的描述更偏向於一個日誌系統,但確實kafka在實際應用中被大量的用於日誌系統。 
這些場景都有一個共同點:資料是由上游模組產生,上游模組,使用上游模組的資料計算、統計、分析,這個時候就可以使用訊息系統,尤其是分散式訊息系統!

二. 基本概念

1、 AMQP協議(Advanced Message Queuing Protocol,高階訊息佇列協議)
AMQP是一個標準開放的應用層的訊息中介軟體(Message Oriented Middleware)協議。AMQP定義了通過網路傳送的位元組流的資料格式。因此相容性非常好,任何實現AMQP協議的程式都可以和與AMQP協議相容的其他程式互動,可以很容易做到跨語言,跨平臺。

2、 一些基本的概念

  • 消費者:(Consumer):從訊息佇列中請求訊息的客戶端應用程式

  • 生產者:(Producer) :向broker釋出訊息的應用程式

  • AMQP服務端(broker):用來接收生產者傳送的訊息並將這些訊息路由給伺服器中的佇列,便於fafka將生產者傳送的訊息,動態的新增到磁碟並給每一條訊息一個偏移量,所以對於kafka一個broker就是一個應用程式的例項

  • 主題(Topic):一個主題類似新聞中的體育、娛樂、教育等分類概念,在實際工程中通常一個業務一個主題。

  • 分割槽(Partition):一個Topic中的訊息資料按照多個分割槽組織,分割槽是kafka訊息佇列組織的最小單位,一個分割槽可以看作是一個FIFO( First Input First Output的縮寫,先入先出佇列)的佇列。

生產者生產(push)訊息、kafka叢集、消費者獲取(pull)訊息這樣一種架構,kafka叢集中的訊息,是通過Topic(主題)來進行組織的. 生產者可以選擇自己喜歡的序列化方法對訊息內容編碼。
kafka分割槽是提高kafka效能的關鍵所在,當你發現你的叢集效能不高時,常用手段就是增加Topic的分割槽,分割槽裡面的訊息是按照從新到老的順序進行組織,消費者從佇列頭訂閱訊息,生產者從佇列尾新增訊息。

 

 

 

Kafka has four core APIs:

kafka有四個核心的API:

  • The Producer API allows an application to publish a stream of records to one or more Kafka topics(生產者api:允許一個應用將流記錄釋出個一個或多個topic).
  • The Consumer API allows an application to subscribe to one or more topics and process the stream of records produced to them(消費者api:允許一個應用訂閱一個或者多個topic並且處理塔門生產的流記錄資料).
  • The Streams API allows an application to act as a stream processor, consuming an input stream from one or more topics and producing an output stream to one or more output topics, effectively transforming the input streams to output streams(流API:允許一個應用作為流處理器,處理輸入資料並且將輸出資料流輸出至多個topic,高效的).
  • The Connector API allows building and running reusable producers or consumers that connect Kafka topics to existing applications or data systems. For example, a connector to a relational database might capture every change to a table(允許剛建立或正在執行的可重複使用的生產者和消費者來連線多個topics).

Kafka 作為訊息系統的優點:

傳統訊息系統有兩種實現方式:queuing(佇列方式)和 Publish–subscribe(釋出訂閱方式)

前者優點是易於擴充套件,缺點是無法實現多個訂閱者(每個程序取完訊息,訊息就沒有了)

後者優點是可以實現多個訂閱者,缺點是不易於擴充套件(需要將每條訊息廣播給每個訂閱者)

而Kafka的 consumer group 概念結合了這兩種設計思想,通過將多個consumer分組,在組內採用佇列方式處理訊息,對於不同的組採用釋出訂閱方式,釋出至所有的組。

除了作為訊息系統使用外,Kafka還可以作為分散式儲存系統,以及流處理系統來使用(Streaming API)

參考:http://kafka.apache.org/intro