本節提供疑難排解指南,協助解決使用 Pub/Sub 來源連接器或 Pub/Sub 接收器連接器時遇到的常見問題。
缺少 Pub/Sub 權限
如果代管 Kafka 服務帳戶沒有存取 Pub/Sub 資源的權限,就會發生下列錯誤:
PERMISSION_DENIED: User not authorized to perform this action.
發生這項錯誤的原因可能有很多。
Pub/Sub 來源連接器:代管 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 Sink 連接器:代管 Kafka 服務帳戶可能沒有權限發布至 Pub/Sub 主題。如要解決這個問題,請將 Pub/Sub 發布者 (
roles/pubsub.publisher) IAM 角色授予代管 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 記錄標頭。
詳情請參閱「訊息轉換」。