このドキュメントでは、Bigtable サブスクリプションのトラブルシューティングのヒントについて説明します。
サブスクリプションを作成または更新できない
Bigtable サブスクリプションを作成または更新しようとすると、次のエラーが発生することがあります。
権限拒否エラー
Bigtable インスタンスまたはテーブルが存在しない場合、または構成されたサービス アカウントにアクセス権がない場合は、権限拒否エラーが表示されます。
問題を解決するには:
インスタンスとテーブルが存在することを確認します。詳細については、次のドキュメントをご覧ください。
存在しない場合は、作成してから定期購入の作成を再試行してください。この手順の例については、Pub/Sub から Bigtable に書き込むをご覧ください。
それでもこのエラーが発生する場合は、サービス アカウントに正しい権限が付与されているかどうかを確認します。詳細については、サービス アカウントに IAM ロールを付与するをご覧ください。
列ファミリーがない
Bigtable テーブルに正しい列ファミリーがない場合は、INCOMPATIBLE_SCHEMA エラーが表示されます。
このエラーは、次の問題が原因で発生する可能性があります。
- テーブルに
data列ファミリーがない。 - メタデータの書き込みが有効になっており、テーブルに
pubsub_metadata列ファミリーがない。
この問題を解決するには、必要な列ファミリーを作成します。詳細については、列ファミリーを追加するをご覧ください。
サブスクリプションがデータを書き込んでいない
Bigtable サブスクリプションがデータを書き込んでいない場合は、gcloud beta pubsub subscriptions describe コマンドを実行してサブスクリプションの状態を確認します。
gcloud beta pubsub subscriptions describe SUBSCRIPTION_ID
SUBSCRIPTION_ID は、サブスクリプションの名前に置き換えます。
bigtableConfig.state フィールドには状態が含まれます。サブスクリプションが Bigtable にメッセージを書き込む準備ができている場合、状態は ACTIVE です。それ以外の場合、構成にエラーがあり、サブスクリプションが Bigtable テーブルにメッセージを書き込むことができません。
構成に関する問題としては、以下が挙げられます。
アプリ プロファイルが単一クラスタ ルーティング用に構成されていません。
権限エラー。権限拒否エラーをご覧ください。
Bigtable テーブルに必須の列ファミリーがありません。列ファミリーが見つからないをご覧ください。
メッセージ ストレージ ポリシーのため、サブスクリプションで Bigtable テーブルに書き込むことができません。このエラーは、
enforceInTransitがTrueで、テーブルのロケーションが許可されたリージョンにない場合に発生します。
サブスクリプションがエラー状態の場合、Bigtable テーブルにメッセージは書き込まれません。メッセージはサブスクリプション バックログに残ります。デッドレター トピックが構成されている場合でも、メッセージはデッドレター トピックに配信されません。未確認メッセージは、サブスクリプションのメッセージ保持期間の間保持されます。
問題が解決すると、最終的にサブスクリプションは正常な状態に戻ります。
バックログの増加
サブスクリプションの状態が ACTIVE であっても、サブスクリプションのメッセージのバックログが増加している場合や、メッセージがサブスクリプションのデッドレター トピックに送信されている場合は、次の問題を探します。
パブリッシュ レートが容量を超えている
トピックへのメッセージのパブリッシュ レートが Bigtable クラスタの容量を超えると、サブスクリプションにバックログが蓄積される可能性があります。
メッセージの順序指定には、パフォーマンス上のトレードオフが伴います。順序指定で Bigtable サブスクリプションを使用すると、スループットが低下したり、メッセージ配信のレイテンシが増加したりする可能性があります。順序付けを有効にするとパフォーマンスの問題が発生する場合は、ホットキーを回避するために十分な粒度の順序付けキーを使用するか、順序付けを必要としないようにアプリケーションを変更してください。詳細については、順序付きメッセージを使用する際の考慮事項をご覧ください。
クラスタのパフォーマンスをモニタリングし、クラスタサイズの拡大を検討します。詳細については、Bigtable ドキュメントの次のトピックをご覧ください。
リージョン間のトラフィック
アプリケーションが Bigtable クラスタとは異なるリージョンからトピックにパブリッシュする場合、同じリージョンからパブリッシュする場合と比較して、各メッセージのパブリッシュに時間がかかります。公開時間が長くなると、サブスクリプションが Bigtable にメッセージを書き込むレートが低下し、合計スループットが低下します。
メッセージのパブリッシュにかかる時間を最小限に抑えるには、Bigtable クラスタと同じリージョンでメッセージをパブリッシュする必要があります。
次のステップ
- Bigtable サブスクリプションに問題がまだある場合は、サポートの利用をご覧ください。