[英]How to dynamically add consumers in consumer group kafka
我應該如何知道何時必須擴展消費者群體中的消費者。 當有一個快速的生產者時,消費者擴大規模的觸發因素是什么?
一種直接的方法是獲得消費者滯后(這可以計算為承諾偏移量和開始偏移量之間的差異),如果在最后 n 次計算的滯后正在增加,您可以擴大規模,反之亦然。 您可能必須考慮一些邊緣情況,例如,如果消費者數量下降並且延遲會增加並且自動縮放功能可能會產生更多線程/機器)。
在 Kafka 中創建主題時,需要提供分區數和復制因子。
假設有一個名為TEST 的主題,有 10 個分區,對於數據的並行消費,需要創建具有 10 個消費者的消費者組,其中每個消費者將從各自的分區中消費數據。
這里有一個問題,如果主題有10 個分區並且消費者組有12 個消費者,那么兩個消費者保持空閑,直到其中一個消費者死亡。
如果主題有 10 個分區並且消費者組有8 個消費者,那么6 個消費者將消費來自6 個分區的數據(一個消費者->一個分區),而剩下的兩個消費者將負責消費來自兩個分區的數據(一個消費者-> 2 個分區)。 它的意思是最后兩個消費者消費來自四個分區的數據。
因此,首先要確定 kafka 主題的分區數,更多的分區意味着更多的並行性。
每當向消費者組添加或刪除任何新消費者時,kafka都會進行重新平衡。
實際上自動縮放不是一個好主意,因為在 Kafka 中,消息順序是在分區中保證的。
來自 Kafka 文檔:
- 生產者發送到特定主題分區的消息將按發送順序附加。 也就是說,如果發送一條記錄 M1
由與記錄 M2 相同的生產者,首先發送 M1,然后發送 M1
將具有比 M2 更低的偏移量並在日志中更早出現。- 消費者實例按照記錄在日志中的存儲順序查看記錄。
如果您添加更多分區和更多關於分區數量的消費者,那么您將無法滿足消息的排序保證。
假設你有 10 個分區,你的 key 數量是 102,那么這條消息將被發送到分區: 102 % 10 = 2
但是,例如,如果您將分區數增加到 15,那么具有相同鍵 (102) 的消息將被發送到不同的分區: 102 % 15 = 12
正如您所看到的,使用這種方法無法保證具有相同鍵的消息的排序。
注意:順便說一下,Kafka murmur2(record.key())) % num partitions
使用murmur2(record.key())) % num partitions
算法。 上面的計算只是一個例子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.