kafka學習筆記——基本概念與安裝


Kafka是一個開源的,輕量級的、分佈式的、具備複製備份、基於zooKeeper協調管理的分佈式消息系統。
linux

它具有如下三個特性:apache

可以發佈訂閱流數據:windows

存儲流數據時,提供相應的容錯機制api

當流數據到達時,可以被及時處理。服務器

首發於我的博客網站:連接地址app

 

下載安裝

本次安裝只介紹在linux環境下,windows的暫時不考慮。負載均衡

下載

做爲一個消息中間件,kafka並非一個jar包,而是一個完整的應用,因此直接取官網下載部署包.分佈式

下載地址:https://kafka.apache.org/downloadssvn

這裏選擇:性能

下載完畢以後,可使用winSCP上傳到服務器中。

也可使用wget命令,直接下載:

wget http: //mirrors.shuosc.org/apache/kafka/1.1.1/kafka_2.11-1.1.1.tgz

配置

下載完安裝包以後,把它放在/usr/local

1  tar -zxf kafka_2.11-1.1.1.tgz 2 mv kafka_2.11-1.1.1.tgz kafka

換個目錄名稱,kafka看起來更簡潔一些。

 

啓動服務

kafka是依賴於zookeeper的,因此再啓動kafka以前須要先啓動zookeeper。

以前看到某書,書中說是要再去下載一個zookeeper,實際上是不必的,kafka部署包中自己就有zookeeper。

首先進入kafka目錄

cd /usr/local/kakfa

 

啓動zookeeper:

bin/zookeeper-server-start.sh -daemon config/zookeeper.properties

執行完命令後使用jps命令查看是否啓動:

1 [root@izbp18twqnsvndjvj1mnagz kafka]# jps 2 9088 app.jar 3 25170 Jps 4 24539 QuorumPeerMain

看到有QuorumPeerMain,說明zookeeper啓動成功了。

啓動kafka:

bin/kafka-server-start.sh -daemon config/server.properties

固然,你也能夠去掉 -daemon,這樣就不會kafka佔用控制檯了。
仍是使用jps命令查看運行是否啓動成功:

如今已經完成了helloWorld的第一步,接下來,就瞭解一下kafka的基本概念,進行驗證。

Kafka中幾個關鍵概念

Kafka的使用場景:

1.構建實時的數據流管道,系統和應用程序可以可靠的獲取消息。

2.構建轉換或響應數據流的實時流應用程序.

基本概念:

1.Kafka是以集羣的方式運行在一個或多個數據中心的服務器上的

2.Kafka引入了主題的概念,它是以主題來分類消息流的

3.每一條消息都有三部分組成,鍵,值,時間戳。

主題(Topic)

主題就是一個分類,或者說一個集合,用來將發佈到kafka的消息進行歸類。

一般來講,在Kafka中,一個主題一般有多個用戶來訂閱和生產消息。

在實際生產中,在Kafka中都是有多個主題的,對於每一個主題,都維護多個分區(partition)日誌,以下圖所示:

建立主題

建立主題使用kafka-topic.sh腳本,建立單分區單副本的topic test:

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test  

查看主題:

bin/kafka-topics.sh --list --zookeeper localhost:2181  

輸出結果爲:

分區(partition)

在主題中,每一個分區都是一個有序的、不可變的記錄序列,並不斷地附加到一個結構化的提交日誌中。

分區中的記錄序列都被分配了一個偏移值,該偏移量唯一地標識分區中的每一個記錄。

這個偏移值能夠是自增的,也能夠是開發者本身指定。

在日誌服務器中設置分區有如下幾個好處:

首先,kafka集羣容許日誌消息擴展到適合的單個服務器的消息,每一個分區都會有承載它大小的服務器,一個主題有多個分區,它能夠處理任意數量的數據

其次,消息是並行的,能夠同時處理.

分區的分佈式

