kafka的選舉機(jī)制
1.控制器(Broker)選舉
- 在一個kafka集群中,有多個broker節(jié)點,所有的Kakfa Broker集群受Zookeeper管理。第一個啟動的broker會通過在zookeeper中創(chuàng)建臨時節(jié)點/controller來讓自己成為控制器侈询,其他broker啟動時也會在zookeeper中創(chuàng)建臨時節(jié)點,如果已經(jīng)存在了一個控制器,那么就會在zookeeper中創(chuàng)建watch對象(也叫Kafka Broker follower)牡昆,便于它們收到控制器變更的通知,當(dāng)一個broker control 控制器發(fā)生了宕機(jī)摊欠,所有的Broker follower 都會收到通知丢烘,就會去Zookeeper 上注冊一個Broker Controller 柱宦,但是只有一個會注冊成功,其他的依舊都會失敗播瞳,這個成功在Zookeeper上注冊臨時節(jié)點的這個Kafka Broker會成為Kafka Broker Controller
2.分區(qū)副本選舉機(jī)制
- 在kafka的集群中掸刊,會存在著多個主題topic,在每一個topic中赢乓,又被劃分為多個partition忧侧,為了防止數(shù)據(jù)不丟失,每一個partition又有多個副本.
- 分區(qū)使用多副本機(jī)制來主要是提升可靠性骏全,一點有副本掛了苍柏,就會選擇一個新的分區(qū)副本成為leader,只有 leader 副本對外提供讀寫服務(wù)姜贡,而 follower 副 本只負(fù)責(zé)在內(nèi)部進(jìn)行消息的同步试吁。如果一個分區(qū)的 leader 副本不可用,那么就意味著整個分區(qū) 變得不可用 楼咳,此時就需要 Kafka 從剩余的 follower 副本中挑選一個新的 leader 副本來繼續(xù)對外 提供服務(wù)熄捍。雖然不夠嚴(yán)謹(jǐn),但從某種程度上說 母怜, broker 節(jié)點中 leader 副本個數(shù)的多少決定了這 個節(jié)點負(fù)載的高低余耽。
3.消費組選舉
- 在kafka的消費端,會有一個消費者協(xié)調(diào)器以及消費組苹熏,組協(xié)調(diào)器GroupCoordinator需要為消費組內(nèi)的消費者選舉出一個消費組的leader
- 如果消費組內(nèi)還沒有l(wèi)eader碟贾,那么第一個加入消費組的消費者即為消費組的leader,如果某一個時刻leader消費者由于某些原因退出了消費組轨域,那么就會重新選舉leader袱耽。
主題和分區(qū)
主題和分區(qū)是 Kafka 的兩個核心概念
主題和分區(qū)是邏輯上的概念,一個主題下可以有N個分區(qū)干发,副本和log 日志文件朱巨, 只有日志層面才是實際無力上的存在。
- 生產(chǎn)者發(fā)布消息到對應(yīng)的主題用于消費者訂閱消費枉长,訂閱者并且從訂閱的主題上拉去信息冀续,當(dāng)消息發(fā)布到主題后,只會被投遞到訂閱它的消費組的一個消費者中必峰。
消費者與消費組
消費者( Consumer)負(fù)責(zé)訂閱 Kafka 中的主題( Topic)洪唐,并且從訂閱的主題上拉取消息。 與其他一些消息中間件不同的是:在 Kafka 的消費理念中還有一層消費組( Consumer Group) 的概念吼蚁,每個消費者都有 一個對應(yīng)的消費組, 兩個消費組之間互不影響凭需。 每個消費者只能消費所分配到的分區(qū)中的消息。換言之 ,每一個分區(qū)只能被一個消費組中的一 個消費者所消費 功炮。一般情況下,消費組的消費者數(shù)量小于訂閱主題中的分區(qū)數(shù)量术唬,否則會導(dǎo)致有消費者永遠(yuǎn)無法消費到分區(qū)的消息薪伏。
點對點 CP2P, Point-to-Point)模式和發(fā) 布/訂閱( Pub/Sub)模式
如果所有的消費者都隸屬于同 一個消費組,那么所有的消息都會被均衡地投遞給每 一 個消費者粗仓,即 每條消息只會被一個 消費者處 理嫁怀,這就相當(dāng)于點對點模式 的應(yīng)用 。
如果所有的消費者都隸屬于不同的消費組借浊,那么所有的消息都會被廣播給所有的消費 者塘淑,即每條消息會被所有的消費者處理,這就相當(dāng)于發(fā)布/訂閱模式的應(yīng)用 蚂斤。