kafka主要成員
之前有寫過一篇ApacheKafka,最近又再重新玩了一次再把覺得重要的部分記錄下來;kafk主要成員跟資訊有broker、admin、producer、consumer、topic、partition
kafka運行方式
傳輸消息主要分廣播跟pubsub兩種
- producer在推送事件時會對該topic不同的groupId做分組處理,彼此comsume互不相影響以達廣播效果
- 同個groupId的consumer對topic做comsume時不會處理到同樣的事件
每個topic會有一個以上的partition來做到事件分流
- producer發送事件分派到partition的方式主要由Key Hash或Round Robin決定
- 一個partition只會有一個consumer處理,但一個consumer可以處理多個partition,如果consumer數量大餘partition的情況下,多餘的consumer只會發呆不做事
topic可以做replica來避免單點故障情形,須注意broker數量需大於replica
各broker資訊會存在zookeeper裡,當單點故障跟consumer附載平衡的時候可以做到動態調度
broker
- kafka叢集的基本單位,叢集由一個以上broker組成
- 同個kafka叢集不同broker可以個別設定SSL
admin
- 版本1.6之後consumer不支持主動生成topic,須改由admin建立
- broker、topic、consumer資訊可以由admin跟kafak索取
producer
- 生產者,將欲通知的事件傳給kafka叢集
consumer
- 消費者,獲取指定groupId的事件內容
- rabbitmq是rmq主動推送給consumer,kafka是consumer主動跟kafka主動索取
topic、partition
- topic為事件的主題,一個topic有一個以上的patition來做附載平衡
優點
- 一個topic有多個partition作壓力分散,配合producer送出時Message的key值依演算法推出該事件分配到哪個partition,除非topic刪除重建,否則key跟partition的對應結果不會變;可以根據此特性善加利用
缺點
- Message的key值演算法推算出指定partition的特性既是優點也是缺點,若Message的key值複雜度不夠豐富的話,很容易事件只會指派到特定幾個partition,導致附載不均衡情況,各事件推送key值該如何訂定也需思考周詳