排解 Pub/Sub 連接器問題

本節提供疑難排解指南,協助解決使用 Pub/Sub 來源連接器Pub/Sub 接收器連接器時遇到的常見問題。

缺少 Pub/Sub 權限

如果代管 Kafka 服務帳戶沒有權限存取 Pub/Sub 資源,就會發生下列錯誤:

PERMISSION_DENIED: User not authorized to perform this action.

造成這項錯誤的可能原因如下:

  • Pub/Sub 來源連接器:Managed Kafka 服務帳戶可能沒有存取 Pub/Sub 訂閱項目的權限。如要解決這個問題,請將下列兩個 Identity and Access Management (IAM) 角色授予代管 Kafka 服務帳戶:

    • Pub/Sub 訂閱者 (roles/pubsub.subscriber)
    • Pub/Sub 檢視器 (roles/pubsub.viewer)

    詳情請參閱「授予從 Pub/Sub 訂閱項目讀取資料的權限」。

  • Pub/Sub 接收器連接器:Managed Kafka 服務帳戶可能沒有權限發布至 Pub/Sub 主題。如要解決這個問題,請將 Pub/Sub 發布者 (roles/pubsub.publisher) IAM 角色授予 Managed Kafka 服務。

    詳情請參閱「授予發布至 Pub/Sub 主題的權限」。

驗證訂閱項目時發生錯誤

如果 Pub/Sub 來源連接器找不到 Pub/Sub 訂閱項目,連接器就會失敗,並顯示類似下列的錯誤訊息:

org.apache.kafka.connect.errors.ConnectException: Error verifying the subscription SUBSCRIPTION for project PROJECT

如要解決這個問題,請確認連接器的cps.subscription設定指定正確的訂閱項目,且該訂閱項目存在於您的專案中。

連接器無法轉換記錄

如果連接器的鍵轉換器或值轉換器與記錄的資料類型不相容,連接器記錄中會顯示類似下列內容的訊息:

org.apache.kafka.connect.errors.DataException: Invalid schema type for
CONVERTER_NAME: DATA_FORMAT

如要解決這個問題,請將鍵轉換器或值轉換器變更為正確的類別,以支援結構定義資料類型。

舉例來說,如果您將金鑰轉換器設為 ByteArrayConverter,可能會看到 "Invalid schema type for ByteArrayConverter: STRING" 錯誤。發生這項錯誤的原因是 ByteArrayConverter 不支援 STRING 類型。請改用 org.apache.kafka.connect.storage.StringConverter

ByteArrayConverter 的架構類型無效

如果 Pub/Sub 來源連接器輸出含有 struct 值的 Kafka 記錄,但連接器的值轉換器為 ByteArrayConverter,就會發生下列問題。

Pub/Sub 訊息不會寫入 Kafka 主題,且連接器記錄檔中會顯示類似下列的錯誤:

org.apache.kafka.connect.errors.DataException: Invalid schema type for ByteArrayConverter: STRUCT

如要解決這個問題,請對連接器設定進行下列其中一項變更:

  • value.converter 變更為 org.apache.kafka.connect.json.JsonConverter。 設定完成後,連接器會將 struct 轉換為 JSON。

  • 請勿變更 value.converter,但請在設定中新增 kafka.record.headers=true。使用這項設定時,連接器會將訊息資料寫入位元組陣列,而不是 struct。Pub/Sub 訊息中的任何自訂屬性都會寫入為 Kafka 記錄標頭。

詳情請參閱「訊息轉換」。

後續步驟