Kafka

MirrorMaker 2で学ぶクラスタ間レプリケーションの基礎

2026-04-19
NicheeLab編集部

クラスタ間レプリケーションは、DR(災害対策)、リージョン間多活、移行時のダウンタイム削減に直結します。本稿ではKafka Connect上で動くMirrorMaker 2(以下MM2)の基本構造と設定要点を、過不足なく押さえます。

CCAAKではMM2のコンポーネント、トピック命名ポリシー、オフセット同期、内部トピックの役割が頻出です。暗記ではなく公式の振る舞いに即して理解しておきましょう。

基本概念と主なユースケース

MM2はKafka Connectベースのレプリケーション仕組みで、ソースクラスタからターゲットクラスタへトピックデータ、必要に応じてトピック設定やコンシューマグループのオフセット情報を同期します。一般にクラスタには短い別名(エイリアス)を付け、レプリケーションポリシーによってターゲット側のトピック名が決まります。

典型的なユースケースは、DRサイトへの片方向レプリケーション、別リージョンへの配信、段階的クラスタ移行、集約クラスタの構築です。RPO/RTO要件、ネットワーク遅延、対象トピックの粒度を最初に明確化するのが設計の第一歩です。

  • DR設計の前提: RPO/RTO、ネットワーク帯域、レイテンシ許容値を数値で決める
  • 対象範囲: 正規表現でトピックを選択し、不要な内部/検証用トピックは除外
  • データ主権/コンプライアンス: リージョン越境の可否と暗号化方式(SASL_SSL/SSL)を確認

MirrorMaker 2のアーキテクチャ

MM2はKafka Connectの上で3つのコネクタ群として動作します。MirrorSourceConnectorがトピックデータを読み出してターゲットに書き込み、MirrorCheckpointConnectorがコンシューマグループのチェックポイント(ソースとターゲットのオフセット対応情報)を同期し、MirrorHeartbeatConnectorがヘルス確認用のハートビートを送ります。これらは分散Connectワーカー上でタスクとして並列動作します。

トピック命名はデフォルトのDefaultReplicationPolicyにより、ターゲット側では「<ソースエイリアス>.<元トピック名」の形式になります。内部的にはチェックポイント、ハートビート、オフセット同期用の専用トピックがターゲット側に作成され、レプリケーションの整合性維持と監視に利用されます。

  • 順序性: パーティション内の順序は維持。クラスタ間のトランザクション整合性(EOSの端から端まで)は提供されない
  • 内部トピック: heartbeats、checkpoints、offset-syncs はコンパクション有効・十分なreplication.factorで作成
  • 拡張性: Connectのtasks.maxで並列度を上げ、I/Oパス(ソース消費・ターゲット書き込み)をスケールアウト

MM2の論理構成(片方向レプリケーション)

MirrorSourceConnectorMirrorCheckpointConnectorMirrorHeartbeatConnectoroffset-syncsSource Clusteralias: src / topics: orders,... / __consumer_offsetsTarget Clusteralias: dst / dst.src.orders / checkpoints / heartbeats片方向レプリケーション(src→dst)の論理構成

最小構成と基本プロパティ

MM2は単一のプロパティファイルで複数クラスタを定義し、方向ごとに有効化します。正規表現で対象トピックを指定し、内部トピックとターゲット側に作成されるトピックのreplication.factorを十分に確保します。セキュリティはクラスタごとのconsumer/producer/admin接頭辞で指定します(SASL/SSL設定など)。

トピック設定同期やグループオフセット同期は明示的に有効化します。命名ポリシーを変える場合はReplicationPolicyを差し替えますが、移行計画と整合するか慎重に判断してください。

  • 方向指定: src->dst.enabled=true で片方向を明確化(双方向はループ防止策が必須)
  • 対象選択: source->target.topics に正規表現、除外は source->target.topics.blacklist などを活用
  • 内部トピック: heartbeats/checkpoints/offset-syncs のreplication.factorを3以上にするのが実務上の目安

mm2.properties(片方向:src→dst の一例)

clusters=src,dst

src.bootstrap.servers=SRC_BROKERS:9092
dst.bootstrap.servers=DST_BROKERS:9092

