消息生產者:producer
消息消費者:consumer
主題:即Topic之斯,由用戶定義并配置在Kafka服務端铅乡,用于建立生產者和消費者之間的訂閱關系:生產者發(fā)送消息到指定Topic下,消費者從這個Topic下消費消息。
Broker:即Kafka服務器费彼,用于存儲消息,在消息中間件中通常被稱為Broker
消費者分組:Group
Offset:消息存儲在Kafka的Broker上口芍,消費者拉取消息數據的過程中需要知道消息在文件中的偏移量箍铲,這個偏移量就是所謂的Offset
ZooKeeper負責管理所有Broker服務器列表,并且建立了對應路徑來對其進行管理/brokers/ids
每個Broker服務器在啟動時鬓椭,都會到ZooKeeper上進行注冊颠猴,其節(jié)點路徑為/broker/ids/[0...N]
Topic注冊:Kafka當中,會將同一個Topic的消息分成多個區(qū)小染,分布到多個Broker上翘瓮,這些分區(qū)信息和Broker的對應關系由ZooKeeper來維護
ZooKeeper負載均衡實現:
- 每當一個Broker啟動時,會首先完成Broker注冊過程裤翩,在ZooKeeper的節(jié)點列表里保存Broker资盅。
- Kafka的生產者會對ZooKeeper上的“Broker的新增與減少”、“Topic的新增和減少”和“Broker和Topic關聯關系的變化”等事件注冊Watcher監(jiān)聽
- 通過ZooKeeper的Watcher通知能夠讓生產者動態(tài)的獲取Broker和Topic的變化情況
- Kafka有消費者分組的概念,每個消費者分組包含了若干個消費者呵扛,每一條消息只會發(fā)送給分組內的一個消費者每庆,不同消費者分組消費自己特定的Topic下面的消息,互不干擾
- Kafka會為每個消費者分配全局唯一的Consumer ID今穿,采用“Hostname:UUID”形式來表示
- 每個消費者一旦確定了對一個消息分區(qū)的消費權利缤灵,ZooKeeper會將其Consumer ID寫入到對應消息分區(qū)的臨時節(jié)點上
- 消費進度管理:Kafka需要定時地將分區(qū)消息的消費進度,即Offset記錄到ZooKeeper上去