Kafka

Kafka Rack Awareness 実践ガイド:障害分離のためのブローカー配置

2026-04-19
NicheeLab編集部

Rack Awareness は、ブローカーとレプリカを物理/論理的に分離(ラック、アベイラビリティゾーン、データセンター)して、単一障害によるサービス停止やデータ喪失の確率を下げるための標準機能です。運用では「すべてのブローカーに正しい rack を設定する」ことと、「レプリケーション設定をラック障害前提で決める」ことが肝になります。

本稿は、公式ドキュメントに基づく安定的な挙動を前提に、ブローカー配置、パーティション配置アルゴリズム、RF と min.insync.replicas の組み合わせ、障害時の動作を整理します。最後に CCAAK 向けの出題ポイントも明確化します。

Rack Awareness の目的と前提条件

Kafka の Rack Awareness は、トピック作成時やレプリカ再割り当て時に、可能な限り異なる rack にレプリカを分散させる仕組みです。これにより、ラック全体の障害や計画停止があっても、他ラック上のレプリカでリーダーを維持し、書き込み・読み取りを継続できます。

前提はシンプルで、すべてのブローカーに一貫した rack ラベル(broker.rack)を設定することです。これが欠けると、コントローラはラック情報を利用できず、同一ラック内に複数レプリカが偏るリスクが高まります。

  • Rack Awareness は「レプリカ配置」の話であって、クラスタ間レプリケーションやクライアントの近接読み取りとは別機能。
  • 耐障害性は RF(replication.factor)と min.insync.replicas、Producer の acks 設定と組み合わせて成立。
  • ラック数 < RF の場合、全レプリカを別ラックに置くことは不可能で、同一ラック内に複数レプリカが載る可能性がある。

ブローカーの rack 設定と安全なローリング適用

broker.rack は各ブローカーの静的設定です。ラック名や AZ 名はクラスタ内で一貫しており、誤記や重複を避ける必要があります。設定後はローリング再起動で反映します。既存トピックのレプリカ配置は自動では変わらないため、必要に応じて再割り当てを計画します。

検証は、管理 API でブローカー構成を参照する、あるいは新規に作成したテストトピックのレプリカが異なる rack に分散しているかを確認するのが実務的です。

  • ブローカーIDと物理ラック/AZ の対応表を作成してレビュー。
  • 全ブローカーに broker.rack を設定し、ローリングで再起動。
  • テストトピック(RF≥ラック数)を作成し、レプリカの rack 分散を確認。
  • 既存トピックをラック分散させたい場合は、計画的に再割り当てを実施(スロットル設定を忘れない)。
  • rack 名の変更は慎重に。誤った変更は一時的なリーダー偏りや再同期増加を招く。

broker.rack の設定例と検証用トピック作成

# 各ブローカー server.properties(一例)
broker.id=1
broker.rack=r1
# 他設定は省略

# Kubernetes 等では環境変数を使ってテンプレート展開する例もある
# KAFKA_BROKER_RACK=r1

# 検証用に RF=3 のトピックを作成
kafka-topics --bootstrap-server <host:port> \
  --create --topic rack-test --partitions 3 --replication-factor 3

# 配置の確認(レプリカが複数 rack に分散しているか)
kafka-topics --bootstrap-server <host:port> --describe --topic rack-test
# AdminClient(API)でブローカー構成(broker.rack)を参照しても良い

パーティション配置アルゴリズムと障害分離の仕組み

トピック作成時、コントローラは broker.rack を考慮して可能な限りレプリカを異なる rack に配置します。ブローカー間のバランス(パーティション数・レプリカ数)も考慮しつつ、同一 rack への過剰な集中を避けるように割り当てます。

ラック障害時は、ISR に残る別ラック上のレプリカからリーダーを選出します。RF=3、min.insync.replicas=2、acks=all の組み合わせなら、1ラック(=1レプリカ)喪失時も書き込み継続が可能です。

  • 1ラック障害に耐える目安: RF=3, min.insync.replicas=2, acks=all, unclean.leader.election.enable=false。
  • ラック数 < RF のときは最大限分散するが、完全分離は保証できない。
  • 再割り当てツール実行時も rack を尊重して配置を提案できる(ツールのデフォルト挙動を確認のうえ運用)。

ラック分散の例(RF=3, 3ラック, 6ブローカー)

Rack r1 (b1, b2)P0(L)->b1 / P1 F->b2 / P2 F->b2Rack r2 (b3, b4)P0 F->b3 / P1(L)->b4 / P2 F->b3Rack r3 (b5, b6)P0 F->b5 / P1 F->b6 / P2(L)->b6凡例: L=Leader, F=Follower。各パーティションの3レプリカが3ラックに分散している。

トピック設計:RF と min.insync.replicas と acks の要点

ラック障害に耐えるには、レプリカを別ラックへ分散させるだけでなく、書き込みクォーラム条件を適切に設定する必要があります。特に RF と min.insync.replicas(minISR)と Producer の acks はセットで考え、障害時の継続可否とデータ安全性のトレードオフを理解しておきます。

