日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

.net Kafka.Client多个Consumer Group对Topic消费不能完全覆盖研究总结(一)

發布時間:2023/12/4 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .net Kafka.Client多个Consumer Group对Topic消费不能完全覆盖研究总结(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們知道Kafka支持Consumer Group的功能,但是最近在應用Consumer Group時發現了一個Topic 的Partition不能100%覆蓋的問題。

程序部署后,發現Kafka在pdb組的consumer消費topic時存在問題,consumer無法完全覆蓋Topic的各個partition。如下圖:

frameborder="0" scrolling="no" style="border-width: medium; width: 1px; height: 1px;"> frameborder="0" scrolling="no" style="border-width: medium; width: 1px; height: 1px;"> frameborder="0" scrolling="no" style="border-width: medium; width: 1px; height: 1px;">

frameborder="0" scrolling="no" style="border-width: medium; width: 1px; height: 1px;">

無論我在開啟多少個consumer實例,最高覆蓋只能達到66%。

進一步跟蹤發現,pdb組的consumer覆蓋到partition1和partion2.

frameborder="0" scrolling="no" style="border-width: medium; width: 1px; height: 1px;">

在kafka的主消費組defaultGroup中的consumer,覆蓋partition0

frameborder="0" scrolling="no" style="border-width: medium; width: 1px; height: 1px;">

根據以上現象猜測,當有多個消費者組對topic進行消費時,存在partition的競爭機制在里面。

為驗證partion是否存在競爭,關掉測試程序,default group中的consumer覆蓋恢復100%。

如下圖。

frameborder="0" scrolling="no" style="border-width: medium; width: 1px; height: 1px;">

翻閱官方文檔,有提到

1、同一個partition不支持comsumer并發。

2、不同gourp組中的consumer,可以對同一個topic進行消費。

同時在spark的kafka插件中,對同一topic的消費者,不同組都可以達到100%的覆蓋率。

在本地做測試,同樣存在該問題。

不同組的消費者對同一個topic進行消費時,兩個消費者都達不到100%覆蓋率(每個組的消費者總有一些數據消費不到)。

在中文社區翻閱所有的消費者和連接以及流的配置項,暫未發現影響該問題的配置項(http://orchome.com/kafka/index kafka中文社區地址。)。

關于該問題的研究暫時沒有結論,暫未確定是配置不合適或kafka.Client 存在問題,后續會持續跟蹤該問題。

通過該次問題的研究,對kafka消費組、消費者、連接流、partion和consumer映射關系、parttion 分配策略有了較為深入的了解,唯一遺憾的是未找到關于該問題的官方解釋和相關說明。

附,Kafka-Partion和consumer重新Rebalance算法如下: ?

  • 將目標Topic下的所有Partirtion排序,存于PT

  • 對某Consumer Group下所有Consumer排序,存于CG,第i個Consumer記為Ci

  • N=size(PT)/size(CG),向上取整

  • 解除Ci對原來分配的Partition的消費權(i從0開始)

  • 將第i?N到(i+1)?N?1個Partition分配給Ci

  目前,最新版(0.8.2.1)Kafka的Consumer Rebalance的控制策略是由每一個Consumer通過在Zookeeper上注冊Watch完成的。每個Consumer被創建時會觸發Consumer Group的Rebalance,具體啟動流程如下:

  • High Level Consumer啟動時將其ID注冊到其Consumer Group下,在Zookeeper上的路徑為/consumers/[consumer group]/ids/[consumer id]

  • 在/consumers/[consumer group]/ids上注冊Watch

  • 在/brokers/ids上注冊Watch

  • 如果Consumer通過Topic Filter創建消息流,則它會同時在/brokers/topics上也創建Watch

  • 強制自己在其Consumer Group內啟動Rebalance流程

  在這種策略下,每一個Consumer或者Broker的增加或者減少都會觸發Consumer Rebalance。因為每個Consumer只負責調整自己所消費的Partition,為了保證整個Consumer Group的一致性,當一個Consumer觸發了Rebalance時,該Consumer Group內的其它所有其它Consumer也應該同時觸發Rebalance。


相關文章:

  • 消息隊列 Kafka 的基本知識及 .NET Core 客戶端

原文地址:http://www.cnblogs.com/vveiliang/p/6844345.html


.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

總結

以上是生活随笔為你收集整理的.net Kafka.Client多个Consumer Group对Topic消费不能完全覆盖研究总结(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。