Kafka

Kafka試験の問題例: 主要ドメイン別サンプルと実務ポイント

2026-04-19
NicheeLab編集部

ConfluentのCCDAKとCCAAKは、開発・運用双方の観点でKafkaの安全な利用と予測可能な挙動を問います。本稿は、過去の出題傾向と公式ドキュメント準拠の安定仕様をベースに、主要ドメインごとに“試験で問われやすい判断ポイント”を短く押さえます。

サンプル問題はあくまで演習用のイメージです。実務でも役立つ設定値やトレードオフを添えているので、手元のクラスタで再現しながら確認してください。

配信保証と重複/欠落の制御

Kafkaのメッセージ配信は、少なくとも1回、厳密に1回、高々1回の3パターンで整理できます。プロデューサ側ではacks、retries、enable.idempotence、max.in.flight.requests.per.connectionの組み合わせ、コンシューマ側ではオフセットコミットのタイミング、さらにトランザクションと読み取り分離レベルが結果を左右します。

厳密に1回の処理(Exactly-Once Semantics, EOS)は、idempotent producerとトランザクション、そしてread_committedでの読み取りを前提に、Kafka内のread-process-writeを単一の原子的単位として扱うときに達成可能です。外部システムまで含めた“厳密に1回”は、その外部がトランザクション連携をサポートしない限り保証できません。

  • 少なくとも1回: 欠落は避けるが重複が起こり得る。retries>0、acks=allが定番。重複は下流で排除する。
  • 高々1回: 欠落の可能性を許容し、重複は起こさない。コミットを送信前に行うのが典型的だが、通常の業務シナリオでは採用は限定的。
  • 厳密に1回: enable.idempotence=true、acks=all、transactional.id設定、コンシューマはisolation.level=read_committed。Streams APIはEOSを簡便に扱える。
  • max.in.flight.requests.per.connectionは再試行時の順序入れ替わりを防ぐため、EOSでは通常1〜5の低めに設定する。
セマンティクス欠落の可能性重複の可能性代表的な設定/条件
高々1回 (At-most-once)ありなし送信前コミットまたは再試行しない; retries=0が典型
少なくとも1回 (At-least-once)なし(原則)ありretries>0, acks=all, コミットは処理後
厳密に1回 (Exactly-once)なし(設計範囲内)なし(設計範囲内)enable.idempotence=true, transactional.id, acks=all, read_committed

プロデューサ〜ブローカ〜コンシューマの流れ(EOS時)

Producer(txn)acks=all, idempotentBrokerISR(2/3) replicates → COMMITTED onlyConsumer(read_committed)Offset commitafter processing (in txn)Producer(txn) → Broker(ISR 2/3, COMMITTED only) → Consumer(read_committed) → Offset commit in txn

プロデューサ設定例(EOS)

bootstrap.servers=broker:9092
aacks=all
enable.idempotence=true
retries=2147483647
max.in.flight.requests.per.connection=5
transactional.id=orders-txn-01

パーティショニングとキー設計

順序保証はパーティション単位です。特定キーでの順序維持が必要なら、必ずキーを設定します。キーなしの場合、現行クライアントのデフォルトはスティッキー・パーティショナーで、短時間は同一パーティションにまとめて送るためスループット改善が見込めますが、厳密な順序制御はできません。

ホットパーティションを避けるには、キーのカーディナリティ確保、パーティション数とコンシューマ並列度の計画、必要に応じたカスタムパーティショナーが有効です。パーティション数の増加は後方互換で可能ですが、減少は困難である点に注意します。

  • 順序保証が必要なイベント・エンティティ単位でキーを固定する。
  • スティッキー・パーティショナーによりキーなしでもバッチ効率は向上するが、順序要件には使わない。
  • パーティション数は消費側の最大並列度×余裕で見積もる。増やすとキー→パーティションのマッピングが変化する可能性がある点に留意。

