ApsaraMQ for Kafka を使用しているときに、グループにメッセージが蓄積される場合があります。このトピックでは、メッセージの蓄積が正常かどうかを判断する方法と、異常なメッセージの蓄積を処理する方法について説明します。
クライアントでの消費プロセス
メッセージの蓄積が存在するかどうかを理解するには、クライアントでメッセージがどのように消費されるかを理解する必要があります。次の図は、消費プロセスを示しています。
メッセージの蓄積が正常かどうかを判断する
グループにメッセージが蓄積された場合は、次の手順を実行して、メッセージの蓄積が正常かどうかを判断します。
Kafka コンソール にログインします。
異常なメッセージの蓄積を処理する方法
前述の操作に基づいて異常なメッセージの蓄積が存在することを確認した後、メッセージ消費時間を出力するか、スタック情報に基づいてスレッドの実行を確認できます。 異常なメッセージの蓄積を防ぐために、次の方法を使用してメッセージ消費率を上げることができます。
コンシューマーの数を増やします。 プロセスにコンシューマーを追加し、各コンシューマーが 1 つのスレッドに対応するようにすることができます。 あるいは、複数のコンシューマープロセスをデプロイすることもできます。 コンシューマーの数がパーティションの数を超えると、消費率を上げることはできません。 そうしないと、特定のコンシューマーがアイドル状態になります。
消費スレッドの数を増やします。 詳細については、「コンシューマーのベストプラクティス」トピックの「消費率の向上」セクションを参照してください。
jstack コマンドを実行して、Java スレッドに関するスタック情報をクエリできます。
Kafka コンソールでメッセージが蓄積され、コンシューマーの状態が異常な場合、リバランスが発生した可能性があります。 リバランス中は、メッセージは消費されません。 この場合、多数のクライアントが Kafka に接続または切断するため、メッセージが蓄積されます。 詳細については、「コンシューマークライアントでリバランスが頻繁に発生するのはなぜですか?」を参照してください。
参考資料
jstack の詳細については、「jstack - スタックトレース」を参照してください。
その他のよくある質問(FAQ)については、「FAQ」を参照してください。