Kafka如何保證消息的順序性

1. 問題

比如說我們建了一個 topic,有三個 partition。生產者在寫的時候,其實可以指定一個 key,比如說我們指定了某個訂單 id 作爲 key,那麼這個訂單相關的數據,一定會被分發到同一個 partition 中去,而且這個 partition 中的數據一定是有順序的
消費者從 partition 中取出來數據的時候,也一定是有順序的。到這裏,順序還是 ok 的,沒有錯亂。接着,我們在消費者裏可能會搞多個線程來併發處理消息。因爲如果消費者是單線程消費處理,而處理比較耗時的話,比如處理一條消息耗時幾十 ms,那麼 1 秒鐘只能處理幾十條消息,這吞吐量太低了。而多個線程併發跑的話,順序可能就亂掉了。

2. 解決方案

  • 一個 topic,一個 partition,一個 consumer,內部單線程消費,單線程吞吐量太低,一般不會用這個。
  • 寫 N 個內存 queue,具有相同 key 的數據都到同一個內存 queue;然後對於 N 個線程,每個線程分別消費一個內存 queue 即可,這樣就能保證順序性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章