# 有効化(方向ごと)
src->dst.enabled=true
# 対象トピック(正規表現)。必要に応じて限定する
src->dst.topics=orders|payments|users
# 例: 除外を使う場合(実装/配布によりプロパティ名が異なることがあるため公式ドキュメントを確認)
# src->dst.topics.blacklist=^_.*

# 命名ポリシー(デフォルトは src.<topic> 形式)
replication.policy.class=org.apache.kafka.connect.mirror.DefaultReplicationPolicy

# 設定とオフセット同期
sync.topic.configs.enabled=true
sync.group.offsets.enabled=true
emit.heartbeats.enabled=true

# 並列度と冗長性
tasks.max=4
replication.factor=3
checkpoints.topic.replication.factor=3
heartbeats.topic.replication.factor=3
offset-syncs.topic.replication.factor=3

# メタデータの更新間隔
refresh.topics.interval.seconds=60
refresh.groups.interval.seconds=60

# セキュリティ例(必要に応じて admin/producer/consumer の各接頭辞で設定)
src.consumer.security.protocol=SASL_SSL
src.consumer.sasl.mechanism=PLAIN
src.consumer.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="user" password="pass";

dst.producer.security.protocol=SASL_SSL
dst.producer.sasl.mechanism=PLAIN
dst.producer.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="user" password="pass";

# 必要に応じて管理クライアント
# dst.admin.security.protocol=SASL_SSL

トピック命名・設定同期とオフセット同期の理解

命名はReplicationPolicyに従います。DefaultReplicationPolicyではターゲット側のトピック名は「<ソースエイリアス>.<元名>」になり、衝突やループを避けやすくなります。IdentityReplicationPolicyを使うと同名トピックになりますが、双方向構成ではループ回避が難しく実務では慎重な設計が必要です。

オフセット同期はMirrorCheckpointConnectorとoffset-syncsにより行われ、sync.group.offsets.enabledを有効にすると、同一のgroup.idでターゲットにフェイルオーバーした際に、直近の整合した位置から再開しやすくなります。確実な移行には、ソース側コンシューマを停止→チェックポイントがターゲットへ反映されるのを待機→ターゲット側で同じgroup.idを起動、という手順が推奨です。

  • 前提: ソース側のコンシューマは定期的にコミットしていること(オート/明示いずれでも可)
  • 順序と重複: パーティション内順序は維持されるが、クラスタ間での厳密なEOSは非対応。重複耐性のある処理設計が無難
  • トピック設定: sync.topic.configs.enabledで主要な設定を同期。ACLやクォータは環境依存で、別途の管理が必要なことが多い

運用・監視・チューニングの要点

監視はConnectワーカーと各コネクタ/タスクのJMXメトリクス、ターゲット側のheartbeats・checkpoints・offset-syncsトピックのレイテンシやサイズを中心に行います。レプリケーションラグはラグメトリクスやコンシューマラグの可視化で追跡します。

チューニングは並列度(tasks.max)、ソース側コンシューマのフェッチ/バッチ設定、ターゲット側プロデューサのバッチング(linger.ms, batch.size)などが有効です。ネットワークの帯域/RTTがボトルネックになりやすいため、リージョン間では圧縮(compression.type)も検討します。

  • 内部トピックはcleanup.policy=compactを維持し、replication.factorを十分に確保
  • トピック自動作成を前提にせず、必要に応じて事前作成 or 設定同期を明示的に有効化
  • 双方向時はループ防止(自クラスタ由来メッセージの再取り込み抑止)を必ず設計に含める

MirrorMaker(旧)/ MirrorMaker 2 / Cluster Linkingの比較

運用や試験対策では、旧MirrorMakerとの違い、そしてConfluentのCluster Linking(製品機能)との住み分けを理解しておくと混乱を防げます。MM2はConnectベースで拡張性と可観測性が高く、オフセット/設定同期の仕組みを備えます。一方、Cluster Linkingはクラスタ間でのブローカー間リンクにより管理を単純化する設計です(Confluentの提供機能)。

  • MM2はOSS Kafkaで一般的に利用可能。Cluster LinkingはConfluentプラットフォーム/Cloudの機能
  • 試験ではMM2の3コネクタ構成、デフォルト命名、内部トピックの役割が狙われやすい
観点MirrorMaker(旧)MirrorMaker 2Cluster Linking(Confluent)
基盤専用ツール(Connect非依存)Kafka Connectベース(Source/Checkpoint/Heartbeat)ブローカー間リンク(Connect不要)
オフセット同期手作業/限定的チェックポイント+offset-syncsで同期可能リンク機構で自動的に整合
トピック設定同期不可sync.topic.configs.enabledで主要設定を同期リンク側で設定引き継ぎ(製品仕様)
命名ポリシー同名が基本(衝突注意)デフォルトは <src>.<topic>(変更可)同名が基本(製品仕様)
運用性/監視限定的Connectのスケール/監視が利用可能製品の管理/監視機能を利用
ユースケース簡易な片方向レプリケーション一般的なDR/移行/多活Confluent環境でのより簡便な多リージョン

CCAAK試験対策の要点

MM2は3つのコネクタ(Source/Checkpoint/Heartbeat)で構成され、Kafka Connect上で動作する点を押さえる。デフォルトのReplicationPolicyではターゲットのトピック名にソースエイリアスの接頭辞が付く。

sync.group.offsets.enabled と sync.topic.configs.enabled を必要に応じて有効化する。内部トピック(heartbeats, checkpoints, offset-syncs)はcompactかつ十分なreplication.factorで運用する。クラスタ間のEOSは提供されないため、重複に強いコンシューマ設計が前提。

  • 片方向レプリケーションの最小プロパティを再現できること
  • フェイルオーバー手順(停止→チェックポイント反映→起動)を説明できること
  • 旧MirrorMaker/Cluster Linkingとの違いを1行で言えること

問題で確認

CCAAK

問題 1

MM2でソースのコンシューマグループを停止後、ターゲットクラスタで同じgroup.idを用いて中断地点から再開したい。設定と前提の組み合わせとして最も適切なのはどれか。

  1. sync.group.offsets.enabled を有効にし、チェックポイントの反映を待ってからターゲットで同じ group.id を起動する
  2. ターゲットのコンシューマで auto.offset.reset=earliest にして起動する(追加設定は不要)
  3. replication.policy を IdentityReplicationPolicy にするだけでオフセットも自動的に同期される
  4. プロデューサ側でidempotenceを有効化すればクラスタ間で厳密なEOSとなり、中断地点から再開できる

正解: A

MM2のオフセット同期はMirrorCheckpointConnectorとoffset-syncsに基づき、sync.group.offsets.enabled を有効にしたうえでソース側を停止→チェックポイント反映→ターゲットで同じgroup.id起動、という手順が推奨。auto.offset.reset は既存オフセットがない場合の初期位置指定であり同期の代替にはならない。ReplicationPolicyは命名に影響するがオフセット同期の要件ではない。クラスタ間のEOSは提供されないためプロデューサの冪等化のみでは中断地点再開を保証しない。

よくある質問

双方向レプリケーションは可能ですか?ループはどう防ぎますか?

可能ですが慎重な設計が必要です。デフォルトのDefaultReplicationPolicyでソースエイリアスを接頭辞にすることで自己生成データの再取り込みを避けやすくなります。対象トピックを明示的に限定し、片方向ごとにフィルタリング(正規表現)を行うことでループを防止します。

MM2はクラスタ間でExactly-Once Semantics(EOS)を提供しますか?

提供しません。MM2はパーティション内順序と少なくとも1回の配信を前提にしています。重複排除はターゲット側のコンシューマ/アプリケーションや下流のストレージで対策してください。

スキーマやACLは同期されますか?

スキーマレジストリやACLはMM2の対象外です。トピック設定の一部は sync.topic.configs.enabled で同期されますが、スキーマはスキーマレジストリ側のレプリケーション/ミラー機能、ACLは各環境のセキュリティ運用で別途管理するのが一般的です。

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

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の記事一覧 (101件)
© 2026 NicheeLab All rights reserved.