kafka學習(四)集群搭建及理論分析


一、搭建一個本地偽集群

  前面我們學習了搭建單台kafka實例的步驟,現在為了方便,我們直接在本機windows系統上搭建我們的偽集群來方便我們學習,步驟如下:

1、復制3份kafka實例

2、分別修改3個brocker的配置文件【server.properties】內容

  PS:要把多個kafka實例組成集群,對應連接的zookeeper必須相同。【組建集群實際上只要zk地址配置一樣就可以了】

  PS:內網間一般不配置SSL賬號密碼,因為如果配置了那么性能會下降。

【kafka1】

#broker實例ID
broker.id=0 #監聽9092端口
listeners=PLAINTEXT://:9092 #數據存放路徑
log.dirs=/kafka/kafka1/zhlogs
#kafka連接zookeeper的地址
zookeeper.connect=localhost:2181 【kafka2】

#broker實例ID
broker.id=1 #監聽9093端口
listeners=PLAINTEXT://:9093 #數據存放路徑
log.dirs=/kafka/kafka2/zhlogs
#kafka連接zookeeper的地址
zookeeper.connect=localhost:2181 【kafka3】

#broker實例ID
broker.id=2 #監聽9094端口
listeners=PLAINTEXT://:9094 #數據存放路徑
log.dirs=/kafka/kafka3/zhlogs #kafka連接zookeeper的地址
zookeeper.connect=localhost:2181

3、分別啟動3個brocker實例

二、集群消費原理

  log的partitions分布在kafka集群中不同的broker上,每個broker可以請求備份其他broker上partition上的數據。

  針對每個partition,都有一個broker起到“leader”的作用,0個或多個其他的broker作為“follwers”的作用。

  leader處理所有的針對這個partition的讀寫請求,而followers被動復制leader的結果,不提供讀寫【主要是為了保證多副本數據與消費的一致性】。如果這個leader失效了,其中的一個follower將會自動的變成新的leader。

  PS:brocker之間是沒有Leader和follower相關的概念的,只有到分區這個級別才有這個概念。

Producers

  生產者將消息發送到topic中去,同時負責選擇將message發送到topic的哪一個partition中。通過round­-robin做簡單的負載均衡。也可以根據消息中的某一個關鍵字來進行區分。

Consumers

消息傳遞模式  

  傳統的消息傳遞模式有2種:隊列模式發布訂閱模式

  • queue【隊列模式】:多個consumer從服務器中讀取數據,消息只會到達一個consumer。
  • publish-subscribe【發布訂閱模式】:消息會被廣播給所有的consumer。

消費者組【consumer group】

  Kafka基於這2種模式提供了一種consumer的抽象概念:consumer group。

  • queue【隊列模式】:所有的consumer都位於同一個consumer group下。
  • publish-subscribe【發布訂閱模式】:consumer位於不同consumer group下。

  解析:

  • 上圖由2個broker組成的kafka集群,某個主題總共有4個partition【分區0~分區3】,分別位於不同的broker上。
  • 這個集群由2個Consumer Group【消費者組】消費, A有2個消費者實例 ,B有4個。
  • 通常一個topic會有幾個consumer group,每個consumer group都是一個邏輯上的訂閱者( logical subscriber )。
  • 每個消費者組由多個消費者實例組成,從而達到可擴展和容災的功能。

  消費順序:

一個partition同一個時刻在一個consumer group中只能有一個consumer instance【消費者實例】在消費,從而保證消費順序。

PS:消費者組中的消費者實例的數量不能比一個Topic中的partition的數量多,否則多出來的 consumer消費不到消息。

PS:Kafka只在partition的范圍內保證消息消費的局部順序性不能在同一個topic中的多個partition中保證總的消費順序性

 


免責聲明!

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



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