在kafka集羣中,日誌的分區是分佈在每一個主機上的,每一個主機都共享數據和共同處理數據。

每一個分區在集羣中的服務器中進行復制,藉此實現容錯的功能。

與zookeeper相似,在集羣中,總有一個主機扮演leader的角色,其餘主機扮演follwers的角色。

當leader進行讀和寫操做時,follwers也將重複leader的操做,進行讀和寫。

遇到leader故障怎麼辦,那麼其餘follwers中的任意一臺主機就會自動成爲新的leader。

生產者(producers)

生產者,顧名思義,生產消息。生產者,選擇kakfa中的某個主題某個分區進行推送消息。

爲了負載均衡,也能夠經過循環的方式來發送消息。

消費者(consumers)

消費者一般是以組的形式存在,消費者組訂閱消息,而且分發給組中的每個消費者實例。

消費者實例,能夠分佈在不一樣的進程中,也但是不一樣的機器中。

若是全部消費者都有相同的組,那麼消息將會在消費者組中進行負載均衡分發。

若是全部消費者上都使用了不一樣的消費者,那麼每一個消息都將被廣播到消費者實例。

 

以下圖:

有兩個kafka集羣,這兩個集羣有四個分區,和兩個消費者組。消費者組A有2個消費者實例,消費者組B有四個消費者實例。

一般來講,主題(topic)都會有少許的消費者組,主題中的一個邏輯(也能夠說一個業務)對應着一個消費者組。

每一個消費者組組都由許多消費者實例組成,從而保證可擴展性和容錯性。

 

kafka只記錄了全部分區的總數,並不單獨記錄每一個主題中分區的總數。對於大多數應該程序來講,對分區的讀寫只須要根據分區的偏移值就能找到了。

 

保障

  • 當消息發送到一個特定的主題分區中,消息的順序按照其發送的順序,好比先發送M1,後發送M2,那麼M2就排在M1的後面。
  • 當消費者訂閱消息時,它獲取消息的順序是按照消息存儲的順序。
  • 假設一個主題,他的容錯因子是N(當它爲leader時,有N個follwers),該集羣最多能容許N-1個follwers 操做失敗。

 

Kafka的優點

多個生產者

Kafka可無縫支持多個生產者,無論客戶端使用單個主題仍是多個主題。因此它適合從多個系統中收集數據,並以統一的格式對外提供數據。

多個消費者

Kafka支持多個消費者從一個單獨的消息流上讀取數據,並且消費者之間互不影響。這與其餘隊列系統不一樣,其餘隊列系統消息一旦被一個客戶端讀取,其餘客戶端就沒法讀取它。

除此以外,消費者能夠組成一個羣組,消費組能夠共享消息流,並保證整個羣組對每一個給定的消息只處理一次。

消息持久化

消費者能夠非實時的讀取消息,這是由於kafka能夠將消息存在磁盤中,根據設置的規則進行保存,並且每一個主題能夠設置單獨的保留規則。

當消費者由於處理速度慢或者忽然的流量暴增致使的沒法及時的處理消息,那麼就能夠將消息進行持久化存儲,並保證消息不會丟失。

消費者能夠被關閉,可是消息被繼續保留在Kafka中,消費者能夠從上次中斷的地方繼續讀取消息。

高性能與伸縮性

一個服務器可稱爲一個broker,開發時能夠是一個,而後擴展成3個,小型集羣,隨着數據不斷增加,能夠擴展至上百個。

對於在線集羣進行擴展,絲絕不影響系統的可用性。

在處理大數據時,Kafka能保證亞秒級別的消息延遲。

 

總結

kafka是高性能,吞吐量極高的消息中間件。學習kafka須要先去學習它其中的一些概念,只有理解了這些概念,

纔可以在實際生產過程當中更好的合理的使用kafka,本文是開篇,主要介紹了一些kafka的概念,下一篇主要內容是kafka的經常使用api。

相關文章
相關標籤/搜索