Kafka
前言
Kafka也用了一段時間了,一直想找個機會寫寫文章,趁着51空檔期碼一下。這篇文章主要想講清Kafka的工作原理~
結構圖
如圖,官網給出的架構圖很簡單,就多個生產者和消費者通過一個Kafka集羣進行生產、消費信息。但在消費者和生產者、Kafka集羣之下卻有着多個名詞(ps:每門技術之下都有好多花裏胡哨的名詞,這個有點煩人)
如下圖所示,將上圖進行細分後,有點兒羣魔亂舞,但亂中有序,下面會對每個成員進行闡述。
角色
Broker(掮客)
Broker中文可翻譯爲掮客,其實就是生成這和消費之間的一箇中介,生產者和消費者通過broker產生一點兒聯繫。其實它就是一臺臺的服務器,每臺服務器有唯一的broker id。
Producer(生產者)和 Consumer(消費者)
這個比較容易理解,生產者就我們生產消息的應用程序,而消費者對應的則是消費消息的應用程序。
Group(組)
組的概念更多的針對消費者而言,多個消費者形成一個組,通過group id進行指定。它的設計可以幫我們解決重複消費的問題,一個topic只能被group內的一個消費者消費(consumer)消費,但可以被不同組(group)內的消費者消費。
Topic(主題)
Topic,主題是一個邏輯概念,實際上並不存在。消費者通過Topic(主題)消費消息,生產者生產的消息通過Topic來進行存儲(文章給的圖沒有明確指示出來)。一個Topic之下有多個分區( Partition),一個Topic下的消息可能來自不同的服務器(broker)
Partition(分區)
分區,有些文章又叫分片?Topic是虛的,partition是物理存在的,每個Partition對應的是一個個的文件夾。Kafka默認使用的是hash進行分區,所以,一個Topic的消息可能被分佈在不同的partition上。
Replication(複製)
爲了保證分區容錯性,把消息放在一個partition上明顯不達標,所以將一個分區複製一份到另一個分區中,這個過程就是Replication,其實從中文意思也大概能猜到啦~
Ledger(領導)
分區又分爲主分區和副本分區,其中Ledger(領導)就是我們的主分區,正常運行的情況下,生產者和消費者通過topic操作的都是主分區。
Follow(員工)
副本分區,就是這裏的Follow(員工)了,Follow通過replication,同步主分區的消息,達到分區容錯的目的。主分區Ledger和副本分區Follow可以在不同的broker機器上
總結
捋清各個成員的含義再看這張圖,是不是很容易理解。在明白基本的運行流程後,我們後面再刨根問底理解各個實現環節。如生產者提交消息的策略?kafka集羣如何表明自己活着?ledger同步到follow的過程?等等問題。