Kakfa學習筆記(一)——概述

Kafka是什麼

Kafka是一個分佈式流處理平臺,通常用做分佈式消息中間件數據庫

架構

發佈-訂閱模型

以消息系統的角度來看,Kafka是基於發佈-訂閱模型,Producer主動發起push,將一條消息推到Broker(Kafka服務端的一個節點),Consumer主動經過pull操做去Broker拿消息,另外還有zookeeper做爲一個協調系統去協調創建鏈接,記錄offset等分佈式的操做。題外話:Kafka已經在慢慢地把不少操做由zk移到本身的broker上架構

Topic和Partition

Kafka裏以Topic做爲發佈,訂閱的類別,相似數據庫的表,一個topic能夠被多個producer,consumer發佈,訂閱。每個topic都有本身的partition劃分,一條消息從發佈到消費只會通過一個partition,因此消息在partition內是有序的,這個有序還須要其餘機制的支持,後面會說到負載均衡

另外,Kafka也能夠做爲存儲系統,由於Kafka跟其餘的消息隊列不同,Kafka的消息是持久化到磁盤的,而且不是消費完就刪除。事實上往broker發佈一條消息,broker僅僅持久化消息,等到consumer主動發起pull,告訴broker一個offset,broker把offset對應的消息返回給consumer。所以consumer是能夠經過offset回溯消費。Kafka的性能在數據大小方面其實是恆定的,因此能夠長時間存儲數據。固然消息在磁盤中會愈來愈多,能夠設置只保留多久的消息分佈式

生產者

producer比較好理解,和broker創建鏈接後,producer本身指定partition,把消息推給broker就行了,並無什麼複雜的概念。post

消費者和消費者組

上面提到,一個topic能夠有多個consumer,咱們的分佈式系統都是有多臺實例,若是都訂閱了這個topic,豈不是重複消費了?所以Kafka有一個消費組的概念,訂閱的時候是以消費組爲單位,一個partition只能被同個消費組下的一個消費者實例消費,可是一個消費者實例能夠消費多個partition,這樣保證了在同一個消費組下不會重複消費性能

消費者實例能夠是不一樣機器也能夠是不一樣的進程,消費者創建Kafka鏈接時經過指定消費組名稱標記本身。通常咱們就把一個分佈式服務做爲消費組,服務下的機器做爲消費者實例學習

img

例如上圖有4個partition,消費組B有4個消費者實例,Kafka會負載均衡給每一個實例指定一個分區。若是B組有五個實例,第五個實例是不會消費的,直到前四個實例有一個掛了。因此工做的消費者的實例數最多跟分區數同樣,因此設置分區數會影響咱們Kafka的消費速率3d

下一篇:Kakfa學習筆記(二)——體驗Kafkacdn

相關文章
相關標籤/搜索