一般的に、3ラック構成では RF=3、minISR=2、acks=all を推奨します。これにより1ラック喪失時も書き込みを継続しつつ、unclean リーダー選出を無効にしてデータ損失を防止できます。

  • minISR はトピックまたはブローカーデフォルトで設定可能。RF より小さく、障害時に満たせないと書き込みは失敗する。
  • acks=all を使わない場合、ラック障害下で見かけ上成功しても後でデータ欠損が顕在化するリスクがある。
  • パーティション数が多いとラック内のブローカー間での分散も重要になる(ホットスポット回避)。
構成ラック障害耐性障害時の書き込み可用性代表的な用途/注意
broker.rack 未設定 + RF=3 + minISR=2 + acks=all理論上は可だが実配置が同一ラック集中の恐れ配置次第で不可に転ぶまずは全ブローカーの rack 設定を整備することが前提
broker.rack 設定 + RF=3 + minISR=2 + acks=all1ラック障害に対応継続可(2レプリカ健在時)CCAAKでの標準解。unclean leader 選出は無効を推奨
broker.rack 設定 + RF=2 + minISR=2 + acks=all1ラック障害に弱い(RF=2は片ラック喪失で不可)不可(クォーラム未達)低コストだがラック障害要件がある環境では不適
broker.rack 設定 + RF=3 + minISR=1 + acks=1レプリカ分散は効くがデータ安全性は弱い継続可(ただし整合性リスク)低レイテンシ優先の一時用途。重要データには非推奨

障害・保守時の挙動と実務パターン

計画メンテナンスではラック単位の作業を避け、可能ならブローカー単位でローリングを行います。どうしてもラック全停止が必要な場合は、事前に minISR とトラフィックパターンを確認し、必要に応じて一時的なスロットルやプロデューサのバックオフ調整を行います。

レプリカ再割り当て時は、rack を尊重したプランを生成し、リバランスのスロットルを適切に設定します。監視では、パーティションのリーダー分布が特定ラックに偏っていないか、ISR 収縮が連鎖していないかを重点的に確認します。

  • リバランスのスロットル設定(replica.fetch.max.bytes, follower.fetch 配下の帯域、ツールのスロットル)
  • 優先リーダー選出を計画的に実施し、リーダーを各ラックに均等化
  • 大量のパーティション移動は分割して実施。観測指標(UnderReplicatedPartitions, ISR 変動)を見ながら進める

CCAAK 試験対策チェックリストと落とし穴

CCAAK では、rack を使ったレプリカ分散の原理、RF/minISR/acks の相互作用、ラック障害時の書き込み可否、設定の適用順序(全ブローカーに broker.rack を設定)といった実務基本が問われます。以下の観点を押さえておくと取りこぼしを減らせます。

また、クライアントの近接読み取りは別の設定領域であり、Rack Awareness(レプリカ配置)と混同しないことが重要です。

  • 全ブローカーに broker.rack を設定しなければラック分散は成立しない。
  • RF=3, minISR=2, acks=all は 1ラック障害に耐える代表構成。
  • ラック数 < RF の場合、完全分離は不可能で一部同ラック配置になる可能性あり。
  • unclean.leader.election.enable=false によりデータ損失を防止(可用性とのトレードオフ)。
  • レプリカ再割り当てをしない限り、既存トピックの配置は自動では変わらない。

問題で確認

CCAAK

問題 1

3ラック(r1, r2, r3)にブローカーが均等配置された Kafka クラスタで、ラック全体の障害に対しても書き込みを継続しつつデータ損失を避けたい。最も適切な組み合わせはどれか。

  1. 全ブローカーに broker.rack を設定し、RF=3、min.insync.replicas=2、Producer は acks=all、unclean.leader.election.enable=false
  2. 全ブローカーに broker.rack を設定し、RF=2、min.insync.replicas=2、Producer は acks=all
  3. 一部ブローカーのみ broker.rack を設定し、RF=3、min.insync.replicas=1、Producer は acks=1
  4. broker.rack は未設定、RF=3、min.insync.replicas=2、Producer は acks=all(配置はツール任せ)

正解: A

ラック障害を前提にするには、レプリカがラック間で分散され(全ブローカーに broker.rack を設定)、クォーラム条件として RF=3 と minISR=2 を満たし、acks=all でコミット確認を行う必要がある。unclean リーダー選出は無効化してデータ損失を防ぐ。RF=2 はラック喪失でクォーラム未達、rack 未設定や一部設定は分散が保証されない。

よくある質問

broker.rack を後から変更すると既存トピックのレプリカは自動で移動しますか?

自動では移動しません。新規作成や再割り当て時の配置計算に rack が使われます。既存パーティションをラック分散させたい場合は、再割り当てツールや管理 API を用いて計画的に移動します。

ラック数より RF が大きい場合はどうなりますか?

可能な限り多くのラックに分散しますが、数が足りない分は同一ラック内に複数レプリカが配置されます。完全なラック分離はできないため、要件次第でラックの追加、RF の見直し、あるいは配置方針の調整を検討してください。

コンシューマを同一ラックのレプリカから優先的に読み取りさせられますか?

レプリカ配置の Rack Awareness とは別の領域です。Kafka にはクライアントやブローカー側の設定で近接レプリカからの取得を優先する仕組みがあり、client.rack や関連のレプリカ選択設定を組み合わせます。導入可否や既定値はバージョン差があるため、利用中のバージョンの公式ドキュメントで確認してください。

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

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.