首頁 >Java >java教程 >KAFKA消費者 - 承諾消費者組偏移

KAFKA消費者 - 承諾消費者組偏移

DDD
DDD原創
2025-01-26 20:11:10924瀏覽

了解Kafka消費者群體偏移:綜合指南

>本指南探討了Kafka消費者群組偏移,對於追蹤訊息消耗進度至關重要。 每個消費者組都保留其消耗的每個分區的偏移,這表示最後一個處理的記錄。 這樣可以確保消費者從重新啟動後從正確位置恢復。

什麼是消費者群組偏移?

>

>消費者群組偏移是一個簡單的數值標識符,它追蹤消費者在Kafka主題分區中的位置。 每個分區都有每個記錄的順序偏移。消費者群體使用這些偏移來記住它在哪裡停止的地方。例如,從兩個分區主題(P1和P2)中閱讀的消費者組將分別為每個讀取,分別代表P1和P2中的最後一個讀取記錄。

>

Kafka Consumer – Committing consumer group offset

>一個消費者組1

的當前偏移量(位置)的範例

偏移儲存:kafka vs.外部系統

偏移儲存可以透過兩種方式處理:在Kafka本身或外部系統(資料庫或檔案)中。本文重點介紹了Kafka的內部偏移儲存機制。

> kafka的內部偏移儲存

kafka在一個名為

的特殊內部主題中儲存偏移。 Kafka客戶庫庫處理偏移儲存和檢索,使消費者能夠在重新啟動後從其最後一個已知位置恢復。 __consumer_offsets

處理丟失的偏移

如果找不到消費者的偏移,則

配置可以確定消費者的行為:auto.offset.reset

    >
  • (預設):消費者從主題的結尾開始,忽略了現有訊息。 latest
  • :消費者從主題的開頭開始,處理所有可用訊息。 earliest
  • :如果找不到偏移,就會拋出一個例外。
  • > none
  • >自動委託與手動提交

>自動建築物透過定期將偏移到卡夫卡(Kafka)來簡化偏移管理。預設每5秒自動發生一次(由

控制)。 雖然很方便,但它可能會損失資料遺失。

enable.auto.commit>自動限制缺點

因為自動命令在單獨的執行緒中運行,因此它不會追蹤飛行中的記錄處理。 如果消費者在完成處理之前對多個記錄和自動承擔進行輪詢,則可能在失敗後發生資料遺失。

手動提交:確保資料完整性

手動提交提供精確的控制。透過停用Auto-Commit(

),您可以在成功處理記錄後使用

明確提交偏移。這樣可以防止資料遺失。 enable.auto.commit=false

<code class="language-java">while (true) {
  records = consumer.poll(timeout);
  // process records
  consumer.commitSync(); // or consumer.commitAsync()
}</code>

何時使用自動提交

自動提交適用於您的應用程式:

  • 容忍偶爾的資料重新處理(冪等運算)。
  • 可以處理一些訊息的遺失。

否則,建議手動提交。

同步與非同步提交

手動提交提供同步 (commitSync()) 和非同步 (commitAsync()) 選項。 commitSync() 會阻塞,直到確認提交為止,確保持久性,但會影響效能。 commitAsync() 是非阻塞的,但需要處理潛在的異常。

結論

消費者群抵消是可靠的 Kafka 消費的基礎。 雖然自動提交簡化了事情,但手動提交提供了更好的控制和資料安全性。 同步提交和非同步提交之間的選擇取決於應用程式的需求,平衡效能和可靠性。 了解這些機制是建立健壯且容錯的 Kafka 應用程式的關鍵。

了解更多卡夫卡

考慮探索 Coding Harbour 提供的免費 Kafka 迷你課程。

照片來源:@kencheungphoto

以上是KAFKA消費者 - 承諾消費者組偏移的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn