コンシューマーオフセットをリセットして、より前の位置または特定のパーティションオフセットからメッセージを再消費したり、最新の位置にスキップしてメッセージのバックログを回避したりできます。
前提条件
すべてのコンシューマークライアントを停止してください。ApsaraMQ for Kafka は、アクティブなコンシューマーのオフセットのリセットをサポートしていません。
コンシューマークライアントを停止した後、ブローカーがオフラインと見なすのは ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG の期間が経過してからです (デフォルト:10,000 ms)。
背景情報
ApsaraMQ for Kafka は、次のリセット方法をサポートしています:
-
最新のオフセットから消費を開始:オフセットを最新の位置にリセットし、メッセージのバックログをスキップします。
-
指定した時点から消費を開始:メッセージが保存された時刻に基づいて、オフセットを過去のタイムスタンプにリセットします。メッセージが Kafka の保持期間 (デフォルト:3 日) 内にある限り、このオプションを選択すると、指定したタイムスタンプ以降のすべてのメッセージが欠落なく再消費されることが保証されます。
説明オフセットをリセットする前に、すべてのコンシューマークライアントを停止し、
ConsumerConfig.SESSION_TIMEOUT_MS_CONFIGの期間 (デフォルト:10,000 ms) が経過するまで待機してください。これにより、リセットが有効になる前に、ブローカーがすべてのコンシューマーをオフラインとして確実に認識するようになります。 -
パーティション別にコンシューマーオフセットをリセット:特定のパーティションのオフセットのみをリセットし、他のパーティションで正しく処理されたメッセージの再消費を回避します。
この操作で変更されるのはコンシューマーオフセットのみです。バックログメッセージは削除されません。
操作手順
ApsaraMQ for Kafka コンソール にログインします。
リソースの分布 セクションの 概要 ページで、管理する ApsaraMQ for Kafka インスタンスが存在するリージョンを選択します。
インスタンスリスト ページで、管理するインスタンスの名前をクリックします。
左側のナビゲーションウィンドウで、Group の管理 をクリックします。
-
Group の管理 ページで、対象の Group ID をクリックします。
-
[グループのコンシューマーオフセットをリセット] パネルで、前提条件 を確認し、リセットポリシーを設定します。
-
すべてのトピックをリセットする を設定します。
-
はい をクリックして、すべてのトピックのコンシューマーオフセットをリセットします。
-
いいえ をクリックし、リセットするトピック名を Topic テキストボックスに入力します。
-
-
リセット方法 を設定します。
-
最新の位置から消費を開始する をクリックし、OK をクリックします。
-
指定時間の位置時点から消費を開始する をクリックします。時点 フィールドで、
カレンダーアイコンをクリックし、消費を開始する時刻を選択します。次に、OK をクリックします。 -
パーティションによる消費位置のリセット をクリックします。対象パーティションの行で、消費オフセット に開始オフセットを入力し、OK をクリックします。
-
-
-
ヒント ダイアログボックスで情報を確認し、OK をクリックします。
よくある質問
コンシューマーオフセットのリセットで、トピックの部分的な消費失敗は解消できますか?
コンシューマーオフセットのリセットは、トピックの部分的な消費失敗の一部のケースの緩和に役立つ場合があります。ただし、実行する前に、頻繁なリバランスやパーティションの割り当て異常が原因でないかを調査してください。
-
頻繁にリバランスが発生している場合は、Kafka クライアントのバージョンを確認し、消費ワークロードに適した値になるように
session.timeout.msとmax.poll.interval.msパラメーターを調整してください。 -
コンシューマーグループが対象トピックを正しくサブスクライブしていることを確認してください。
根本原因がパーティションの割り当て異常であることが確認された場合、コンシューマーオフセットをリセットすることで、コンシューマーグループは正しい位置からメッセージを再消費できます。
Kafka のコンシューマーグループ ID を変更した後も消費を継続できますか?
はい。コンシューマーグループ ID を変更した後も、新しいコンシューマーグループで消費を継続できます。ただし、開始オフセットは、新しいコンシューマーグループが初回起動かどうか、およびトピックの現在の状態によって異なります。コンシューマーグループ ID を切り替える前に、ネットワークの問題やハートビートのタイムアウトなど、問題の根本原因を先に調査し、新しいコンシューマーグループでも同様の問題が発生しないようにしてください。
Kafka のコンシューマーグループを削除すると、サブスクライブしているトピックも削除されますか?
いいえ。ApsaraMQ for Kafka では、コンシューマーグループとトピックは独立したリソースです。コンシューマーグループを削除すると、コンシューマーグループとそのコンシューマーオフセットのみが削除されます。サブスクライブしているトピックのデータと構成には影響しません。
spark-kafka-source または Lindorm-Spark タイプのコンシューマーグループは、どのようにコンシューマーオフセットをコミットしますか?
-
spark-kafka-source:このコンシューマーグループタイプは、Kafka へのコンシューマーオフセットのコミットをサポートしています。
enable.auto.commitパラメーターを設定して、オフセットの自動コミットを制御できます。代わりに、enable.auto.commitをfalseに設定し、適切なタイミングでcommit(offsets)関数を手動で呼び出して、オフセットをコミットすることもできます。 -
Lindorm-Spark:Lindorm-Spark を使用して Kafka メッセージを消費する場合は、オフセットを手動でコミットしてください。
enable.auto.commitをfalseに設定し、消費ロジックの完了後にcommit(offsets)を呼び出してください。これにより、メッセージ処理が完了した後にのみオフセットがコミットされ、オフセットのジャンプや自動コミットによる誤検知の監視アラームを防止できます。
関連ドキュメント
-
Reset a consumer group's consumer offset API オペレーションを呼び出して、コンシューマーグループのコンシューマーオフセットをプログラムでリセットできます。
-
リセット後は、View consumption status で更新されたコンシューマーオフセットを確認してください。