コンシューマオフセットをリセットすると、コンシューマがメッセージの消費を開始するオフセットが変更されます。 メッセージの消費中にエラーが発生したり、誤ったメッセージが消費された場合は、消費者オフセットをリセットして、消費を特定のオフセットまたは再消費のためにパーティション内のオフセットにロールバックできます。 オフセットを最新のオフセットに変更して、蓄積されたメッセージを一時的に処理できないままにすることもできます。
背景情報
ApsaraMQ for RocketMQは、コンシューマオフセットを使用してコンシューマの進捗状況を管理します。 ApsaraMQ for RocketMQは、メッセージが消費された直後にはメッセージを削除しません。 代わりに、ApsaraMQ for RocketMQは、コンシューマーグループによって消費された最新のメッセージのレコードを保持します。これはコンシューマーオフセットとも呼ばれます。
クライアントが再起動された場合、コンシューマは、ブローカに保存されたコンシューマオフセットに基づいてメッセージの処理を継続することができる。
消費中に例外が発生した場合、またはメッセージが予想されるオフセットから消費されなかった場合は、コンシューマオフセットをリセットしてコンシューマの進行状況を調整できます。
ApsaraMQ for RocketMQでは、次のいずれかの方法を使用してコンシューマーオフセットをリセットできます。
最新地点で消費を始める
コンシューマが特定のトピックのメッセージを消費すると、コンシューマは蓄積されたすべてのメッセージをスキップし、コンシューマオフセットをリセットした後に送信された最新のメッセージから消費を開始します。
指定時点の同地点での消費開始
コンシューマは、メッセージが消費されたかどうかに関係なく、リセット時点に対応するメッセージから消費を開始します。
有効な時間範囲は、トピックに格納されている最初のメッセージが生成された時刻と、トピックに格納されている最後のメッセージが生成された時刻との間です。
コンシューマオフセットを特定の時点にリセットすると、ブローカーはその時点に最も近いオフセットにコンシューマオフセットを変更します。
シナリオ
消費者の遅れ: 消費者がメッセージが生成される速度に追いつくことができない場合、多数のメッセージが蓄積される可能性があります。 蓄積されたメッセージがミッションクリティカルでない場合は、コンシューマオフセットをより大きな値に設定して、これらのメッセージをスキップし、下流のワークロードを減らすことができます。
ビジネスのバックトラックと修正処理: ビジネスエラーのために誤って消費されたメッセージを再消費する場合は、消費者オフセットを小さい値に設定できます。
使用上の注意
トピックのコンシューマーオフセットをリセットすると、指定されたグループのコンシューマーオフセットのみが変更されます。 トピックをサブスクライブする他のグループのコンシューマーオフセットは影響を受けません。
ブロードキャスト消費モードでは、コンシューマオフセットをリセットすることはできません。
ApsaraMQ for RocketMQでは、TCPプロトコルを使用して作成されたグループに対してのみコンシューマーオフセットをリセットできます。
ApsaraMQ for RocketMQでは、コンシューマーに表示されるメッセージに対してのみコンシューマーオフセットをリセットできます。
コンシューマーがApsaraMQ for RocketMQブローカーに接続している場合にのみ、コンシューマーオフセットをリセットできます。
手順
ApsaraMQ for RocketMQコンソールにログインします。 左側のナビゲーションウィンドウで、インスタンス数 をクリックします。
上部のナビゲーションバーで、中国 (杭州) などのリージョンを選択します。 [インスタンス] ページで、管理するインスタンスの名前をクリックします。
左側のナビゲーションウィンドウで、グループ管理 をクリックします。 表示されるページで、TCP プロトコル タブをクリックします。
コンシューマオフセットをリセットするグループを見つけ、操作 列の 詳細 をクリックし、消費地点をリセットする を選択します。
[消費者オフセットのリセット] パネルで、ビジネス要件に基づいてリセット方法を選択し、確定 をクリックします。
警告最新地点で消費を始める を選択した場合、指定されたトピックでグループの蓄積されたすべてのメッセージが消去されます。 この操作は、約2〜3分後に有効になる。 操作を繰り返さないでください。 リセット操作が有効になる前に、アプリケーション内のすべてのコンシューマーがメッセージの消費を停止します。 ビジネスがレイテンシーに敏感な場合は、注意して進めてください。
最新地点で消費を始める を選択した場合、グループの消費者はトピックに蓄積されたすべてのメッセージをスキップし、最新のオフセットから消費を開始します。
指定時点の同地点での消費開始を選択すると、時間ピッカーが表示されます。 タイムピッカーからある時点を選択すると、メッセージが以前に消費されたかどうかに関係なく、選択した時点以降に送信されたメッセージが消費されます。
[メモ] メッセージで、確定 をクリックします。
よくある質問
上記の2つの方法を使用してコンシューマオフセットをリセットできなかった場合はどうすればよいですか?
クラスタリング消費モードが使用されているかどうかを確認します。 ブロードキャスト消費モードでは、コンシューマオフセットをリセットすることはできません。
現在のコンシューマーがApsaraMQ for RocketMQブローカーに接続されているかどうかを確認します。 ApsaraMQ for RocketMQブローカーに接続しているコンシューマに対してのみ、コンシューマオフセットをリセットできます。
SDKのバージョンを確認します。 この問題は、SDKのバージョンが古いために発生する可能性があります。 SDKを最新バージョンにアップグレードすることを推奨します。 たとえば、Java用TCPクライアントSDKのバージョンは1.8.0.Final以降である必要があります。 詳細については、「リリースノート」をご参照ください。
コンシューマオフセットをリセットして累積メッセージをスキップした後、特定の累積メッセージが配信されるのはなぜですか?
再試行中のメッセージでは、コンシューマオフセットリセット機能は有効になりません。 したがって、コンシューマーオフセットをリセットした後も、少数のメッセージが配信されます。
消費者が消費者オフセットをリセットすることで消費できる最も初期のメッセージは何ですか?
指定された時点に対応するオフセットから消費を開始するを選択した場合、選択できる最も早い時刻は、最初のメッセージがトピックに格納された時刻です。 ApsaraMQ for RocketMQ 4.xインスタンスでは、最大3日間メッセージを保存できます。 3日以上保存されたメッセージは自動的に削除されます。
したがって、消費者が消費者オフセットをリセットすることによって消費できる最も早いメッセージは、現在の時点の3日前にトピックに格納されているメッセージです。
関連ドキュメント
ApsaraMQ for RocketMQでは、次のAPIを呼び出してコンシューマーオフセットをリセットすることもできます。