聊聊kafka結構


  因為kafka用到的地方比較多,日志收集、數據同步等,所以咱們來聊聊kafka。

  首先先看看kafaka的結構,producer將消息放到一個Topic然后push到broker,然后cosumer從broker中拉取對應Topic的消息。

  broker可能大家不太熟悉,這個broker就是構成kafka集群的機器,用於實現將數據持久化並且其他數據從leader broker中進行備份,一旦其中一台 broker出現問題之后將由其他broker直接升級為leader,然后代替原來的broker。

  zookeeper的作用是記錄當前leader broker的id,並將其發送給producer,並且記錄每個consumer的進行的offset。offset就是消息存在的位置,這塊與其他消息組件不同的是其他的消息組件消費完了直接就沒有了,但是kafka會將消息持久化一段時間,這個時間可以是幾天時間,用於消息重新再讀取。

  接下來咱們再繼續看看broker的內部實現:

  

  在每一個broker里邊有相應的partition,這個partition就是按照Topic將消息分發到不同的partition, 然后consumer再到相應的partition獲取對應的消息。如果producer發送消息到某個指定的key上,那么kafka會將這個key進行hash到指定的partition上。在kafka里邊可以指定factor,這個factor的作用是備份,對partition的備份。如果指定factor=2,那么一個partion會有2個備份。如下圖所示:

  下面說一下consumer group,  因為partion設置的數量固定,所以在consumer group中的數量一定是小於等於partition的數量,因為最多每個consumer消息一個,consumer多了就消費不過來了。

  consumer group 是擁有相同group id的機器,這些機器是單獨的機器,每個機器都可以指定topic、partition進行消費。如下圖所示:

   這些就是基本的kafka結構了,當然里邊還有很多非常詳細的內容,這里就不單獨說了。kafka的功能非常強大,分布式,可動態擴展,消息復制,高可用低延遲等特點,這就是為什么很多人喜歡使用kafka。kafka單台機器生產消費機器的話,每秒處理70-80萬左右的消息。當然消息備份采用異步處理,如果消息采用同步處理的話,一秒可以處理的數據每秒也有30-40萬左右。

  kafka支持消息持久化,這個持久化的時間可以進行配置,也就是消息可以被consumer多次消費。這個是其他消息隊列所沒有的。

  kafka支持consumer進行assign(分配)topic,也就是單獨消費某一個消息,在consumer group里邊只有一台機器消費此topic。也支持Pub-Sub模式,所有訂閱指定Topic的consumer會收到消息。同時支持取消訂閱功能。

  kafka還支持connector(連接器),可以進行數據庫連接,連上數據庫后可以將數據庫的記錄讀取到,按照自增列id或者timestamp(時間戳)進行讀取,然后將消息寫入到需要的地方,比如寫到數據分析的地方。

  kafka支持stream(流),可以將消息寫入到stream,並將消息以流的形式從一個topic寫入到另一個topic中,這個功能其他隊列也沒有。

  kafka一般用於消息隊列,日志收集,網站行為記錄等,當然它也有區別,比如不能topic不能使用通配符,connector的支持的語言不是特別多。

  好了,關於kafka咱們先聊到這里,還有很多地方沒有說到,有覺得那些寫的不好的地方還望同學不吝賜教。


免責聲明!

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



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