コンシューマーオフセットをリセットすると、コンシューマーの現在の消費位置が変更されます。コンシューマーに障害が発生した場合や、不正なデータを消費した場合は、コンシューマーオフセットをリセットして以前の位置にロールバックし、消費を再開できます。または、消費位置を最新のオフセットに移動して、蓄積されたメッセージを一時的にスキップすることもできます。
背景情報
ApsaraMQ for RocketMQ は、コンシューマーオフセットを使用してメッセージ消費の進捗状況を管理します。コンシューマーがメッセージを処理した後、メッセージはキューからすぐに削除されません。ApsaraMQ for RocketMQ は、グループごとに消費記録を維持します。この記録はコンシューマーオフセットと呼ばれ、グループのコンシューマーが特定のトピックで消費した最新メッセージのオフセットを指定します。
コンシューマーのクライアントがオフラインになった後、再びオンラインになると、サーバーサイドに保存されている消費の進捗に基づいてメッセージの処理を再開します。
消費に異常がある場合や、現在のコンシューマーオフセットが正しくない場合は、コンシューマーオフセットをリセットすることで消費の進捗を調整できます。
ApsaraMQ for RocketMQは、以下の方法でコンシューマーオフセットのリセットをサポートしています:
[最新地点で消費を始める]
特定のトピックのメッセージを処理するコンシューマーは、蓄積されたすべてのメッセージをスキップし、リセット操作後に送信された最新のメッセージから消費を開始します。
[指定時点の同地点での消費開始]
コンシューマーは、メッセージが以前に消費されたかどうかにかかわらず、指定した時刻に対応するオフセットからメッセージを処理します。
選択可能な時間範囲は、トピックに保存されている最も古いメッセージと最新のメッセージの作成時刻の間です。
特定の時点のコンシューマーオフセットにリセットすると、サーバーサイドで最も近いコンシューマーオフセットが自動的に見つかります。
シナリオ
メッセージの蓄積のクリア:下流の消費システムのパフォーマンスが不十分である場合や、消費速度が生産速度よりも遅い場合、多くのメッセージが蓄積される可能性があります。これらの蓄積されたメッセージを破棄できる場合は、コンシューマーオフセットを指定した位置にリセットできます。これにより、蓄積されたメッセージをバイパスし、下流システムの処理圧力を軽減できます。
修正のためのバックトラック処理:消費のビジネスロジックに異常があり、メッセージが誤って処理された場合、これらのメッセージを再消費する必要がある場合があります。これを行うには、コンシューマーオフセットを履歴の位置にリセットします。これにより、消費をバックトラックできます。
注意事項
コンシューマーオフセットのリセットは、対象トピックにおける指定グループのコンシューマーオフセットに適用されます。同じトピックをサブスクライブしている他のグループの消費の進捗には影響しません。
コンシューマーオフセットのリセットは、ブロードキャスト消費モードではサポートされていません。
ApsaraMQ for RocketMQ は、TCP プロトコルを使用するグループのコンシューマーオフセットのリセットのみをサポートしており、HTTP プロトコルを使用するグループはサポートしていません。
コンシューマーオフセットのリセット機能は、コンシューマーから可視のメッセージのみをリセットします。スケジュール済みメッセージやリトライ待ちのメッセージはリセットできません。
コンシューマーオフセットは、コンシューマーがオンラインの場合にのみリセットできます。
操作手順
ApsaraMQ for RocketMQコンソールにログインします。 左側のナビゲーションウィンドウで、インスタンス数 をクリックします。
上部のナビゲーションバーで、中国 (杭州) などのリージョンを選択します。 [インスタンス] ページで、管理するインスタンスの名前をクリックします。
左側メニューで、 グループ管理 をクリックし、 TCP プロトコル タブをクリックします。
コンシューマーオフセットをリセットするグループ ID を見つけます。 操作 列で 詳細 をクリックし、ドロップダウンメニューから 消費地点をリセットする を選択します。
確定 パネルで、対象トピックとリセット方法を選択し、 [OK] をクリックします。
警告最新地点で消費を始める を選択すると、指定したトピックにおける対象グループの蓄積メッセージがすべてクリアされます。この操作が有効になるまで約 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 操作を呼び出すことでコンシューマーオフセットをリセットできます。