比如說我們建了乙個 topic,有三個 partition。生產者在寫的時候,其實可以指定乙個 key,比如說我們指定了某個訂單 id 作為 key,那麼這個訂單相關的資料,一定會被分發到同乙個 partition 中去,而且這個 partition 中的資料一定是有順序的。
n個消費者針對某乙個topic組成乙個消費者group的時候,只要某個消費者a不掛掉,則分配給這個消費者a的的partition1 不會再分配給別的消費者,也就是只有消費者a才可以消費在partition1上的topic訊息。這樣就保證了順序性。
為了在乙個消費者端能有更大的併發處理效能,我們在消費者a開啟10個佇列、同時開啟10個執行緒。乙個執行緒消費乙個佇列,至於哪個訂單到哪個佇列,用訂單的hash%10 得到的餘數就是分配的佇列。
同樣對於其他場景、類似於人工客服 和某人的一次對話也可以使用這種思想。
kafka 每個topic產省一條訊息都會 都會記錄乙個偏移 topic-offset、相當於訊息唯一id。
消費者消費的時候、每消費一條訊息 向kafka節點傳送一條確認,kafka節點會自動記錄。當然消費者可以設定自動傳送確認、無需再手動傳送。
Kafka 訊息丟失和訊息重複消費
producer 的acks引數值設定為 0 或者 1 不等待伺服器確認或者只讓leader確認解決方法 將acks的值設定為all或者 1,讓leader和followers全部進行確認 producer 沒有設定失敗重試解決方法 根據實際場景將retries引數值設定為正整數 consumerp...
Kafka 訊息丟失和訊息重複消費
producer 的acks引數值設定為 0 或者 1 不等待伺服器確認或者只讓leader確認解決方法 將acks的值設定為all或者 1,讓leader和followers全部進行確認 producer 沒有設定失敗重試解決方法 根據實際場景將retries引數值設定為正整數 consumerp...
kafka保證訊息順序性
順序保證 kafka 可以保證同乙個分割槽裡的訊息是有序的。也就是說,如果生產者按照一定的順序傳送訊息,broker 就會按照這個順序把它們寫入分割槽,消費者也會按照同樣的順序讀取它們。1.單分割槽 2.如果把 retries 設為非零整數,必須把 max.in.flight.requests.pe...