CCDAK は、Kafka アプリケーション開発(Producer/Consumer、Schema Registry、Kafka Streams、Kafka Connect、セキュリティ/可観測性)に焦点を当てた認定です。単なる用語暗記ではなく、設計判断(配信保証・スキーマ進化・並列度・運用上のトレードオフ)を問われます。
本ガイドは、公式ドキュメントの安定仕様を前提に、試験で頻出の観点を実務の手触りで解説します。最新の試験仕様は必ず Confluent 認定ページで最終確認してください。
CCDAK は Kafka ベースのアプリ開発者向け認定で、データ設計と API 利用の正確性、可用性・耐障害性・整合性に関する判断を評価します。主な対象は、Producer/Consumer の実装、Schema Registry を用いたスキーマ管理、Kafka Streams でのストリーム処理、Kafka Connect によるデータ連携です。
試験はベンダー中立の Kafka コア概念(トピック/パーティション、複製、ISR、リーダー選出、コンシューマグループ)、配信保証(at-most/at-least/exactly-once)、セキュリティ(TLS/SSL、SASL 概念)、監視(主要ブローカ/クライアントメトリクス)を中心に、Confluent プラットフォームの実務的利用(Schema Registry、Connect、Streams)までをカバーします。
正確な配点は試験バージョンで調整されます。以下は公式領域に基づく目安レンジです。設問は単一領域に閉じない(例: Producer の再送制御とブローカの min.insync.replicas の組合せ)ため、領域横断の因果を説明できる知識が必要です。
Streams と Schema Registry/SerDes は設計レベルの理解(状態管理、再パーティショニング、互換性戦略)が問われます。操作コマンドや運用は開発者視点の範囲(コンシューマグループの確認、レイテンシやスロットル指標の読み方)が中心です。
申し込みは Confluent の認定ページから行います。アカウント作成後、試験カタログで CCDAK を選択し、受験方式(オンライン監督またはテストセンター)と日時を予約します。受験環境要件(カメラ、マイク、安定回線、身分証)とシステムチェックは事前に完了させてください。
試験時間・問題数・合格基準はバージョンにより調整されます。言語は主に英語です。再受験ポリシーやキャンセル/日程変更、受験有効期限、受験料・バウチャーの扱いは必ず公式規約を確認してください。
短期集中で基礎→API→処理基盤の順に積み上げます。各週で必ず演習(ローカルやコンテナでの実行、壊してから直す)を入れ、設定値と観測結果を結びつけます。
暗記よりも、設定を変えたときの振る舞い(重複、順序、遅延、再均等化、スループット/耐障害性のトレードオフ)を説明できる状態を目指します。
Producer の配信保証は acks、retries、enable.idempotence、max.in.flight.requests.per.connection、delivery.timeout.ms の相互作用で決まります。idempotent producer とトランザクション(transactional.id)を組み合わせると、Kafka 内部では重複なくコミット単位の原子性を実現できます。コンシューマ側では isolation.level=read_committed を設定し、コミット済みレコードのみを読むことで EOS を完結させます。
Kafka Streams では processing.guarantee=exactly_once_v2 を利用します。これは内部のプロデューサ/コンシューマ設定(トランザクション・idempotence)を適切に束ね、状態ストアと出力トピック間の整合性を担保します。外部システムまで含めた完全な EOS はシステム依存であり、Kafka 外のシンクが冪等・トランザクション対応でない場合は少なくとも at-least-once を前提に設計します。
| 配信保証 | 構成の要点 | 再送時の重複 | 典型ユースケース |
|---|---|---|---|
| At-most-once | acks=0 またはコミット前に処理を進める | 起こらないが取りこぼしは起こり得る | テレメトリの一部、喪失許容の一方向通知 |
| At-least-once | acks=all、retries>0、順序要件が緩い | 起こり得る(重複排除は下流で対処) | 多くの業務イベント、集計が冪等/可換な処理 |
| Exactly-once(Kafka 内) | enable.idempotence=true、transactional.id、read_committed、または Streams=exactly_once_v2 | Kafka 内部では論理的に発生しない | 金額移動のダブルカウント防止、状態付きストリーム処理 |
データフローと消費グループの並列度
設定例:Idempotent Producer と Kafka Streams EOS
// Java Producer (idempotence + transactions)
Properties p = new Properties();
p.put("bootstrap.servers", "localhost:9092");
p.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
p.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
p.put("acks", "all");
p.put("enable.idempotence", "true");
p.put("retries", Integer.toString(Integer.MAX_VALUE));
// 厳密な順序が必要なら 1、スループット優先なら <=5
p.put("max.in.flight.requests.per.connection", "1");
p.put("transactional.id", "orders-txn-001");
KafkaProducer<String, String> producer = new KafkaProducer<>(p);
producer.initTransactions();
try {
producer.beginTransaction();
producer.send(new ProducerRecord<>("orders", "k1", "v1"));
// 複数レコードを1トランザクションに束ねる
producer.commitTransaction();
} catch (Exception e) {
producer.abortTransaction();
}
producer.close();
// Java Consumer (read committed)
Properties c = new Properties();
c.put("bootstrap.servers", "localhost:9092");
c.put("group.id", "orders-app");
c.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
c.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
c.put("isolation.level", "read_committed");
// Kafka Streams (EOS v2)
Properties s = new Properties();
s.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
s.put(StreamsConfig.APPLICATION_ID_CONFIG, "payments-streams");
s.put(StreamsConfig.PROCESSING_GUARANTEE_CONFIG, StreamsConfig.EXACTLY_ONCE_V2);
StreamsBuilder b = new StreamsBuilder();
KStream<String, String> in = b.stream("payments");
in.groupByKey().count(Materialized.as("cnt")).toStream()
.to("payments-agg", Produced.with(Serdes.String(), Serdes.Long()));
KafkaStreams app = new KafkaStreams(b.build(), s);
app.start();設問は“この要件で最も適切な設定はどれか”が多いです。選択肢を読む順番を固定(まず非現実的なものを除外)し、残る2択で要件に最短距離の設定を選びます。数値やタイムアウトは相互作用(delivery.timeout.ms と retries×linger×batch.size など)を意識します。
自作模擬は、要件→設定→観測の三点セットで作ると効果的。例えば「重複禁止」「順序必須」「高スループット」の3条件で Producer 設定を比較し、ブローカの min.insync.replicas を変えた時の失敗モードを観測します。CLI では consumer-groups の lag 確認、トピックのパーティション数と割当の整合をチェックできるようにしておきます。
CCDAK
問題 1
プロデューサから Kafka に書き込み、コンシューマはトランザクションがコミットされたレコードのみを読みたい。最も適切な設定の組み合わせはどれか?
正解: A
Exactly-once を成立させるには、Producer 側で idempotence とトランザクション(transactional.id)を有効にし、Consumer 側で read_committed を指定してコミット済みレコードのみを読む必要があります。acks=all は耐障害性の前提。B/C は要件を満たさず、D は読み取りサイズの設定であり EOS とは無関係です。
CCDAK に ksqlDB の詳細実装は出題されますか?
主眼は Producer/Consumer、Schema Registry、Kafka Streams、Connect です。ksqlDB は概念レベルの出題にとどまる可能性が高く、詳細な構文や運用は範囲外になりやすいです。最終的な範囲は公式ブループリントを確認してください。
Java 以外の言語でも受験できますか?
はい。試験は API の意味論と設計判断を問うため言語非依存です。ドキュメントやサンプルは Java が多いですが、Python/Go などでも動作原理と設定効果を理解していれば対応できます。
バージョン差異への対策は?
公式ドキュメントの安定仕様に基づき学習してください。例えば idempotent producer/transactions(0.11+)、Streams の exactly_once_v2 などは現在の推奨です。運用値や UI は更新され得るため、概念・プロパティ間の因果を中心に押さえるとバージョン差異に強くなります。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Kafka Topic と Partition の基礎: 分散とスケーラビリティの要
CCDAK 対策と実務の両立を意識し、Topic/Partition/Replica/Consumer Group の役...
Confluent Certified Administrator (CCAAK) 対策: 出題範囲・配点の考え方・運用観点の要点
CCAAKに向けて、試験領域の押さえどころを運用目線で整理。プロダクションで通用する設定・監視・セキュリティの実践知を、...
Kafka の Replica と In-Sync Replicas を正しく設計する: 耐障害性と一貫性
レプリカとISRの仕組みを起点に、acks と min.insync.replicas、クリーン/アンクリーンリーダー選...
Kafka の Offset とコミット: ポジション管理と at-least-once の基礎
CCDAK 対策と実務の両立を意識して、Kafka コンシューマのオフセット管理とコミット戦略を整理。at-least-...
Kafka Producer API 基礎: 送信フローと主要設定の意味
CCDAK 対応。Producer の送信フローを起点に、スループット・信頼性・順序性を左右する主要パラメータの意図と実...