非同期処理(キュー・ジョブ)— 重い仕事は後回しにする

上級の解説は準備中のため、上級の内容を表示しています。

概要 — まず全体をつかむ

中級ではメッセージングと配信保証を見ました。上級では、キュー型 vs ログ型・順序・整合へ。

詳細 — 1段階ずつ追う

キュー型とログ型

  • キュー型(RabbitMQ・SQS)— 取り出したら消える。ワーカーで分担
  • ログ型(Kafka)— 追記されたログを各コンシューマが自分のオフセットで読む。再処理しやすい
  • パーティション — 並列度の単位。同一パーティション内でのみ順序保証

流れと保証

  1. プロデューサが永続化+レプリカされたブローカーへ送る
  2. コンシューマグループが分担して読む(各パーティション1消費者)
  3. 処理後にack/オフセットコミット
  4. 失敗は再配信、繰り返す失敗はDLQへ

整合性の作り方

  • exactly-onceの実像 — at-least-once+冪等、またはトランザクショナルな読み書き
  • トランザクショナルoutbox — DB更新とイベント発行を取りこぼさず一致
  • スキーマレジストリ — メッセージ形式の進化を管理(後方互換)
  • 順序と並列 — 順序を厳しくすると並列度が下がる。キー設計で両立を探る

⚠️ 深部の落とし穴

  • リバランスの停止 — コンシューマ増減時に一時停止・重複
  • オフセットのずれ — コミット漏れで重複、先行コミットで欠落
  • ホットパーティション — 特定キーに集中して詰まる
  • ポイズンメッセージ — 壊れたメッセージが再処理を止める(DLQ)

理解度チェック

そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。

1. ログ型(Kafkaなど)で順序が保証される単位は?

2. 「厳密に1回だけ処理」を現実に近づける、実務の組み合わせは?

3. キュー型とログ型の違いとして正しいのはどれか?

4. 繰り返し失敗する・壊れたメッセージを隔離して溜めておく先はどれか?

5. 「ホットパーティション」が指す状態はどれか?

6. オフセットの「コミット漏れ」で起きやすいのはどれか?

7. DB更新とイベント発行を取りこぼさず一致させる、本文が挙げるパターンを答えてください。

8. メッセージ形式(スキーマ)の進化を後方互換に管理する仕組みを本文の呼び名で答えてください。