Java Producerのキー指定イメージ

producer.send(new ProducerRecord<>("orders", customerId, payload));
// customerIdで順序保証(同一キーは同一パーティション)

保持ポリシーとログ・クリーニング

保持期間はretention.ms、サイズはretention.bytesで制御します。セグメント境界(segment.ms/segment.bytes)を超えて初めて削除対象になります。cleanup.policyがdeleteのとき、古いセグメントが期限やサイズ超過で削除されます。

cleanup.policy=compactでは、同一キーの最新レコードを残し、それ以前は圧縮対象になります。削除はキーに対するトゥームストーンを書き込み、一定時間(delete.retention.ms)経過後に物理削除されます。コンパクションは最終的整合であり、即時ではありません。

  • 時刻基準の保持はレコードタイムスタンプに依存。record.timestamp.type=CreateTime/LogAppendTimeの違いに注意。
  • compact+deleteの併用で最新値保持と古いセグメント削除を両立できる。
  • min.cleanable.dirty.ratioやsegmentサイズのチューニングでクリーニング効率を調整。

保持・コンパクションの代表設定(トピック単位)

kafka-topics.sh --bootstrap-server broker:9092 \
  --alter --topic users \
  --config cleanup.policy=compact,delete \
  --config retention.ms=604800000 \
  --config segment.ms=3600000

レプリケーションと耐障害性

レプリケーション係数(例: 3)とISR(In-Sync Replicas)が可用性の基礎です。acks=allはISRの全レプリカへの追従を待ってから成功を返します。min.insync.replicasは書き込みに必要なISR数の下限で、acks=allと併用することで障害時の持続性を高めます。

リーダー選出では、原則としてISRから選ばれます。unclean.leader.election.enable=falseで不整合なフォロワからの選出を禁止し、データ損失を回避します(ただし停止時間は伸びる可能性)。ラックアウェアネスはブローカの配置情報を使って、レプリカを異なるラックに分散します。

  • RF=3, min.insync.replicas=2, acks=allは堅牢な組み合わせ。ISRが1に落ちると書き込み拒否となるが、データ損失耐性は高い。
  • unclean.leader.electionを無効化してデータ完全性を優先。可用性とのトレードオフを理解する。
  • ブローカ障害時の再割り当てとリバランスの監視を習慣化する。

代表的なサーバ設定の要点

min.insync.replicas=2
unclean.leader.election.enable=false
# ラックアウェアネス
broker.rack=az1

スキーマ管理と互換性(Schema Registry)

Schema RegistryはAvro/Protobuf/JSON Schemaを管理し、互換性モード(BACKWARD, FORWARD, FULL など)をポリシー化します。一般的なイベント追加にはBACKWARD互換が選ばれます。削除や必須フィールドの追加は後方互換を壊すため、試験では“不適切”な変更として問われがちです。

Confluentのワイヤフォーマットは先頭バイトのマジック値(0)に続けてスキーマIDを埋め込みます。クライアントはこのIDを使ってデシリアライズし、互換性チェックは登録時に適用されます。

  • BACKWARD: 新コンシューマは旧データを読める。フィールド追加はデフォルト値付きで。
  • FORWARD: 旧コンシューマが新データを読める。将来互換を重視。
  • FULL: 双方向互換。制約が最も厳しい。
  • Subject naming strategyとトピックのキー/値で互換性ポリシーを分ける設計が有効。

互換性モード設定(例)

curl -s -X PUT -H "Content-Type: application/json" \
  --data '{"compatibility":"BACKWARD"}' \
  http://schema-registry:8081/config/subjects/orders-value

セキュリティと運用ベーシックス

暗号化はTLS、認証はSASL/PLAIN, SASL/SCRAM, OAuthBearer, mTLSなどが選べます。ACLはリソース(Topic, Group, Cluster など)×操作(Read, Write, Create, Describe など)で付与します。運用ではACLのプリンシパルとパターン(literal/prefix)を明確に管理します。

コンシューマラグの監視、クォータの設定、段階的なローリングアップグレード、協調的リバランスの活用などが安定運用の要点です。協調的(cooperative-sticky)リバランスは再均衡時の停止を最小化します。

  • リスナーごとにSASL/TLS設定を分離し、外部/内部の経路を明確化する。
  • ACLは最小権限付与。Group権限の漏れで他チームのコンシューマに影響しやすい点に注意。
  • 組織標準の証明書管理・キー更新フローをKafkaに統合する。

ACL付与例(プロデューサにWrite、コンシューマにRead)

kafka-acls.sh --bootstrap-server broker:9092 \
  --add --allow-principal User:alice \
  --operation Write --topic payments
kafka-acls.sh --bootstrap-server broker:9092 \
  --add --allow-principal User:bob \
  --operation Read --topic payments --group payments-cg

問題で確認

CCDAK / CCAAK

問題 1

レプリケーション係数3、min.insync.replicas=2のトピックに対し、プロデューサはacks=allで送信しています。1台のブローカ障害によりISRが2から1に低下しました。このとき期待される挙動として最も適切なのはどれか。

  1. プロデューサは引き続き成功を受け取り続けるが、耐久性は低下する
  2. プロデューサの送信は失敗し、再試行しても成功しない状態が続く可能性がある
  3. プロデューサは成功するが、コンシューマはread_committedで読めなくなる
  4. ブローカが1台でも生きていれば常に成功する

正解: B

acks=allはISR全体の追従を待ち、かつmin.insync.replicas=2は少なくとも2レプリカの同時書き込みを要求する。ISRが1に落ちると条件を満たせないため、プロデュースは失敗(NotEnoughReplicas)し続ける。耐久性重視の正しい挙動である。

よくある質問

Exactly-onceは外部DBまで保証できますか?

Kafka内のread-process-writeではトランザクションにより実現可能です。外部DBまで含めるには、その外部が同一トランザクション境界や二相コミット等に対応している必要があります。一般的なJDBCシンクでは厳密に1回を外部まで拡張するのは難しく、冪等キーやアップサート設計で実質的に1回相当を目指します。

キーなし送信時のパーティション選択は常にラウンドロビンですか?

現行のKafkaクライアントは、バッチ効率向上のためのスティッキー・パーティショナーが既定となっており、短期間は同一パーティションにまとめて送信します。厳密な順序制御が必要な場合はキーを設定してください。

ログコンパクションで“削除”はどう表現されますか?

対象キーに対して値null(トゥームストーン)をプロデュースします。コンパクションにより、一定の保持期間経過後に当該キーの古いエントリとともに物理削除されます。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Kafka

Kafka Topic と Partition の基礎: 分散とスケーラビリティの要

CCDAK 対策と実務の両立を意識し、Topic/Partition/Replica/Consumer Group の役...

Kafka

CCDAK 試験ガイド:出題範囲・配点・申込み・対策

Confluent Certified Developer for Apache Kafka (CCDAK) の出題範囲...

Kafka

Confluent Certified Administrator (CCAAK) 対策: 出題範囲・配点の考え方・運用観点の要点

CCAAKに向けて、試験領域の押さえどころを運用目線で整理。プロダクションで通用する設定・監視・セキュリティの実践知を、...

Kafka

Kafka の Replica と In-Sync Replicas を正しく設計する: 耐障害性と一貫性

レプリカとISRの仕組みを起点に、acks と min.insync.replicas、クリーン/アンクリーンリーダー選...

Kafka

Kafka の Offset とコミット: ポジション管理と at-least-once の基礎

CCDAK 対策と実務の両立を意識して、Kafka コンシューマのオフセット管理とコミット戦略を整理。at-least-...

Kafkaの記事一覧 (100件)
© 2026 NicheeLab All rights reserved.