kafka保證消息有序


kafka是可以保證同一個分區里面的消息寫入是有序的。也就是說,如果生產者按照一定的順序發送消息,broker就會按照這個消息順序來將他們寫入分區,消費者也會按照一定的順序將他們寫入分區,消費者也會按照同樣的順序讀取它們。

在某些情況下,數據的順序是很重要的,例如,在一個賬戶存入100元再取出來 和 先從一個賬戶取100元之后再存進去是截然不同的。

讓消息無序

kafka有個max.in.flight.requests.per.connection參數,這個參數是用來調整每個分區的可寫入的連接數。如果把retries參數設置為一個非零整數,同時把max.in.flight.requests.per.connection設置為一個大於1的整數,那么,如果第一個批次消息寫入失敗,而第二個批次寫入成功,broker會重試寫入第一個批次。如果此時第一個批次也寫入成功,那么兩個批次的順序就反過來了。

讓消息有序

一般來說,如果某些場景要求消息是有序的,那么消息是否寫入成功也是很關鍵的,所以不建議把retries參數設置為0。可以把max.in.flight.requests.per.connection設置為1,這樣在生產者嘗試將第一批消息發送到分區上時,就不會有其他的消息發送給broker了。不過這樣會嚴重影響生產的吞吐量,所以只有在對消息的順序有嚴格的要求的情況下才能這么做。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM