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

kafka筆記(一)

負責 所有 減少 元數據 核心 不同的 partition 消息系統 企業

1、kafka應用場景

  基於流數據的發布訂閱消息系統、實時流數據的高效異步通信、基於流數據的高可用分布式存儲!

  不同的系統之間實時流數據管道;

2、官方一句話概括

  kafka是一個分布式流數據平臺:可以被用作消息隊列,企業級消息系統,具備很強的容錯能力;實時處理的能力;

3、kafka的使用

  一般都是以集群的形式部署在一臺或者多臺服務器上;消息記錄(數據)根據主題(topic)進行分類;每個記錄都有一個key value 和時間戳;

4、核心API

  生產者API發布數據(記錄)到一個或者多個topic;消費者API可以訂閱一個或者多個主題,並處理生產到這些主題的數據;流API,即將數據按照流數據進行處理;連接API,可以創建可復用的生產者和消費;

5、通信協議

  客戶端與服務器的通信使用的是基於TCP的簡單,高效的並且與語言無關的TCP協議!

6、主題和日誌

  一個主題(topic)就是一類數據或者記錄的名字;主題支持多個訂閱者訂閱,即一個主題可以被零個,一個或者多個消費者消費,處理;

  一個主題會被分成好多個partition,每一個partition維護著一個log;主題中每一個partition的記錄都有一個順序的ID 記作:offset 偏移量;

  kafka集群記錄了所有發布的消息(記錄),無論是否被消費(有一種配置保留時長的機制);實際上唯一的元數據保留在消費者那裏,元數據僅僅記錄了消費者在partition的便宜量,或者消費記錄的ID;這樣以來,消費就可以由消費者自己控制。消費者可以設置這個偏移量。

  主題被分為patition的意義在於兩方面:一個是數據橫向擴展行,另一個是消費的並發性能的提升;

  每一個partition的數據在kafka集群中都是有備份的。每一個partition都有一個server作為leader,其他的作為follower;leader負責讀寫請求,follower負責同步leader的數據; 每一個服務器都扮演一個或多個partition的leader角色,和一些個partition的follower角色,有利於負載均衡。

7、生產者

  生產者向一個或者多個topic寫數據,並且負責每個記錄分配到哪一個分區上;

8、消費者

  消費者的標簽是消費者組,在一個同一個消費者組裏的消費者是等價的。這樣提高消費者的處理能力,和容錯性。

  主題的partition會被分配到消費者實例上,並且是動態分配的,當消費者增加活者減少時,都會導致一些partiton重新分配。每個partiton內的記錄都是有序的,但是不同partition記錄消費可能是無序的。

  要想整體有序,只能一個topic對應一個partion 並且每個消費者組裏面只能有一個消費者。

9、kafka可保證的幾點

  單個partition的記錄ID與記錄接收時間是有序的,ID越大,接收時間越遲。

  一個topic被復制N份,那麽N-1個服務器掛掉之後,對數據是不會有影響的

kafka筆記(一)