kafka新版消費者為什麼要使用單執行緒?

時間 2021-06-14 04:55:26

1樓:青牛

你好。新版只指的是哪個版本?每個分割槽只能由該組內的乙個消費者消費,這個保證了內部處理的邏輯簡單,易用,這並不是說消費者就是單執行緒的,是在一定的約束下是單執行緒

2樓:huxihx

首先,我不是consumer設計者所以以下內容只是我一家之言;其次,從0.10.1版本開始新版consumer實際上是雙線程的設計————引入了額外的心跳執行緒,旨在能夠將心跳頻率的設定與poll頻率分開,從而解耦真實的訊息處理邏輯與group成員liveness管理,具體設計細節參見KIP-62。

我們說回單執行緒獲取訊息這件事。如你所說老版本是多執行緒的,consumer為每個訂閱分割槽建立對應的fetcher執行緒。老版本consumer同時也是阻塞式的(blocking),consumer啟動後內部會建立很多blocking的訊息迭代器。

但在很多場景下consumer是有非阻塞需求的,比如在流處理應用中執行filter、join或group by等操作時就不能是阻塞式的。採用單執行緒+輪訓的方式能夠較好地實現非阻塞式的訊息獲取。這是原因一。

第二,單執行緒的設計簡化了consumer端的設計————獲取到訊息後處理訊息的邏輯是否採用多執行緒可以完全由使用者自行決定,即把訊息處理的threading管理策略從consumer端剝離。當然我也必須承認實際使用場景中新版consumer+多執行緒訊息處理實現起來並不容易,因為你必須很小心地應對位移提交,否則特別容易出錯。

第三點原因就是單執行緒的設計不論用哪種程式語言都比較容易實現。反之,多執行緒並不是在所有程式語言中都支援得很好。從這一點上來說單執行緒設計的consumer更容易移植到其他語言上。

畢竟Kafka要打造生態的話,還是希望出現越來越多的客戶端。

kafka消費者組數量較大對效能有什麼影響?

郭俊 Jason 更多關於Kafka的原理分析文章,請參考答主個人技術部落格 技術世界 不能只看Consumer以及Group的數量,還要看Broker和Partition的數量 這裡假設所有Group消費同乙個Topic 如果Broker有幾百個 假設為500個 Partition也是幾百個 這裡...

我們為什麼要使用 Kafka

我看到這些文字就像看到了自己,我的情況和你差不多,剛畢業時一直想考研,既然已經入了體制內畢竟家裡是不讓辭職的。於是想讀在職的,一看學費我放棄了,那天我痛哭了一場,看著身邊好多朋友和親戚家裡有錢但是卻都不願讀書只知道玩樂花錢,而我想讀書卻沒有錢,工資除去租房和自己生活其他補貼家裡使用。畢業很多年一直租...

為什麼很多消費者購買 Android 裝置時會看重 RAM 大小?

良晨月逸 Android 每多開啟乙個軟體,就要多佔乙份 RAM,這些 RAM 還不會釋放,開啟的軟體多了手機就會卡,RAM 大一點,就能延緩手機卡頓。 舉個老機器的例子,三星的s3和note2同年發布,幾乎是同款soc,但s3運存1g,note2運存2g。實際上現在市場上note2保有量依然可觀,...