

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# MSK Replicator のトラブルシューティング
<a name="msk-replicator-troubleshooting"></a>

次の情報は、MSK レプリケーターに関する問題のトラブルシューティングに役立ちます。他の Amazon MSK 機能に関する問題の解決情報については、「[Amazon MSK クラスターをトラブルシューティングする](troubleshooting.md)」を参照してください。[AWS re:Post](https://repost.aws/) に問題を投稿することもできます。

## MSK レプリケーターの状態が CREATING から FAILED に変わります。
<a name="msk-replicator-troubleshooting-failed-state"></a>

MSK レプリケーターの作成に失敗する一般的な原因には、次のようなものがあります。

1. ターゲットクラスターのセクションでレプリケーターの作成用に指定したセキュリティグループに、ターゲットクラスターのセキュリティグループへのトラフィックを許可するアウトバウンドルールがあることを確認します。また、ターゲットクラスターのセキュリティグループに、ターゲットクラスターのセクションでレプリケーターの作成用に指定するセキュリティグループからのトラフィックを受け入れるインバウンドルールがあることを確認します。「[ターゲットクラスターの選択](msk-replicator-create-console.md#msk-replicator-create-console-choose-target)」を参照してください。

1. クロスリージョンレプリケーション用にレプリケーターを作成する場合は、ソースクラスターで IAM アクセスコントロール認証方法に対してマルチ VPC 接続が有効になっていることを確認します。「[単一リージョンの Amazon MSK マルチ VPC プライベート接続](aws-access-mult-vpc.md)」を参照してください。また、MSK レプリケーターがソースクラスターに接続できるように、ソースクラスターでクラスターポリシーが設定されていることも確認します。「[Amazon MSK ソースクラスターを準備する](msk-replicator-prepare-cluster.md)」を参照してください。

1. MSK レプリケーターの作成時に指定した IAM ロールに、ソースクラスターとターゲットクラスターに対する読み取りと書き込みに必要なアクセス許可があることを確認します。また、IAM ロールに、トピックに書き込むアクセス許可があることも確認します。「[レプリケータの設定とアクセス許可を設定します。](msk-replicator-create-console.md#msk-replicator-create-settings)」を参照してください。

1. ネットワーク ACL が MSK レプリケーターとソースクラスターおよびターゲットクラスターの間の接続をブロックしていないことを確認します。

1. MSK レプリケーターが接続を試みたときに、ソースクラスターまたはターゲットクラスターが完全には利用できない可能性があります。これは、負荷、ディスク使用量、または CPU 使用率が高すぎるために、レプリケーターがブローカーに接続できなくなったことが原因である可能性があります。ブローカーの問題を修正し、レプリケーターの作成を再試行してください。

上記の検証を実行したら、MSK レプリケーターを再度作成します。

## MSK レプリケーターが CREATING 状態でスタックしているように見える
<a name="msk-replicator-troubleshooting-stuck-creating"></a>

MSK レプリケーターの作成には、最大 30 分かかる場合があります。30 分間待ってから、レプリケーターの状態を再度確認してください。

## MSK レプリケーターがデータをレプリケートしていない、または一部のデータしかレプリケートしていない
<a name="msk-replicator-troubleshooting-not-replicating"></a>

データレプリケーションの問題をトラブルシューティングするには、次のステップを実行します。

1. MSK Replicator が提供する Amazon CloudWatch の AuthError メトリクスを使用して、レプリケーターで認証エラーが発生していないことを確認します。このメトリクスが 0 より大きい場合は、レプリケーター用に指定した IAM ロールのポリシーが有効かどうかと、クラスターのアクセス許可に対して拒否アクセス許可が設定されていないかを確認します。clusterAlias ディメンションに基づいて、ソースクラスターまたはターゲットクラスターで認証エラーが発生しているかどうかを識別できます。

1. ソースクラスターとターゲットクラスターで問題が発生していないことを確認します。レプリケーターがソースクラスターまたはターゲットクラスターに接続できない可能性があります。これは、接続数が多すぎる、ディスクの容量が満杯である、または CPU 使用率が高いことが原因で発生する可能性があります。

1. Amazon CloudWatch の KafkaClusterPingSuccessCount メトリクスを使用して、ソースクラスターとターゲットクラスターに MSK Replicator からアクセスできることを確認します。clusterAlias ディメンションに基づいて、ソースクラスターまたはターゲットクラスターで認証エラーが発生しているかどうかを識別できます。このメトリクスが 0 またはデータポイントがない場合、接続は異常です。MSK レプリケーターがクラスターへの接続に使用しているネットワークと IAM ロールのアクセス許可を確認する必要があります。

1. Amazon CloudWatch の ReplicatorFailure メトリクスを使用して、トピックレベルのアクセス許可の欠落が原因でレプリケーターに障害が発生していないことを確認します。このメトリクスが 0 より大きい場合は、トピックレベルのアクセス許可に対して指定した IAM ロールを確認してください。

1. レプリケーターの作成時に許可リストに指定した正規表現が、レプリケートするトピックの名前と一致することを確認します。また、拒否リストの正規表現が原因でトピックがレプリケートから除外されていないことも確認します。

1. レプリケーターがターゲットクラスターの新しいトピックまたはトピックパーティションを検出して作成するまでに最大 30 秒かかる場合があります。レプリケーターの開始位置が latest (デフォルト) の場合、ターゲットクラスターでトピックが作成される前にソーストピックに生成されたメッセージはレプリケートされません。あるいは、ターゲットクラスター上のトピックの既存のメッセージをレプリケートする場合は、ソースクラスターのトピックパーティション内の最も古いオフセットからレプリケーションを開始できます。「[レプリケータの設定とアクセス許可を設定します。](msk-replicator-create-console.md#msk-replicator-create-settings)」を参照してください。

## メッセージのオフセットがターゲットクラスターとソースクラスターとで異なる
<a name="msk-replicator-troubleshooting-different-message-offsets"></a>

データのレプリケートの一環として、MSK Replicator はソースクラスターからのメッセージを消費し、ターゲットクラスターに生成します。これにより、ソースクラスターとターゲットクラスターでメッセージのオフセットが異なる場合があります。ただし、レプリケーターの作成中にコンシューマーグループのオフセットの同期をオンにした場合、MSK Replicator はメタデータをコピーしながらオフセットを自動的に変換するため、ターゲットクラスターにフェイルオーバーした後、コンシューマーはソースクラスターで中断した場所の近くから処理を再開できます。

## MSK Replicator がコンシューマーグループのオフセットを同期していない、またはコンシューマーグループがターゲットクラスターに存在しない
<a name="msk-replicator-troubleshooting-not-syncing-consumer-groups"></a>

メタデータレプリケーションの問題をトラブルシューティングするには、以下の手順を実行します。

1. データレプリケーションが期待どおりに機能していることを確認します。そうでない場合は、「[MSK レプリケーターがデータをレプリケートしていない、または一部のデータしかレプリケートしていない](#msk-replicator-troubleshooting-not-replicating)」を参照してください。

1. レプリケーターの作成時に許可リストに指定した正規表現が、レプリケートするコンシューマーグループの名前と一致することを確認します。また、拒否リストの正規表現が原因でコンシューマーグループがレプリケーションから除外されていないことも確認します。

1. MSK Replicator がターゲットクラスターにトピックを作成したことを確認します。レプリケーターがターゲットクラスター上の新しいトピックまたはトピックパーティションを検出して作成するまでに最大 30 秒かかる場合があります。レプリケーターの開始位置が *latest* (デフォルト) の場合、ターゲットクラスターでトピックが作成される前にソーストピックに生成されたメッセージはレプリケートされません。ソースクラスターのコンシューマーグループが MSK Replicator によってレプリケートされていないメッセージのみを消費した場合、コンシューマーグループはターゲットクラスターにレプリケートされません。トピックがターゲットクラスターに正常に作成されると、MSK Replicator はソースクラスターに新しく書き込まれたメッセージをターゲットクラスターにレプリケートし始めます。コンシューマーグループがソースからこれらのメッセージの読み込みを開始すると、MSK Replicator はコンシューマーグループをターゲットクラスターに自動的にレプリケートします。あるいは、ターゲットクラスター上のトピックの既存のメッセージをレプリケートする場合は、ソースクラスターのトピックパーティション内の最も古いオフセットからレプリケーションを開始できます。「[レプリケータの設定とアクセス許可を設定します。](msk-replicator-create-console.md#msk-replicator-create-settings)」を参照してください。

**注記**  
MSK Replicator は、トピックパーティションの末尾に近い場所から読み込みを行っているソースクラスター上のコンシューマーのコンシューマーグループのオフセット同期を最適化します。ソースクラスターのコンシューマーグループが遅延している場合、ターゲットのコンシューマーグループの遅延はソースと比較して大きくなる可能性があります。つまり、ターゲットクラスターへのフェイルオーバー後、コンシューマーは重複したメッセージをさらに再処理しすることになります。この遅延を小さくするには、ソースクラスターのコンシューマーがストリームの先端 (トピックパーティションの末尾) にキャッチアップするように処理を行い、消費を開始する必要があります。コンシューマーによる処理がキャッチアップすると、MSK Replicator は自動的に遅延を小さくします。

## レプリケーションのレイテンシーが高い、または増加し続けている
<a name="msk-replicator-troubleshooting-high-latency"></a>

レプリケーションレイテンシーが高くなる一般的な原因は次のとおりです。

1. ソースとターゲットの MSK クラスターに適切な数のパーティションがあることを確認します。パーティションが少なすぎたり多すぎたりすると、パフォーマンスに影響する可能性があります。パーティション数の選択に関するガイダンスについては、「[MSK レプリケーターの使用に関するベストプラクティス](msk-replicator-best-practices.md)」を参照してください。次の表は、MSK レプリケーターで必要なスループットを実現するために推奨される最小パーティション数を示しています。  
**スループットと推奨される最小パーティション数**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/msk/latest/developerguide/msk-replicator-troubleshooting.html)

1. ソースとターゲットの MSK クラスターに、レプリケーショントラフィックをサポートするのに十分な読み取りおよび書き込み容量があることを確認します。MSK レプリケーターは、ソースクラスター (エグレス) のコンシューマーとして、またターゲットクラスター (イングレス) のプロデューサーとして機能します。そのため、クラスター上の他のトラフィックに加えてレプリケーショントラフィックもサポートできるように、クラスター容量をプロビジョニングする必要があります。MSK クラスターのサイズ設定のガイダンスについては、「[MSK レプリケーターの使用に関するベストプラクティス](msk-replicator-best-practices.md)」を参照してください。

1. レプリケーションレイテンシーは、レプリケート元とレプリケート先の AWS リージョンのペアが異なる MSK クラスターでは、クラスター間の地理的な距離によって異なる場合があります。例えば、欧州 (アイルランド) リージョンと欧州 (ロンドン) リージョンのクラスター間でレプリケーションを行う場合、欧州 (アイルランド) リージョンとアジアパシフィック (シドニー) リージョンのクラスター間のレプリケーションと比較して、レプリケーションレイテンシーは一般的に低くなります。

1. ソースまたはターゲットのクラスターで過度に厳しいクォータが設定されているためにレプリケーターがスロットルされていないことを確認してください。MSK Replicator が提供する Amazon CloudWatch の ThrottleTime メトリクスを使用して、ソース/ターゲットクラスター上のブローカーによってリクエストがスロットルされた平均時間 (ミリ秒単位) を確認できます。このメトリクスが 0 より大きい場合は、レプリケーターがキャッチアップできるように、Kafka のクォータを調整してスロットリングを減らす必要があります。レプリケーターの Kafka クォータの管理については、「[Kafka クォータを使用した MSK レプリケータースループットの管理](msk-replicator-best-practices.md#msk-replicator-manage-throughput-kafka-quotas)」を参照してください。

1.  AWS リージョンが劣化すると、ReplicationLatency と MessageLag が増加する可能性があります。[AWS Service Health Dashboard](https://health.aws.amazon.com/health/status) を使用して、プライマリ MSK クラスターが配置されているリージョンで MSK サービスイベントがないかを確認します。サービスイベントが発生した場合は、一時的にアプリケーションの読み取りと書き込みを別のリージョンにリダイレクトできます。

## ReplicatorFailure メトリクスを使用した MSK レプリケーターの障害のトラブルシューティング
<a name="msk-replicator-troubleshooting-ReplicatorFailure"></a>

ReplicatorFailure メトリクスは、MSK Replicator のレプリケーション問題をモニタリングおよび検出するのに役立ちます。このメトリクスの 0 以外の値は、通常、レプリケーションの失敗の問題を示します。これは、次の要因が原因である可能性があります。
+ メッセージサイズの制限
+ タイムスタンプ範囲違反
+ レコードバッチサイズの問題

ReplicatorFailure メトリクスがゼロ以外の値を報告した場合は、以下の手順に従って問題をトラブルシューティングします。

**注記**  
このメトリクスの詳細については、「[MSK レプリケーターのメトリクス](msk-replicator-monitor.md#msk-replicator-metrics)」を参照してください。

1. ターゲット MSK クラスターに接続でき、Apache Kafka CLI ツールが設定されているクライアントを設定します。クライアントと Kafka CLI ツールの設定については、「[Amazon MSK プロビジョニングされたクラスターに接続する](client-access.md)」を参照してください。

1. [https://console.aws.amazon.com/msk/home?region=us-east-1\$1/home/](https://console.aws.amazon.com/msk/home?region=us-east-1#/home/) で Amazon MSK コンソールを開きます。

   次に、以下の操作を実行します。

   1. MSK レプリケーターとターゲット MSK クラスターの ARNs を取得します。

   1. 対象の MSK クラスターの [ブローカーエンドポイントを取得](get-bootstrap-console.md) します。これらのエンドポイントは、次のステップで使用します。

1. 次のコマンドを実行して、前のステップで取得した MSK レプリケーター ARN とブローカーエンドポイントをエクスポートします。

   次の例で使用されている <*ReplicatorARN*>、<*BootstrapServerString*>、<*ConsumerConfigFile*> のプレースホルダー値を実際の値に置き換えてください。

   ```
   export TARGET_CLUSTER_SERVER_STRING=<BootstrapServerString>
   ```

   ```
   export REPLICATOR_ARN=<ReplicatorARN>
   ```

   ```
   export CONSUMER_CONFIG_FILE=<ConsumerConfigFile>
   ```

1. `<path-to-your-kafka-installation>/bin` ディレクトリ内で、次の操作を行ってください。

   1. 次のスクリプトを保存し、 **query-replicator-failure-message.sh**という名前を付けます。

      ```
      #!/bin/bash
      
      # Script: Query MSK Replicator Failure Message
      # Description: This script queries exceptions from AWS MSK Replicator status topics
      # It takes a replicator ARN and bootstrap server as input and searches for replicator exceptions
      # in the replicator's status topic, formatting and displaying them in a readable manner
      #
      # Required Arguments:
      #   --replicator-arn: The ARN of the AWS MSK Replicator
      #   --bootstrap-server: The Kafka bootstrap server to connect to
      #   --consumer.config: Consumer config properties file
      # Usage Example:
      #   ./query-replicator-failure-message.sh ./query-replicator-failure-message.sh --replicator-arn <replicator-arn> --bootstrap-server <bootstrap-server> --consumer.config <consumer.config>
      
      print_usage() {
        echo "USAGE: $0 ./query-replicator-failure-message.sh --replicator-arn <replicator-arn> --bootstrap-server <bootstrap-server> --consumer.config <consumer.config>"
        echo "--replicator-arn <String: MSK Replicator ARN>      REQUIRED: The ARN of AWS MSK Replicator."
        echo "--bootstrap-server <String: server to connect to>  REQUIRED: The Kafka server to connect to."
        echo "--consumer.config <String: config file>            REQUIRED: Consumer config properties file."
        exit 1
      }
      
      # Initialize variables
      replicator_arn=""
      bootstrap_server=""
      consumer_config=""
      
      # Parse arguments
      while [[ $# -gt 0 ]]; do
        case "$1" in
          --replicator-arn)
            if [ -z "$2" ]; then
              echo "Error: --replicator-arn requires an argument."
              print_usage
            fi
            replicator_arn="$2"; shift 2 ;;
          --bootstrap-server)
            if [ -z "$2" ]; then
              echo "Error: --bootstrap-server requires an argument."
              print_usage
            fi
            bootstrap_server="$2"; shift 2 ;;
          --consumer.config)
            if [ -z "$2" ]; then
              echo "Error: --consumer.config requires an argument."
              print_usage
            fi
            consumer_config="$2"; shift 2 ;;
          *) echo "Unknown option: $1"; print_usage ;;
        esac
      done
      
      # Check for required arguments
      if [ -z "$replicator_arn" ] || [ -z "$bootstrap_server" ] || [ -z "$consumer_config" ]; then
        echo "Error: --replicator-arn, --bootstrap-server, and --consumer.config are required."
        print_usage
      fi
      
      # Extract replicator name and suffix from ARN
      replicator_arn_suffix=$(echo "$replicator_arn" | awk -F'/' '{print $NF}')
      replicator_name=$(echo "$replicator_arn" | awk -F'/' '{print $(NF-1)}')
      echo "Replicator name: $replicator_name"
      
      # List topics and find the status topic
      topics=$(./kafka-topics.sh --command-config client.properties --list --bootstrap-server "$bootstrap_server")
      status_topic_name="__amazon_msk_replicator_status_${replicator_name}_${replicator_arn_suffix}"
      
      # Check if the status topic exists
      if echo "$topics" | grep -Fq "$status_topic_name"; then
        echo "Found replicator status topic: '$status_topic_name'"
        ./kafka-console-consumer.sh --bootstrap-server "$bootstrap_server" --consumer.config "$consumer_config" --topic "$status_topic_name" --from-beginning | stdbuf -oL grep "Exception" | stdbuf -oL sed -n 's/.*Exception:\(.*\) Topic: \([^,]*\), Partition: \([^\]*\).*/ReplicatorException:\1 Topic: \2, Partition: \3/p'
      else
        echo "No topic matching the pattern '$status_topic_name' found."
      fi
      ```

   1. このスクリプトを実行して、MSK レプリケーターの失敗メッセージをクエリします。

      ```
      <path-to-your-kafka-installation>/bin/query-replicator-failure-message.sh --replicator-arn $REPLICATOR_ARN --bootstrap-server $TARGET_CLUSTER_SERVER_STRING --consumer.config $CONSUMER_CONFIG_FILE
      ```

      このスクリプトは、例外メッセージと影響を受けるトピックパーティションを含むすべてのエラーを出力します。この例外情報を使用して、「[MSK レプリケーターの一般的な障害とその解決策](#msk-replicator-ReplicatorFailure-error-mitigation)」で説明されているように障害を軽減できます。トピックには過去の失敗メッセージがすべて含まれているため、最後のメッセージを使用して調査を開始します。以下は、失敗メッセージの一例です。

      ```
      ReplicatorException: The request included a message larger than the max message size the server will accept. Topic: test, Partition: 1
      ```

### MSK レプリケーターの一般的な障害とその解決策
<a name="msk-replicator-ReplicatorFailure-error-mitigation"></a>

次のリストでは、発生する可能性のある MSK レプリケーターの障害とその軽減方法について説明します。

**max.request.size より大きいメッセージサイズ**  
**原因**  
このエラーは、個々のメッセージサイズが 10 MB を超えたために MSK レプリケーターがデータのレプリケートに失敗した場合に発生します。デフォルトでは、MSK レプリケーターは最大 10 MB のサイズのメッセージをレプリケートします。
以下は、この失敗メッセージの種類の例です。  

```
ReplicatorException: The message is 20635370 bytes when serialized which is larger than 10485760, which is the value of the max.request.size configuration. Topic: test, Partition: 1
```
**ソリューション**  
トピック内の個々のメッセージサイズを減らします。できない場合は、以下の手順に従って[制限の引き上げをリクエスト](limits.md#request-msk-quota-increase)してください。

**サーバーが受け入れるメッセージの最大サイズより大きいメッセージサイズ**  
**原因**  
このエラーは、メッセージサイズがターゲットクラスターの最大メッセージサイズを超えた場合に発生します。
以下は、この失敗メッセージの種類の例です。  

```
ReplicatorException: The request included a message larger than the max message size the server will accept. Topic: test, Partition: 1
```
**ソリューション**  
ターゲットクラスターまたは対応するターゲットクラスタートピックの `max.message.bytes` 設定を増やします。ターゲットクラスターの `max.message.bytes` 設定を、最大非圧縮メッセージサイズに合わせて設定します。これを行う方法については、[「max.message.bytes」](https://kafka.apache.org/documentation/#topicconfigs_max.message.bytes)を参照してください。

**タイムスタンプが範囲外です**  
**原因**  
このエラーは、個々のメッセージのタイムスタンプがターゲットクラスターの許容範囲外であるために発生します。
以下は、この失敗メッセージの種類の例です。  

```
ReplicatorException: Timestamp 1730137653724 of message with offset 0 is out of range. The timestamp should be within [1730137892239, 1731347492239] Topic: test, Partition: 1
```
**ソリューション**  
ターゲットクラスターの `message.timestamp.before.max.ms` 設定を更新して、古いタイムスタンプのメッセージを許可します。これを行う方法については、[message.timestamp.before.max.ms](https://kafka.apache.org/documentation/#topicconfigs_message.timestamp.before.max.ms) を参照してください。

**レコードバッチが大きすぎる**  
**原因**  
このエラーは、レコードバッチサイズがターゲットクラスターの トピックに設定されたセグメントサイズを超えているために発生します。MSK レプリケーターは、最大バッチサイズ 1 MB をサポートします。
以下は、この失敗メッセージの種類の例です。  

```
ReplicatorException: The request included message batch larger than the configured segment size on the server. Topic: test, Partition: 1
```
**ソリューション**  
レプリケーターがエラーなしで続行するには、ターゲットクラスターの segment.bytes 設定がバッチサイズ (1 MB) 以上である必要があります。ターゲットクラスターの segment.bytes を少なくとも 1048576 (1 MB) に更新します。この操作に関する情報は、[「segment.bytes 」](https://kafka.apache.org/documentation/#topicconfigs_segment.bytes)を参照してください。

**注記**  
これらのソリューションを適用した後に ReplicatorFailure メトリクスがゼロ以外の値を引き続き出力する場合は、メトリクスがゼロを出力するまでトラブルシューティングプロセスを繰り返します。