Kafka學習筆記 消費者 TCP 連線

2021-10-01 18:27:36 字數 1585 閱讀 4222

kafkaproducer 在構建例項的時候,會在後台默默地啟動乙個 sender 執行緒,這個 sender 執行緒負責 socket 連線的建立。並且連線bootstrap.servers指定的的所有 broker.

構建 kafkaconsumer 例項時是不會建立任何 tcp 連線的.

tcp 連線是在呼叫 kafkaconsumer.poll 方法時被建立的。

協調者(coordinator),它駐留在 broker 端的記憶體中,負責消費者組的組成員管理和各個消費者的位移提交管理。

當消費者程式首次啟動呼叫 poll 方法時,它需要向 kafka 集群當前負載最小的那台 broker 傳送請求傳送乙個名為 findcoordinator 的請求,希望 kafka 集群告訴它哪個 broker 是管理它的協調者。

broker 處理完上一步傳送的 findcoordinator 請求之後,會返還對應的響應結果(response),顯式地告訴消費者哪個 broker 是真正的協調者,因此在這一步,消費者知曉了真正的協調者後,會建立連向該 broker 的 socket 連線。只有成功連入協調者,協調者才能開啟正常的組協調操作,比如加入組、等待組分配方案、心跳請求處理、位移獲取、位移提交等。

消費者會為每個要消費的分割槽建立與該分割槽領導者副本所在 broker 連線的 tcp。

假設消費者要消費 5 個分割槽的資料,這 5 個分割槽各自的領導者副本分布在 4 臺 broker 上,那麼該消費者在消費時會建立與這 4 臺 broker 的 socket 連線。

確定協調者和獲取集群元資料。

連線協調者,令其執行組成員管理操作。

執行實際的訊息獲取。

1.手動關閉kafkaconsumer.close() 方法,或者是執行 kill 命令,不論是 kill -2 還是 kill -9;

2.自動關閉是由消費者端引數connection.max.idle.ms控制的,該引數現在的預設值是 9 分鐘,即如果某個 socket 連線上連續 9 分鐘都沒有任何請求「過境」的話,那麼消費者會強行「殺掉」這個 socket 連線。

當第三類 tcp 連線成功建立後,消費者程式就會廢棄第一類 tcp 連線,之後在定期請求元資料時,它會改為使用第三類 tcp 連線。也就是說,最終你會發現,第一類 tcp 連線會在後台被默默地關閉掉。對乙個執行了一段時間的消費者程式來說,只會有後面兩類 tcp 連線存在。

注意: connection.max.idle.ms 設定成 -1 , 禁用定時關閉. 很有可能導致產生很多永久的 "殭屍" 連線.

引用:kafka核心技術與實戰 - 胡夕

kafka學習筆記4 kafka消費者

消費者和消費者群組 kafka消費者分為消費者群組和消費者。每乙個kafka消費者都隸屬於乙個kafka消費者群組。每個消費者群組可以對應乙個或多個topic,每個topic內的分割槽只能對應消費者群組內的乙個消費者,當消費者比topic中的分割槽數多時,多餘的消費者不會接收topic中的資訊。這種...

Kafka筆記4(消費者)

消費者和消費群組 kafka消費者從屬於消費者群組,乙個群組裡的消費者訂閱的是同乙個主題,每個消費者接收主題的一部分分割槽訊息 消費者的數量不要超過主題分割槽的數量,多餘的消費者只會被閒置 乙個主題可以被多個消費群組使用,消費者群組之間互不影響 當乙個消費者加入群組時,他讀取的資料是原本由其他消費者...

kafka學習十三 消費者消費資料

由於自動提交是每隔一段時間提交一次,假如消費者拉到一批資料,剛處理一部分就提交了,然後掛掉了,這個時候未消費的那批資料就徹底丟失了,因為offset已經提交了,不會重新消費。同樣的,消費者拉到一批資料,剛處理一部分沒有提交,然後掛掉了,這個時候已經消費的那批訊息會被再次消費。手動消費只會造成訊息重複...