DLQ は、コネクタや SMT/コンバータで処理できなかったレコードを専用の Kafka トピックへ退避し、他の正常レコードの処理継続を可能にする仕組みです。
本稿では、どの失敗が DLQ に入るのか、設定の勘所、再処理(リカバリ)パターン、運用監視、試験で狙われやすい論点を一気通貫で解説します。
Kafka Connect の DLQ は、レコード処理に失敗した場合でもコネクタ全体を停止させず、失敗したレコードだけを別トピックに送るための仕組みです。errors.tolerance=all と DLQ トピック名の設定が基本要件です。
CCDAK では、DLQ に入る失敗の種類、errors.retry.* との関係、ログ出力との違い、順序保証の有無、トピック設計(パーティション数・保持期間・ACL)などが頻出です。
Connect の失敗は大きく「コンバータ(シリアライズ/デシリアライズ)」「SMT(Single Message Transform)」「コネクタ本体の処理(特に Sink の外部システム書き込み)」の層で発生します。DLQ は主に Connect フレームワーク内で把握できるレコード処理失敗を対象にします。
一般に、コンバータや SMT の失敗は DLQ 対象です。Sink 側の外部システム書き込み失敗は、コネクタ実装がエラーレポートに対応していない限り DLQ に載らず、RetriableException による再試行やタスク失敗として扱われる点に注意します。
DLQ を有効化する最低条件は、errors.tolerance=all と errors.deadletterqueue.topic.name の指定です。ヘッダ付与は errors.deadletterqueue.context.headers.enable を有効にします。auto-create に頼るとブローカー既定のパーティション数になるため、必要に応じて事前作成でパーティションや保持期間を明示します。
保持期間はリカバリの SLA に合わせ、容量見積もりと合わせて決めます。DLQ は調査・再処理に用いるため、ログコンパクションは通常有効化しません。セキュリティ上は、通常の業務トピックとは独立して ACL を厳格化します。
Kafka Connect と DLQ の流れ(概念図)
例: Sink コネクタで DLQ を有効化する設定(抜粋)
{
"name": "jdbc-sink-orders",
"config": {
"connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
"topics": "orders",
"connection.url": "jdbc:postgresql://db:5432/app",
"tasks.max": "3",
"errors.tolerance": "all",
"errors.deadletterqueue.topic.name": "dlq.orders",
"errors.deadletterqueue.context.headers.enable": "true",
"errors.deadletterqueue.topic.replication.factor": "3",
"errors.log.enable": "true",
"errors.log.include.messages": "true",
"errors.retry.timeout": "600000",
"errors.retry.delay.max.ms": "60000"
}
}DLQ に溜まったレコードは放置せず、リカバリ戦略をパターンとして設計します。代表的には、隔離・調査・修復・再投入のループを自動化するパターン、時間を置いた再投入(リトライ)パターン、手動審査を挟むパターンなどがあります。
いずれのパターンでも、重複許容(at-least-once)と順序非保証を前提に、冪等なシンク側設計(主キー・アップサート・重複排除)を組み合わせるのが実務の要点です。
| 戦略 | 失敗時の挙動 | 再処理コスト | 向いているケース |
|---|---|---|---|
| 停止(errors.tolerance=none) | 最初の失敗でタスク停止 | 低(ただし停止影響大) | データ完全性を最優先し即時介入したい |
| ログのみ(DLQ 無し) | 処理継続、ログで確認 | 中(調査は手間) | 失敗が極めて稀・影響軽微 |
| DLQ(errors.tolerance=all) | 失敗レコードのみ隔離 | 中(後段で修復・再投入) | 通常の実務での既定解に近い |
| DLQ + 再試行制御 | Retriable は再試行、非 Retriable は DLQ | 中〜高(制御ロジック追加) | 一過性障害と恒久的エラーが混在 |
DLQ から再投入する運用例(調査→修復→再投入の最小手順)
# 1) DLQ をヘッダ付きで調査
kafka-console-consumer \
--bootstrap-server broker:9092 \
--topic dlq.orders \
--from-beginning \
--property print.headers=true \
--max-messages 10
# 2) 修復スクリプト等で JSON を整形(例: 欠落フィールド補完)
# ここは各システムのバリデーションに合わせて実装
# 3) 修復済みメッセージを再処理用トピックへ投入
kafka-console-producer \
--broker-list broker:9092 \
--topic fixed.ordersDLQ は“最後の安全網”です。平常時は 0 に近いことが理想で、増加は即アラートと原因究明につなげます。保持切れで証跡が失われないよう、レート × SLA から保持期間・容量を見積もります。
メトリクスは、タスク単位の DLQ 書き込み成功/失敗カウンタ、再試行関連、DLQ コンシューマのレイテンシ/ラグを最低限モニタします。再投入により元トピックの負荷が跳ねないよう、レート制御やバッチ処理も検討します。
CCDAK では、errors.tolerance と DLQ の関係、RetriableException の再試行、ヘッダによる調査容易性、順序・重複の扱い、そして“外部システム書き込み失敗が必ずしも DLQ へ行くわけではない”点が狙われます。
実務では、DLQ を有効化しても“誰がどう再処理するか”が決まっていないと負債化します。リカバリ責務・SLO・トピック/ACL/保持・監視・容量見積りをセットで設計してください。
CCDAK
問題 1
Kafka Connect の Sink コネクタで、特定レコードの変換エラーが発生しても処理を止めず、失敗レコードを後で調査・再処理できるようにしたい。最小限必要な設定の組み合わせはどれか?
正解: B
レコード単位の失敗を許容して DLQ に送るには、errors.tolerance=all と errors.deadletterqueue.topic.name の設定が必要。ログ有効化や再試行時間延長、並列度増加だけでは失敗レコードの隔離は実現しない。
DLQ に送られたレコードの順序は元トピックと一致するか?
一致は保証されません。DLQ は別トピックであり、複数タスクから並行書き込みされるため、元の順序や相対的な位置は保持されません。順序が必要な再処理は、キー単位の直列化など別途工夫が必要です。
外部システムの一時障害(例: DB 接続切断)は DLQ に送られるか?
一般に送られません。多くのケースでコネクタは RetriableException を投げ、errors.retry.* に従って再試行されます。非再試行のレコード固有エラーや、コネクタ実装がエラーレポート対応している場合のみ DLQ へ送られることがあります。
DLQ トピックはどのように設計すべきか?
事前作成でパーティション数とレプリケーション係数を明示し、保持期間は調査・再処理の SLO に合わせて十分に確保します。通常はログコンパクションを無効にし、ACL を強化して閲覧・再投入権限を分離します。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Kafka Topic と Partition の基礎: 分散とスケーラビリティの要
CCDAK 対策と実務の両立を意識し、Topic/Partition/Replica/Consumer Group の役...
CCDAK 試験ガイド:出題範囲・配点・申込み・対策
Confluent Certified Developer for Apache Kafka (CCDAK) の出題範囲...
Confluent Certified Administrator (CCAAK) 対策: 出題範囲・配点の考え方・運用観点の要点
CCAAKに向けて、試験領域の押さえどころを運用目線で整理。プロダクションで通用する設定・監視・セキュリティの実践知を、...
Kafka の Replica と In-Sync Replicas を正しく設計する: 耐障害性と一貫性
レプリカとISRの仕組みを起点に、acks と min.insync.replicas、クリーン/アンクリーンリーダー選...
Kafka の Offset とコミット: ポジション管理と at-least-once の基礎
CCDAK 対策と実務の両立を意識して、Kafka コンシューマのオフセット管理とコミット戦略を整理。at-least-...