wordpress 仿虎嗅主題seo百度推廣
1 Kafka消費方式
(1)pull(拉)模式:消費者從broker中主動拉取數(shù)據(jù)。(Kafka中使用)
不足:如果Kafka中沒有數(shù)據(jù),消費者可能會陷入循環(huán),一直返回空數(shù)據(jù)。
(2)push(推)模式:Kafka中不適用此種方式,因為broker決定消息發(fā)送速率,很難適應(yīng)所有消費者的消費速度。
2 Kafka消費者工作流程
2.1 消費者總體工作流程
(1)生產(chǎn)者向分區(qū)中的每個Leader發(fā)送一批批的數(shù)據(jù)。
(2)Follower主動與Leader同步數(shù)據(jù),保證數(shù)據(jù)的可靠性。
(3)消費者可以消費某一個分區(qū)的數(shù)據(jù),一個消費者也可以消費多個分區(qū)的數(shù)據(jù),消費者與消費者之間是完全獨立的。
(4)每一個分區(qū)的數(shù)據(jù)只能由消費者組中的一個消費者進(jìn)行消費。(把消費者組當(dāng)成一個獨立的消費者,同一個分區(qū)不能由同一個消費者組里面兩個及以上的消費者消費)
(5)消費到哪里的具體位置為offset,offset保存在系統(tǒng)主題_consumer_offsets中。(Kafka的底層數(shù)據(jù)是持久化到磁盤上)
2.2 消費者組原理
??Consumer Group(CG):消費者組,由多個consumer組成。形成一個消費者組的條件,是所有消費者的groupid相同。
(1)消費者組內(nèi)每個消費者負(fù)責(zé)消費不同分區(qū)的數(shù)據(jù),一個分區(qū)只能由一個組內(nèi)消費者消費。
(2)消費者組之間互不影響。所有的消費者都屬于某個消費者組,即消費者組是邏輯上的一個訂閱者。
(3)如果向消費組中的消費者數(shù)超過主題分區(qū)數(shù)量,則有一部分消費者就會閑置,不會接收任何消息。
??coordinator:輔助實現(xiàn)消費者組的初始化和分區(qū)的分配。
??coordinator節(jié)點選擇 = groupid(寫代碼時手動給的)的hashcode值 % 50(consumer_offsets的分區(qū)數(shù)量)
例如: groupid的hashcode值 = 1,1% 50 = 1,那么 consumer_offsets 主題的1號分區(qū),在哪個broker上,就選擇這個節(jié)點的coordinator作為這個消費者組的老大。消費者組下的所有的消費者提交offset的時候就往這個分區(qū)去提交offset。
消費者組初始化流程:
(0)生產(chǎn)者把數(shù)據(jù)發(fā)送到Kafka集群,選擇節(jié)點的coordinator。
(1)每個消費者都往選出的coordinator發(fā)送請求,表示要加入到組當(dāng)中。
(2)coordinator會從消費者中選出一個消費者作為Leader。
(3)coordinator會把收集到的所有topic信息都發(fā)送給消費者的Leader。
(4)Leader制定消費方案。
(5)制定計劃后,Leader將消費方案發(fā)給coordinator。
(6)coordinator把消費方案下發(fā)給各個消費者。
(7)每個消費者會定期給coordinator發(fā)送心跳反應(yīng)(默認(rèn)3s),**一旦超時(session.timeout.ms=45s)則該消費者會被移除并觸發(fā)再平衡,別的消費者繼續(xù)完成接下來的任務(wù);或消費者處理消息的時間過長(max.poil.interval.ms=5分鐘)**也會觸發(fā)再平衡。
消費者組詳細(xì)消費流程:
(1)消費者組創(chuàng)建消費者網(wǎng)絡(luò)連接客戶端,主要用于與Kafka集群進(jìn)行交會。
(2)消費者調(diào)用sendFetches方法用于抓取數(shù)據(jù)的初始化。
(3)消費者網(wǎng)絡(luò)連接客戶端調(diào)用send方法發(fā)送請求。
(4)Leader通過回調(diào)方法onSuccess把數(shù)據(jù)拉取到消息隊列里。
(5)消費者一次拉取一批次數(shù)據(jù),經(jīng)過反序列化、攔截器再進(jìn)行數(shù)據(jù)處理。