分享方式:


Apache Kafka 的事件中樞疑難排解指南

使用適用於 Apache Kafka 的事件中樞時,本文為您提供可能問題的疑難排解秘訣。

伺服器忙碌中例外狀況

由於 Kafka 節流,因此可能會收到伺服器忙碌中的例外狀況。 若使用 AMQP 用戶端,事件中樞會在服務節流時立即傳回伺服器忙碌中的例外狀況。 這等同於「稍後再試一次」訊息。 在 Kafka 中,訊息在完成前會延遲。 所傳回的延遲長度以毫秒為單位,與產生/擷取回應時的 throttle_time_ms 相同。 在大部分情況下,這些延遲的要求不會記錄為事件中樞儀表板上的「伺服器忙碌中」例外狀況。 反而回應的 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 大小上限為 1024 個位元組
  • 位移認可將進行節流:各分割區每秒為 4 個呼叫,且內部記錄檔大小上限為 1 MB

下一步

若要深入了解事件中樞和適用於 Kafka 的事件中樞,請參閱下列文章: