帶著問題去學(xué)習(xí)
- zk在kafka中扮演什么作用柳琢?
- 保存元數(shù)據(jù)休弃,比如broker信息,分區(qū)信息壮虫,消費者的偏移量
- leader選舉
- 集群監(jiān)控,比如集群節(jié)點的健康檢查
kafka中l(wèi)eader掛掉环础,其他的follower是如何成為leader的囚似?
kafka中的消息傳遞語義
- At most once - 消息可能丟失,但是不會重復(fù)發(fā)送
- At least once - 消息不可能丟失线得,但是會重復(fù)
- Exactly once - 每個消息僅僅傳遞一次
- 冪等性生產(chǎn)者
Kafka 的冪等性生產(chǎn)者是為了確保相同的消息在同一個分區(qū)上只被寫入一次而設(shè)計的饶唤。這樣可以防止生產(chǎn)者在發(fā)送消息時因為一些網(wǎng)絡(luò)問題或者其他錯誤導(dǎo)致消息的重復(fù)寫入。冪等性生產(chǎn)者引入了一些機制來保證這一點:
Producer Id(生產(chǎn)者ID): 每個生產(chǎn)者實例都會被分配一個唯一的 Producer Id(PID)贯钩。這個 ID 在生產(chǎn)者的整個生命周期內(nèi)是固定的募狂,它用于標(biāo)識消息是由哪個生產(chǎn)者發(fā)送的办素。Producer Id 會與一個 epoch(時期)結(jié)合,以確保即使生產(chǎn)者發(fā)生重新啟動祸穷,也能夠繼續(xù)使用相同的 Producer Id性穿。
Sequence Number(序列號): 每個消息都有一個單調(diào)遞增的序列號,它是由生產(chǎn)者維護的粱哼。序列號的目的是為了確保消息的順序和一致性季二。Kafka 使用 Producer Id 和 Sequence Number 來唯一標(biāo)識一個消息。
Broker 端冪等性處理: Kafka 的 broker 端會檢測到來自生產(chǎn)者的重復(fù)消息揭措,并根據(jù) Producer Id 和 Sequence Number 進(jìn)行過濾胯舷。如果 broker 收到的消息具有相同的 Producer Id 和較小或相同的 Sequence Number,則它會認(rèn)為這是一條重復(fù)消息绊含,并將其過濾掉桑嘶。
Acknowledge(應(yīng)答機制): 冪等性生產(chǎn)者使用 ACK(應(yīng)答機制)來確認(rèn)消息是否成功寫入到分區(qū)。如果消息在寫入后收到了分區(qū)的 ACK躬充,那么生產(chǎn)者會認(rèn)為消息已經(jīng)成功寫入逃顶,否則會重試。這確保了消息的可靠性充甚。
通過這些機制以政,Kafka 的冪等性生產(chǎn)者可以在面臨網(wǎng)絡(luò)故障、生產(chǎn)者重啟等情況下伴找,確保相同的消息不會被重復(fù)寫入到同一個分區(qū)盈蛮。這對于保證消息的一次性投遞非常重要,特別是在涉及到事務(wù)性和精確一次性語義的場景中技矮。
- kafka會不會丟失消息
會丟失抖誉,broker、producer衰倦、consumer都可能會丟失消息
https://zhuanlan.zhihu.com/p/307480336