本文提供使用 Apache Kafka 事件中樞時可能會遇到之問題的疑難解答秘訣。
伺服器忙碌中例外狀況
您可能會因為 Kafka 節流而看到 ThrottledRequests 計量。 若使用 AMQP 用戶端,事件中樞會在服務節流時立即傳回伺服器忙碌中的例外狀況。 這等同於「稍後再試一次」訊息。 在 Kafka 中,傳入訊息在被確認之前會有延遲,而傳出訊息則會延遲傳送。 所傳回的延遲長度以毫秒為單位,與產生/擷取回應時的 throttle_time_ms 相同。 在大部分情況下,這些延遲的要求不會記錄為事件中樞儀表板上的 ThrottledRequests 計量。 反而回應的 throttle_time_ms 值應作為輸送量已超過佈建配額的指標。
若流量過多,服務會有下列行為:
- 如果產生要求的延遲超過要求逾時(request.timeout.ms),事件中樞會傳回 原則違規 錯誤碼。
- 若擷取要求的延遲值超過要求的逾時值,事件中樞便會將要求記錄為已節流,並使用空白記錄集回應,且無錯誤碼。
未收到任何記錄
您可能看到取用者未取得任何記錄,且不斷重新平衡。 在此案例中,取用者未取得任何記錄,且不斷重新平衡。 發生例外狀況或錯誤時,Kafka 記錄將會顯示取用者停滯在嘗試重新加入群組及指派磁碟分割的狀態。 幾項可能的原因如下:
- 請確定您的
request.timeout.ms至少為建議值 60000,且session.timeout.ms至少為建議值 30000。 將這些設定過低可能會導致消費者逾時,進而引發重新平衡(這導致更多的逾時,進而引發更多的重新平衡,如此循環下去) - 如果您的設定符合這些建議值,而且您仍然看到持續的重新平衡,請隨意提出問題(並請務必在問題中附上整個設定,以便我們協助除錯)。
壓縮/訊息格式版本問題
目前,適用於 Kafka 的事件中樞僅支持 gzip 的壓縮演算法。 如果使用任何其他演算法,用戶端應用程式就會看到訊息格式版本錯誤(例如, 。 The message format version on the broker does not support the request.
如果需要使用不支援的壓縮演算法,使用該特定演算法壓縮資料再將它傳送至代理程式,並在接收後解壓縮,是有效的因應措施。 訊息主體只是服務的位元組陣列,因此用戶端的壓縮/解壓縮不會造成任何問題。
UnknownServerException(未知伺服器異常)
您可能會從 Kafka 用戶端連結庫收到 UnknownServerException,類似下列範例:
org.apache.kafka.common.errors.UnknownServerException: The server experienced an unexpected error when processing the request
使用 Microsoft 支援服務提出票證。 採用偵錯層級的記錄和例外狀況時間戳記 (UTC),可有助於問題偵錯。
其他問題
若在事件中樞上使用 Kafka 時發生問題,請檢查以下項目。
- 防火牆封鎖流量 - 請確定您的防火牆未封鎖連接埠 9093。
- TopicAuthorizationException - 此例外狀況最常見的原因包含:
- 設定檔中的連接字串有錯字,或
- 在基本層命名空間嘗試使用適用於 Kafka 的事件中樞。 基本層不支援適用於 Kafka 的事件中樞相關功能。
- Kafka 版本不符 - 適用於 Kafka 生態系統的事件中樞支援 Kafka 1.0 以上的版本。 使用 Kafka 0.10 以上版本的某些應用程式,有時可能會因為 Kafka 通訊協定的回溯相容性而無法運作,但我們強烈建議不要使用舊的 API 版本。 Kafka 0.9 以下的版本不支援所需的 SASL 通訊協定,且無法連線至事件中樞。
- 取用 Kafka 時 AMQP 標頭的編碼異常 - 透過 AMQP 將事件傳送至事件中樞時,所有 AMQP 承載標頭皆會以 AMQP 編碼序列化。 Kafka 取用者不會將 AMQP 標頭還原序列化。 若要讀取標頭值,請將 AMQP 標頭手動解碼。 或者,如果您知道您正透過 Kafka 通訊協定取用,則可以避免使用 AMQP 標頭。 如需詳細資訊,請參閱這個 GitHub 問題 \(英文\)。
- SASL 驗證:若讓您的架構搭配使用事件中樞所需的 SASL 驗證通訊協定,實際上可能更不容易。 針對透過 SASL 驗證使用架構資源的設定,查看是否能進行疑難排解。
限制
Apache Kafka 與事件中樞 Kafka 的比較。 在大部分的情況下,Azure 事件中樞的 Kafka 介面具有與 Apache Kafka 相同的預設值、屬性、錯誤碼和一般行為。 這些情境中這兩者明確不同(或事件中心施加限制而 Kafka 沒有的情境),如下所示:
group.id屬性的長度上限為 256 個字元- 的大小
offset.metadata.max.bytes上限為 1,024 個字節 - 位移認可將進行節流:各分割區每秒為 2 個呼叫,且內部記錄檔大小上限為 1 MB
後續步驟
若要深入了解事件中樞和適用於 Kafka 的事件中樞,請參閱下列文章: