Kafkaの資格は、アプリ開発寄りのCCDAKと、運用寄りのCCAAKに大別される。加えて、マネージド環境であるConfluent Cloudの設計・運用観点は両試験の理解を補強する。
本稿は、出題ドメインを実務での意思決定に結びつけて整理する。安定機能に絞り、CLI・設定値・設計原則の粒度で持ち帰れる形にした。
CCDAKは「Kafkaを使って正しくデータを流し、処理し、スキーマを管理できるか」を問う。CCAAKは「クラスターを設計・保護・運用し、SLAを守るための設定を理解しているか」を問う。Confluent Cloudは、これらの知識をマネージド環境に写像する力を要求する。
両試験に共通する土台は、パーティションとレプリケーション、配信保証(at-least/at-most/exactly-once)、コンシューマグループ、スキーマ互換性、セキュリティ(TLS/SASL/ACL)である。Confluent Cloudでは、同概念にRBAC・ネットワーキング(プライベート接続)・クォータといった管理要素が加わる。
| 項目 | CCDAK(開発) | CCAAK(運用) |
|---|---|---|
| 想定ロール | アプリ/データエンジニア | SRE/プラットフォームエンジニア |
| 主な出題 | Producer/Consumer/Streams、Schema Registry、配信保証 | ブローカー設定、レプリケーション・障害復旧、セキュリティ、監視・チューニング |
| 環境 | 自前/Confluent Cloud双方のクライアント視点 | 自前クラスタ中心+Cloudの運用観点(RBAC/ネットワーク) |
| 重要概念/設定 | acks、idempotence、transactional.id、offset管理、互換性モード | min.insync.replicas、クォータ、リテンション/コンパクション、SASL/TLS、ACL/RBAC |
| よく混同する点 | exactly-onceは処理パイプライン全体で設計が必要 | acks=allは可用性条件の一部であり、ISRと両輪 |
Kafkaの基本データフロー(試験で問われる単位感)
topic作成と可用性の基本(acksとmin.insync.replicas)
kafka-topics.sh --create --topic orders --partitions 6 --replication-factor 3 --bootstrap-server broker:9092
# 書き込み側(プロデューサ)
acks=all
enable.idempotence=true
retries=2147483647
max.in.flight.requests.per.connection=5
# ブローカー/トピック側(ISR維持を前提にデータ損失を抑える)
min.insync.replicas=2at-least-onceはデフォルト実装が容易だが重複処理を許容する設計(冪等なシンクやデデュープ)が必要。at-most-onceは処理前コミットで実現するがロスの可能性がある。exactly-onceはプロデューサの冪等化とトランザクション、シンク側の整合を含むパイプライン設計が鍵。
コンシューマのオフセットはグループ単位でKafkaに保持される。auto-commitは簡便だが再均衡直後の処理/コミットタイミングに注意。高信頼が要る場合は手動コミット+明示的なポーリング/処理/コミットの順序制御を推奨。
プロデューサEOSとコンシューマ手動コミットの最低限
# Producer (Java properties)
enable.idempotence=true
acks=all
transactional.id=orders-tx-01
# Consumer (Java pseudo flow)
while (running) {
ConsumerRecords<K,V> rs = c.poll(Duration.ofSeconds(1));
for (r: rs) { process(r); }
c.commitSync();
}
# at-most-onceの例(推奨しない):commitSync() を process() の前に呼ぶSchema Registryはスキーマの進化を互換性モードで制御する。一般的な運用既定は後方互換(BACKWARD または BACKWARD_TRANSITIVE)で、既存コンシューマを壊さない。双方向進化が必要ならFULL系を検討するが、運用負荷が上がる。
サブジェクト名規則(TopicNameStrategy/RecordNameStrategyなど)はマルチイベントのトピック設計に直結する。トピック内の複数型を許容するならRecordNameStrategyを、1トピック1イベント型ならTopicNameStrategyが単純。
互換性モードの設定とスキーマ登録の基本
# 後方互換をグローバルに設定
curl -s -X PUT -H 'Content-Type: application/json' \
--data '{"compatibility": "BACKWARD"}' \
http://schema-registry:8081/config
# サブジェクト単位で上書き(orders-value に FULL_TRANSITIVE)
curl -s -X PUT -H 'Content-Type: application/json' \
--data '{"compatibility": "FULL_TRANSITIVE"}' \
http://schema-registry:8081/config/orders-value
# 例: Avroスキーマ登録(値側)
curl -s -X POST -H 'Content-Type: application/vnd.schemaregistry.v1+json' \
--data '{"schema": "{\"type\":\"record\",\"name\":\"Order\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"}]}"}' \
http://schema-registry:8081/subjects/orders-value/versionsKafka Streamsはアプリに埋め込むライブラリで、状態管理(State Store)や再分配(repartition)、処理保証(at-least/ exactly_once_v2)を細かく制御できる。ksqlDBは宣言的にストリーム/テーブル変換を記述し、永続クエリで継続実行する。
再分配はキー変更を伴う演算で発生し、内部トピックが作られる。大規模処理ではこの内部トピックのパーティション数とリテンション、監視を忘れない。
Kafka Streams最小トポロジ(集計の骨格)
Properties p = new Properties();
p.put(StreamsConfig.APPLICATION_ID_CONFIG, "orders-agg");
p.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "broker:9092");
p.put(StreamsConfig.PROCESSING_GUARANTEE_CONFIG, "exactly_once_v2");
StreamsBuilder b = new StreamsBuilder();
KStream<String, Order> s = b.stream("orders");
KTable<String, Long> t = s.groupByKey().count();
t.toStream().to("orders-count");
KafkaStreams app = new KafkaStreams(b.build(), p);
app.start();Confluent Cloudではブローカーの配置/パッチ適用はサービス側の責務となり、利用者は論理設計(トピック数・パーティション設計)、アクセス制御(RBAC/ACL)、接続(インターネット/プライベート接続)に集中する。
監視は内蔵メトリクスでレイテンシやスループット、コンシューマラグを可視化できる。クォータや上限(APIコール、パーティション数など)はプランに依存するため、設計前に確認する。
ccloud CLIでの最小フロー(環境→クラスター→トピック→ACL)
ccloud environment create dev
ccloud environment use <env-id>
ccloud kafka cluster create dev-cluster --cloud aws --region ap-northeast-1 --type standard
ccloud kafka cluster use <lkc-id>
ccloud api-key create --resource <lkc-id>
ccloud kafka topic create orders --partitions 6
# RBAC/ACL例(クライアントに書き込み、コンシューマグループに読み取り)
ccloud kafka acl create --allow --service-account sa-123 --operation WRITE --topic orders
ccloud kafka acl create --allow --service-account sa-123 --operation READ --topic orders
ccloud kafka acl create --allow --service-account sa-123 --operation READ --group orders-appまずはローカルで「作る→流す→読む→壊す→直す」を一巡。次にSchema RegistryとStreams/ksqlDBを加え、最後にConfluent Cloudで同じことを繰り返して差分を言語化する。各ステップで、設定値を根拠付きで説明できる状態を目指す。
模擬演習は、可用性・配信保証・スキーマ進化・セキュリティで最低1問ずつ自作する。設計理由を30秒で話せるかが合格ラインの目安になる。
最小Docker Compose(学習用の骨組み)
services:
broker:
image: confluentinc/cp-kafka:7.6.1
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:9092
ports: ["9092:9092"]
zookeeper:
image: confluentinc/cp-zookeeper:7.6.1
environment:
ZOOKEEPER_CLIENT_PORT: 2181
schema-registry:
image: confluentinc/cp-schema-registry:7.6.1
environment:
SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: PLAINTEXT://broker:9092
SCHEMA_REGISTRY_HOST_NAME: schema-registry
ports: ["8081:8081"]CCDAK / CCAAK
問題 1
高可用性を優先しつつ、書き込みでデータ損失を避けたい。トピックのreplication.factor=3、min.insync.replicas=2 のとき、プロデューサ設定として最も適切なのはどれか。
正解: A
acks=all はISR内の全レプリカへのコミットを待つため、min.insync.replicas=2と組み合わせてレプリカ障害時の損失を抑えられる。enable.idempotence=trueで重複書き込み時の二重反映も防ぐ。acks=1や0はリーダー単独あるいは送信のみで、障害時にロスの可能性が残る。
CCDAKとCCAAKのどちらから受けるべきか?
アプリ開発やデータパイプラインの実装が主ならCCDAKから。プラットフォーム運用・セキュリティ・SLAが主ならCCAAKから。両方を狙う場合は、まずCCDAKでデータフローの正しい設計感を固めるとCCAAKの設定理由が腹落ちしやすい。
Confluent Cloudだけで学んでも合格できる?
主要概念はマネージド/自前で共通だが、CCAAKはブローカー設定や低レベル運用を問うためローカル/自前環境の手触りも必要。CloudのRBACやネットワークは差分として学ぶと良い。
exactly-onceはどの程度まで覚えるべき?
プロデューサ冪等化とトランザクション、Streamsのprocessing.guarantee=exactly_once_v2、ソース/シンクがKafkaであるときの強み、外部シンクでは最終的に二相整合の設計が必要、の4点を言語化できれば試験・実務ともに十分。
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-...