コンシューマオフセットをリセットすると、サブスクライバーの現在の消費位置が変更されます。コンシューマーが失敗したり、誤ったデータを消費したりした場合、コンシューマオフセットを以前の位置にロールバックして消費を再開できます。または、消費位置を最新オフセットに移動して、蓄積されたメッセージを一時的にスキップすることも可能です。
背景情報
ApsaraMQ for RocketMQ は、メッセージ消費の進捗を管理するためにコンシューマオフセットを使用します。コンシューマーがメッセージを処理した後も、メッセージはキューからすぐに削除されません。ApsaraMQ for RocketMQ は、各グループの消費レコードを保持します。このレコードはコンシューマオフセットとして知られており、グループ内のコンシューマーが特定のトピックに対して消費した最新メッセージのオフセットを指定します。
コンシューマークライアントがオフラインになり、その後オンラインに戻った場合、サーバー側に保存されている消費の進捗に基づいてメッセージの処理を再開します。
消費が異常であるか、現在のコンシューマオフセットが正しくない場合、コンシューマオフセットをリセットすることで消費の進捗を調整できます。
ApsaraMQ for RocketMQ は、以下の方法でコンシューマオフセットのリセットをサポートしています。
最新地点で消費を始める
特定のトピックでメッセージを処理するコンシューマーは、蓄積されたすべてのメッセージをスキップし、リセット操作後に送信された最新メッセージから消費を開始します。
指定時点の同地点での消費開始
コンシューマーは、指定された時点に対応するコンシューマオフセットからメッセージを処理します。これらのメッセージが以前に消費されたかどうかは関係ありません。
選択可能な時間範囲は、トピックに保存されている最も古いメッセージと最新のメッセージの作成時刻の間です。
特定の時点のコンシューマオフセットにリセットすると、サーバー側は最も近い一致するコンシューマオフセットを自動的に見つけます。
シナリオ
メッセージ蓄積のクリア: ダウンストリームの消費システムのパフォーマンスが不十分であるか、消費速度が生成速度よりも遅い場合、多くのメッセージが蓄積される可能性があります。これらの蓄積されたメッセージを破棄できる場合、コンシューマオフセットを指定された位置にリセットできます。これにより、蓄積されたメッセージをバイパスし、ダウンストリームシステムの処理負荷を軽減できます。
修正処理のためのバックトラッキング: 消費のビジネスロジックが異常で、メッセージが誤って処理された場合、これらのメッセージを再消費する必要があるかもしれません。これを行うには、コンシューマオフセットを過去の位置にリセットできます。これにより、消費のバックトラッキングが可能になります。
注意事項
コンシューマオフセットのリセットは、対象トピックの指定されたグループのコンシューマオフセットに適用されます。同じトピックをサブスクライブしている他のグループの消費の進捗には影響しません。
ブロードキャスト消費モードでは、コンシューマオフセットのリセットはサポートされていません。
ApsaraMQ for RocketMQ は、TCP プロトコルを使用するグループに対してのみコンシューマオフセットのリセットをサポートしており、HTTP プロトコルを使用するグループはサポートしていません。
コンシューマオフセットのリセット機能は、コンシューマーに可視なメッセージのみをリセットします。スケジュールされたメッセージやリトライ待ちのメッセージはリセットできません。
コンシューマーがオンラインの場合にのみ、コンシューマオフセットをリセットできます。
操作手順
ApsaraMQ for RocketMQ コンソールにログインします。左側のナビゲーションウィンドウで、インスタンス数 をクリックします。
上部のナビゲーションバーで、中国 (杭州) などのリージョンを選択します。[インスタンス] ページで、管理するインスタンスの名前をクリックします。
左側のナビゲーションウィンドウで、グループ管理 をクリックします。次に、TCP プロトコル タブをクリックします。
コンシューマオフセットをリセットするグループ ID を見つけます。操作 列で、詳細 をクリックし、ドロップダウンメニューから 消費地点をリセットする を選択します。
「コンシューマオフセットのリセット」パネルで、対象トピックとリセット方法を選択し、確定 をクリックします。
警告最新地点で消費を始める を選択すると、指定したトピック内のグループ ID の蓄積されたメッセージがすべてクリアされます。この操作は約 2~3 分で有効になります。この操作を繰り返さないでください。この期間中、アプリケーション内のすべてのコンシューマーは 2~3 分間、消費を一時停止します。ビジネスが遅延の影響を受けやすい場合は、ご注意ください。
最新地点で消費を始める: このオプションを選択すると、グループ内のコンシューマーは、指定されたトピック内のすべての蓄積されたメッセージをスキップし、最新メッセージから消費を開始します。
指定時点の同地点での消費開始: このオプションを選択すると、時間選択コントロールが表示されます。時点を指定できます。コンシューマーは、これらのメッセージが以前に消費されたかどうかに関係なく、この時刻以降に送信されたメッセージの消費を開始します。
[プロンプト]ダイアログボックスで情報を確認し、確定 をクリックします。
よくある質問
両方の方法でコンシューマオフセットのリセットに失敗した場合はどうすればよいですか?
クラスター消費を使用していることを確認します。ブロードキャスト消費モードでは、コンシューマオフセットのリセットはサポートされていません。
コンシューマーがオンラインであることを確認します。コンシューマーがオンラインの場合にのみ、コンシューマオフセットをリセットできます。
SDK バージョンを確認します。SDK バージョンが古い場合、この問題が発生する可能性があります。SDK を最新バージョンにアップグレードすることを推奨します。たとえば、Java 用 TCP クライアント SDK のバージョンは 1.8.0.Final 以降である必要があります。詳細については、「バージョンガイド」をご参照ください。
蓄積されたメッセージをスキップするためにコンシューマオフセットをリセットした後も、一部のメッセージがリセットされないのはなぜですか?
コンシューマオフセットのリセット機能は、リトライ状態のメッセージには適用されません。そのため、リセット後も少数のリトライ待ちのメッセージが配信される可能性があります。
コンシューマーがコンシューマオフセットをリセットすることで再消費できる最も古いメッセージは何ですか?
オフセットを指定した時点にリセットする場合、選択できる最も早い時刻は、トピック内で最も古いメッセージが保存された時刻に対応します。ApsaraMQ for RocketMQ 4.x シリーズのインスタンスは、メッセージを最大 3 日間保存します。3 日より古いメッセージはトピックから削除されます。
したがって、コンシューマーはコンシューマオフセットをリセットすることで、最大 3 日前のメッセージを再消費できます。
参考文献
コンソールに加えて、ApsaraMQ for RocketMQ では、API オペレーションを呼び出すことでコンシューマオフセットをリセットできます。