トピック名は変更不可で長期に残り続けます。最初の設計が運用コストと信頼性を左右します。
本稿はKafka/Confluentの安定仕様に基づき、検索性・権限設計・監査対応を意識した命名パターンを提示します。資格試験(CCDAK / CCAAK)で問われやすい公式制約も併せて確認します。
命名は運用の入口です。良い命名は、監査ログやメトリクスの集約、ACL/RBACのプレフィックス設計、インシデント時の探索効率を高めます。逆に場当たり的な命名は、権限の破綻・重複トピック・誤配信の温床になります。
CCDAK/CCAAKでは、公式の命名制約(許容文字や大文字小文字の扱い、名前変更不可)や、スキーマ登録の既定動作(TopicNameStrategy)の理解が頻出です。実務でも、これらを前提にトークン化(ドメイン、エンティティ、イベント種別、環境、リージョン、バージョン)しておくと、環境拡張や組織変更にも強い設計になります。
悪例と良例
# 悪例(意味不明/環境不明/記号混在)
orders
kafkaTopic1
sales:order|created
# 良例(ドメイン.エンティティ.イベント.環境.リージョン.版)
sales.order.created.prod.eu-west-1.v1
risk.credit_decision.approved.stg.ap-northeast-1.v2Kafkaのトピック名は安定仕様として、使用可能文字が限定され、大文字小文字は区別されます。名前の変更はできません。これらはバージョン間で長く維持されている基本動作です(Kafka公式ドキュメント/Confluent Docs参照)。
よくある誤解として、ドットの階層に意味はありません(フォルダ構造になりません)。またスラッシュやコロンなどの記号は使用できません。長さ上限は実装に依存しますが、一般的に数百文字以内(多くの環境で約249文字)です。運用上は100文字以内を目安にし、ツール連携や可観測性のラベル制限に余裕を残すのが無難です。
最小バリデーションの例(正規表現)
# 許容文字の簡易チェック(例)
# ^[A-Za-z0-9._-]+$ に一致するか確認
# さらに、先頭や末尾の区切り、連続した区切りを禁止する場合はポリシーで拡張
pattern = r'^[A-Za-z0-9](?:[A-Za-z0-9._-]*[A-Za-z0-9])?
NicheeLab を読み込み中…
#x27; # テスト例 valid = [ 'sales.order.created.prod.eu-west-1.v1', 'etl_job.status._tmp-123' # ルールに応じて許可/禁止を決める ] invalid = [ 'sales/order', # スラッシュ不可 'order:created', # コロン不可 ' order', # 先頭空白不可 '注文', # 非ASCII不可(標準Kafkaの仕様) ]
運用のしやすさを最優先に、以下の順でトークン化するのを推奨します。org.domain.entity.kind.env.region.version。kind は event, snapshot, command, dlq などのデータ種別です。env は dev/stg/prod など、region はクラウドやデータセンターの識別子、version は互換性の破れを伴う変更時に用います。
区切り文字はドットを階層的な論理分割、ハイフンを人が読む語の連結、アンダースコアを固定トークンや機械的接尾辞に使い分けると実務で扱いやすくなります。
| 区切り文字 | 主用途 | 長所 | 注意点 |
|---|---|---|---|
| . | 論理階層の分割(org.domain.entity.kind.env.region.version) | PREFIXED ACLや検索に強い。視認性が高い | 階層はあくまで名前上の慣習でありネイティブな階層構造はない |
| - | 語の連結(credit-decision、eu-west-1) | 人間に読みやすい。既存クラウド表記と親和 | 連続使用や末尾ハイフンは避ける |
| _ | 機械的な接尾辞・一時用途(_tmp, _dlq など) | 識別の安定性が高い。ツールでの抽出が容易 | 意味の乱立を避ける。恒久名には乱用しない |
推奨命名の分解例
パターン例と推奨正規表現
# 例
sales.order.created.prod.eu-west-1.v1
risk.credit_decision.snapshot.stg.ap-northeast-1.v2
common.schema.changelog.dev.us-central1.v1
# 厳しめの社内ルール例(先頭/末尾の区切り禁止、連続区切り禁止、ドット区切りで7トークン)
# ^(?!.*[._-]{2})[A-Za-z0-9]+(?:[.-][A-Za-z0-9]+)*\.[A-Za-z0-9]+\.[A-Za-z0-9]+\.(event|snapshot|command|dlq)\.(dev|stg|prod)\.[A-Za-z0-9-]+\.(v[0-9]+)$環境は必ずトークン化し、誤配信を防ぎます。プロデューサー/コンシューマーの設定ミスを早期に検知でき、監視ラベルの切り分けにも有効です。リージョンはDRやマルチサイト運用での識別に不可欠です。
バージョンは互換性が破れた場合のみ上げ、古いトピックを段階的に廃止します。新旧を並行運用し、コンシューマーから順に移行するのが安全です。トピック名は変更できないため、v1 と v2 は別トピックとして共存させます。
作成例(CLI)
# 例: kafka-topics(ブローカーに応じてツール名やオプションは調整)
# sales.order.created.prod.eu-west-1.v1 を3パーティション/複製係数3で作成
kafka-topics --bootstrap-server broker:9092 \
--create --topic sales.order.created.prod.eu-west-1.v1 \
--partitions 3 --replication-factor 3
# v2 を併存させる
kafka-topics --bootstrap-server broker:9092 \
--create --topic sales.order.created.prod.eu-west-1.v2 \
--partitions 6 --replication-factor 3Confluent Schema Registry の既定の Subject Naming Strategy は TopicNameStrategy で、<topic>-value の形式でサブジェクトが作成されます。つまり、トピック命名はスキーマのサブジェクト体系にも直結します。命名を揃えることで、スキーマ互換性の検証や監査の粒度を揃えられます。
ACL/RBAC は PREFIXED 設定と相性が良く、共通接頭辞を持つトピック群に対して役割を安全に委譲できます。命名規則はセキュリティ設計と一体で考えるべきです。
ACL の例(概念)
# 例: sales.order.* に対してコンシューム権限を委譲(実際のCLIは環境に合わせて調整)
# kafka-acls --bootstrap-server broker:9092 \
# --add --allow-principal User:svc-analytics \
# --operation Read --topic "sales.order." --resource-pattern-type prefixed
# スキーマサブジェクトのイメージ(TopicNameStrategy)
# トピック: sales.order.created.prod.eu-west-1.v1
# サブジェクト: sales.order.created.prod.eu-west-1.v1-value命名規則は文書化して終わりではなく、自動チェックに組み込みます。PR時にリント、作成前にゲートし、カタログで所有者やライフサイクルを管理します。変更審査のワークフローを用意すると、重複や衝突を未然に防げます。
可観測性では、トピック名からラベルを抽出してダッシュボードを自動生成する仕組みが効果的です。アラート名にトークンを反映させ、担当チームへの自動ルーティングも容易になります。
シンプルな命名リンター(Bash + grep)
#!/usr/bin/env bash
# 会社ルール: org.domain.entity.kind.env.region.version
name="$1"
regex='^[A-Za-z0-9]+\.[A-Za-z0-9]+\.[A-Za-z0-9]+\.(event|snapshot|command|dlq)\.(dev|stg|prod)\.[A-Za-z0-9-]+\.(v[0-9]+)
NicheeLab を読み込み中…
#x27;
if [[ "$name" =~ $regex ]]; then
echo "OK: $name"
exit 0
else
echo "NG: $name (規則違反)" >&2
exit 1
fiCCDAK / CCAAK
問題 1
Kafkaのトピック名に関する記述として正しいものはどれか。
正解: A
Kafkaのトピック名で使用できるのは英数字と .(ピリオド)、_(アンダースコア)、-(ハイフン)であり、大文字小文字は区別されます。またトピック名の変更はできません。Schema Registry の既定は TopicNameStrategy で <topic>-value がサブジェクトになります。
環境トークン(dev/stg/prod)は必ず入れるべきですか?
本番誤配信や監視の切り分けを防ぐため、明示的に含めるのが実務上のベストプラクティスです。クラスタで環境を完全に分離していても、可観測性や権限設計の一貫性のために入れておくと有利です。
破壊的変更が必要になりました。既存トピック名をそのまま使い続けられますか?
トピック名は変更できないため、v2 など新トピックを作成し、プロデューサー→コンシューマーの順に段階的に移行します。両方を並行稼働させ、ACL/監視/アラートも同時に切り替えます。
人名や一時プロジェクト名をトピックに入れても問題ありませんか?
短期的には動作しますが、所有者変更やドメイン移管で命名が腐敗します。人名は避け、ドメイン・エンティティ・イベント種別などビジネスの安定語彙で命名してください。一時用途は _tmp のような明示的かつ期限付きの接尾辞に限定します。
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-...