この問題は、次のいずれかの原因で発生する可能性があります。消費トラフィックがネットワーク帯域幅に達している、単一メッセージのトラフィックがネットワーク帯域幅を超えている、コンシューマーが同時にプルするメッセージのトラフィックがネットワーク帯域幅を超えている。
問題の説明
コンシューマーがサブスクライブしているトピックはメッセージを受信しますが、消費は最新のオフセットに達していません。ただし、コンシューマーはブローカーからメッセージをゆっくりプルするか、ブローカーからメッセージをプルできません。この問題は、インターネット経由で消費が行われる場合に頻繁に発生します。
考えられる原因
この問題は、次の原因によって発生する可能性があります。
消費トラフィックがネットワーク帯域幅に達している。
単一メッセージのトラフィックがネットワーク帯域幅を超えている。
コンシューマーが同時にプルするメッセージのトラフィックがネットワーク帯域幅を超えている。
説明コンシューマーが同時にプルできるメッセージの数とサイズは、次のパラメーターによって決まります。
max.poll.records: コンシューマーが同時にプルできるメッセージの最大数。
fetch.max.bytes: コンシューマーが同時にプルできるメッセージの最大バイト数。
max.partition.fetch.bytes: コンシューマーが単一パーティションから同時にプルできるメッセージの最大バイト数。
解決策
ApsaraMQ for Kafka コンソール にログインして、メッセージをクエリします。
クエリ結果にメッセージが返された場合は、後続の手順を実行します。
Instances ページの左側のナビゲーションペインで、 を選択します。表示されたページで、モニタリングチャート タブをクリックし、instance_internet_rx.rate(bit/s) チャートを表示して、インスタンスの消費トラフィックがネットワーク帯域幅に達しているかどうかを確認します。
消費トラフィックがネットワーク帯域幅に達している場合は、ネットワーク帯域幅を増やします。
トピック内の単一メッセージのトラフィックがネットワーク帯域幅を超えているかどうかを確認します。
トラフィックがネットワーク帯域幅を超えている場合は、ネットワーク帯域幅を増やすか、メッセージのサイズを減らします。
コンシューマーが同時にプルするメッセージのトラフィックがネットワーク帯域幅を超えているかどうかを確認します。
トラフィックがネットワーク帯域幅を超えている場合は、次のパラメーターの構成を変更します。
fetch.max.bytes: パラメーターをネットワーク帯域幅よりも小さい値に設定します。
max.partition.fetch.bytes: パラメーターを制限値よりも小さい値に設定します。制限値は、次の式を使用して計算されます。制限値 = ネットワーク帯域幅 / メッセージをサブスクライブするパーティションの数。
コンシューマーが仮想プライベートクラウド ( VPC ) 内のブローカーにアクセスする場合、このトピックのネットワーク帯域幅は、インスタンスの Elastic Network Interface ( ENI ) の最大書き込みトラフィックを指します。
コンシューマーがインターネット経由でブローカーにアクセスする場合、このトピックのネットワーク帯域幅は、インスタンスのインターネット帯域幅を指します。