拉取数据_Apache Kafka-数据写入过程
本節(jié)主要內(nèi)容
數(shù)據(jù)寫入流程
數(shù)據(jù)寫入流程(圖1)
1、確定分區(qū),producer確認(rèn)數(shù)據(jù)寫入哪個(gè)分區(qū)
2、發(fā)送數(shù)據(jù),到leader分區(qū)
3、leader寫入完成,follower分區(qū)從leader分區(qū)拉取數(shù)據(jù)
4、確定數(shù)據(jù)是否寫入成功
成功
5、返回ack給producer
6、producer接收到ack,數(shù)據(jù)寫入成功,繼續(xù)發(fā)送下一批數(shù)據(jù)
失敗
7、數(shù)據(jù)沒有寫入成功,producer重發(fā)數(shù)據(jù)
圖1
分區(qū)策略
分區(qū)原因
1、方便擴(kuò)展
2、提高并發(fā)
分區(qū)原則
1、指明partition的情況下,直接發(fā)送數(shù)據(jù)到對(duì)應(yīng)的partition
2、沒有指明partition,但有key的情況下,將key的hash值與topic的partition數(shù)進(jìn)行取余得到partition值。
3、既沒有指明partition,又沒有key的情況下,第一次隨機(jī)生成一個(gè)整數(shù),之后每次調(diào)用都在這個(gè)整數(shù)上自增,將該值與可用的partitions總數(shù)取余得到partition值,即round-robin算法
ACK應(yīng)答機(jī)制
acks參數(shù)配置,提供以下三個(gè)選項(xiàng)
0:producer不等待ack,不管是否寫入成功,能提供最低延遲,會(huì)丟數(shù)據(jù)
1:producer等待ack,leader寫入成功返回ack,不管follower是否寫入成功,會(huì)丟失數(shù)據(jù)
-1:producer等待ack,leader和follower全部寫入成功返回ack,極端情況下,如果follower同步完成后,發(fā)送ack之前,leader發(fā)生故障,會(huì)造成數(shù)據(jù)重復(fù)。
leader異常情況處理
leader異常,需要解決兩個(gè)問(wèn)題
1.讀一致性
2. 寫一致性
先解釋兩個(gè)概念: LEO與HW(圖2)
LEO - Log End Offset,每個(gè)副本最后一個(gè)offset
HW - High Watermark,所有副本中,最小的LEO
圖2
leader異常,讀一致性問(wèn)題(圖3)
問(wèn)題描述
leader和follower當(dāng)前存儲(chǔ)數(shù)據(jù)狀況:leader當(dāng)前數(shù)據(jù)記錄到 9, follower 0同步完成7, follower 1同步完成8
1、consumer從leader讀取數(shù)據(jù)消費(fèi)到9
2、leader故障
3、重新選舉follower1 為leader
新leader中記錄數(shù)據(jù)只到8,消費(fèi)者無(wú)法繼續(xù)消費(fèi)9以后的數(shù)據(jù)
解決方案
Consumer只能讀取 HW之前的數(shù)據(jù),當(dāng)leader發(fā)生故障時(shí),不會(huì)影響consumer讀取數(shù)據(jù)
圖3
leader異常,寫一致性問(wèn)題(圖4)
問(wèn)題描述
1、leader故障
2、重新選舉follower1 為leader
3、原來(lái)的leader恢復(fù)正常,變?yōu)閒ollower 1,此刻,其數(shù)據(jù)是9,大于新leader的8
這種情況下follower如何從leader同步數(shù)據(jù)?
解決方案
4、follower 1讀取HW,將HW這后的數(shù)據(jù)刪除,從leader拉取數(shù)據(jù),起始位置為8
圖4
follower異常(圖5)
問(wèn)題描述
ack配置為-1時(shí),需要確定所有follower寫成功才能返回ack,如果單個(gè)follower掛掉,leader需要一直等待,直到follower寫入成功,影響數(shù)據(jù)寫入
解決方案
Leader動(dòng)態(tài)維護(hù)ISR(in-sync replica set),記錄和leader保持正常同步的follower集合,保證ISR中的follower全部寫入成功即可發(fā)送ack。
當(dāng)follower在限定時(shí)間內(nèi)(通過(guò)參數(shù)replica.log.time.max.ms配置)未從leader拉取數(shù)據(jù),則該follower將被踢出ISR。
處理流程
1、leader寫入數(shù)據(jù)完成,follower開始從leader拉取數(shù)據(jù)
2、follower 1異常,不能從leader正常拉取數(shù)據(jù)
3、leader在限定時(shí)間內(nèi)未收到follower 1同步請(qǐng)求,確定follower 1異常,從ISR中移除follower 1
4、follower 0完成同步,ISR中記錄的follower全部成功
5、返回ack給producer
數(shù)據(jù)寫入成功,繼續(xù)發(fā)送下一批次數(shù)據(jù)
圖5
學(xué)習(xí)交流,如有問(wèn)題,請(qǐng)指證,感謝!!!
總結(jié)
以上是生活随笔為你收集整理的拉取数据_Apache Kafka-数据写入过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 中科罗伯特工业机器人_「聚焦中日韩产业博
- 下一篇: python引用传递的区别_python