一公尺多的李同學 最後發布於2019-05-22 20:49:58 閱讀數 5619 收藏 14
展開在對kafka的理解中,常常會被問及到kafka如何保證資料的順序消費、kafka的資料重複消費怎麼處理、如何保證kafka中資料不丟失?今天先說說資料的順序消費問題。
關於順序消費的幾點說明:
①、kafka的順序訊息僅僅是通過partitionkey,將某類訊息寫入同乙個partition,乙個partition只能對應乙個消費執行緒,以保證資料有序。
②、除了傳送訊息需要指定partitionkey外,producer和consumer例項化無區別。
③、kafka broker宕機,kafka會有自選擇,所以宕機不會減少partition數量,也就不會影響partitionkey的sharding。
那麼問題來了:在1個topic中,有3個partition,那麼如何保證資料的消費?
1、如順序消費中的第①點說明,生產者在寫的時候,可以指定乙個 key,比如說我們指定了某個訂單 id 作為 key,那麼這個訂單相關的資料,一定會被分發到同乙個 partition 中去,而且這個 partition 中的資料一定是有順序的。
2、消費者從 partition 中取出來資料的時候,也一定是有順序的。到這裡,順序還是 ok 的,沒有錯亂。
3、但是消費者裡可能會有多個執行緒來併發來處理訊息。因為如果消費者是單執行緒消費資料,那麼這個吞吐量太低了。而多個執行緒併發的話,順序可能就亂掉了。
解決方案:
寫n個queue,將具有相同key的資料都儲存在同乙個queue,然後對於n個執行緒,每個執行緒分別消費乙個queue即可。
kafka如何保證順序讀寫
kafka如何保證順序讀寫 乙個分割槽有序,so,單分割槽,單consumer,不行的 需要n個記憶體佇列放在消費者後面,業務處理前面 比如說我們建了乙個 topic,有三個 partition。生產者在寫的時候,其實可以指定乙個 key,比如說我們指定了某個訂單 id 作為 key,那麼這個訂單相...
Kafka如何保證訊息的順序性
摘抄自 kafka的消費組的組員最多增加到和partition數量一致,超過的組員只會占用資源,而不起作用 kafka的partition的個數一定要大於消費組組員的個數,並且partition的個數對於消費組組員取模一定要為0,不然有些消費者會占用資源卻不起作用 我們一般將消費組裡組員的個數設定為...
Kafka 訊息佇列如何保證順序性?
主要思路 相同key值的訊息寫入同乙個partition partition內的訊息是有序的 乙個partition的訊息只會被乙個消費者消費。如果乙個消費者是多個執行緒消費,則需要把pull來的訊息按照key值寫入不同的記憶體佇列中,相同key值的訊息寫入同乙個記憶體佇列 記憶體佇列內的訊息是有序...