本節提供疑難排解指南,協助解決使用 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 訂閱者 (
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 記錄標頭。
詳情請參閱「訊息轉換」。