共用方式為


Apache Kafka 客戶端的建議設定

以下是從 Apache Kafka 用戶端應用程式使用 Azure 事件中樞 的建議組態。

Java 用戶端組態屬性

生產者和取用者組態

屬性 建議的值 允許的範圍 備註
metadata.max.age.ms 180000 (近似) < 240000 可以降低以更快挑選元數據變更。
connections.max.idle.ms 180000 < 240000 Azure 會關閉輸入傳輸控制通訊協定 (TCP) 閑置 > 240,000 毫秒,這可能會導致在無效連線上傳送(因為傳送逾時而顯示為過期批次)。

僅產生者設定

您可以在這裡找到產生者設定。

屬性 建議的值 允許的範圍 備註
max.request.size 1000000 < 1046528 如果傳送大於 1,046,528 個字節的要求,服務就會關閉連線。 此值必須變更,並導致高輸送量產生案例的問題。
retries > 0 可能需要增加 delivery.timeout.ms 值,請參閱檔。
request.timeout.ms 30000 .. 60000 > 20000 事件中樞在內部預設為至少 20,000 毫秒。 雖然接受具有較低逾時值的要求,但不保證客戶端行為。

請確定您的 request.timeout.ms 至少是 60000 的建議值,而您的 session.timeout.ms 至少是建議的 30000 值。 將這些設定過低可能會導致取用者逾時,這會導致重新平衡(這會導致更多逾時、導致更重新平衡等等)。

metadata.max.idle.ms 180000 > 5000 控制生產者快取閑置主題的元數據時間長度。 如果上次產生主題之後經過的時間超過元數據閑置持續時間,則主題的元數據會被遺忘,且下一次存取主題將會強制元數據擷取要求。
linger.ms > 0 針對高輸送量案例,揮之不去的值應該等於最高可容忍的值,以利用批處理。
delivery.timeout.ms 根據公式設定 (request.timeout.ms + linger.ms) * retries
compression.type uncompressed, gzip 目前僅支援 gzip 壓縮。

僅限取用者設定

您可以在這裡找到取用者設定。

屬性 建議的值 允許的範圍 備註
heartbeat.interval.ms 3000 3000 是預設值,不應該變更。
session.timeout.ms 30000 6000 .. 300000 從 30000 開始,如果看到因為遺漏活動訊號而頻繁重新平衡,請增加。

請確定您的 request.timeout.ms 至少為 60000 的建議值,而且您的 session.timeout.ms 至少是建議的 30000 值。 將這些設定過低可能會導致取用者逾時,這會導致重新平衡(這會導致更多逾時、導致更重新平衡等等)。

max.poll.interval.ms 300000 (預設值) >session.timeout.ms 用於重新平衡逾時,因此不應該設定太低。 必須大於 session.timeout.ms。

librdkafka 組態屬性

主要 librdkafka 組態檔 (link) 包含下列各節所述屬性的擴充描述。

生產者和取用者組態

屬性 建議的值 允許的範圍 備註
socket.keepalive.enable true 如果連線預期為閑置,則為必要專案。 Azure 會關閉輸入 TCP 閑置 > 240,000 毫秒。
metadata.max.age.ms ~ 180000 < 240000 可以降低以更快挑選元數據變更。

僅產生者設定

屬性 建議的值 允許的範圍 備註
retries > 0 預設值為 2147483647。
request.timeout.ms 30000 .. 60000 > 20000 事件中樞在內部預設為至少 20,000 毫秒。 librdkafka 默認值為 5000,這可能會造成問題。 雖然接受具有較低逾時值的要求,但不保證客戶端行為。
partitioner consistent_random 請參閱 librdkafka 檔 consistent_random 是預設值和最佳。 在大部分情況下,最好處理空白和 Null 索引鍵。
compression.codec none, gzip 目前僅支援 gzip 壓縮。

僅限取用者設定

屬性 建議的值 允許的範圍 備註
heartbeat.interval.ms 3000 3000 是預設值,不應該變更。
session.timeout.ms 30000 6000 .. 300000 從 30000 開始,如果看到因為遺漏活動訊號而頻繁重新平衡,請增加。
max.poll.interval.ms 300000 (預設值) >session.timeout.ms 用於重新平衡逾時,因此不應該設定太低。 必須大於 session.timeout.ms。

進一步注意事項

請查看下表中的常見組態相關錯誤案例。

徵兆 問題 解決方案
因重新平衡而發生位移認可失敗 您的取用者在呼叫輪詢() 之間等待太久,而服務正在將取用者從群組中踢出。 您有幾個選項:
  • 增加輪詢處理逾時 (max.poll.interval.ms
  • 減少訊息批次大小以加速處理
  • 改善處理平行處理以避免封鎖取用者.poll()
套用這三個組合可能是最明智的。
高生產輸送量的網路例外狀況 如果您使用 Java 用戶端 + 預設 max.request.size,您的要求可能太大。 請參閱稍早所述的 Java 設定。

下一步

如需所有 Azure 服務的配額和限制,請參閱 Azure 訂用帳戶和服務限制、配額和限制