Kafka Connect はコネクタの実行基盤として、スタンドアロンと分散モードの2形態を提供します。どちらも同じコネクタ/タスクのモデルを使いますが、構成の保管先やフェイルオーバー、スケール方法が異なります。
本稿は、選定の指針と運用ベストプラクティスを平易に整理し、試験(CCDAK/CCAAK)で頻出のポイントもあわせて確認します。公式ドキュメントに基づく安定した概念に絞って解説します。
スタンドアロンは1プロセス内でコネクタとタスクを実行し、設定・オフセットをローカルファイルに保持します。フェイルオーバーやリバランスはありません。単発の移行、開発検証、1台限定のバッチ処理などに向きます。
分散モードは複数の Connect ワーカーで1つのクラスタを組み、構成・オフセット・ステータスをKafkaの内部トピックに保持します。ワーカー障害時はタスクが他ワーカーへ再割当てされ、スケールアウトやローリングアップグレードが可能です。本番運用の既定選択はこちらです。
| 観点 | スタンドアロン | 分散モード |
|---|---|---|
| 構成の保管先 | ローカルファイル(properties) | Kafka 内部トピック(config.storage.topic) |
| オフセットの保管先 | ローカルファイル(offset.storage.file.filename) | Kafka 内部トピック(offset.storage.topic) |
| 可用性 | 単一プロセス。障害で停止 | ワーカー障害時にタスク自動再配置 |
| スケール | プロセス単位で増やすのみ。手動分割 | ワーカー追加で自動リバランス |
| 運用変更反映 | プロセス再起動が基本 | REST 経由の更新を全ワーカーで共有 |
| ユースケース | PoC、単発移行、開発用 | 本番常時稼働、HA、継続運用 |
Kafka Connect: 分散モードとスタンドアロンの俯瞰
最小構成の対比(スタンドアロン vs 分散ワーカー)
# standalone.properties(抜粋)
bootstrap.servers=broker1:9092
key.converter=org.apache.kafka.connect.storage.StringConverter
value.converter=org.apache.kafka.connect.storage.StringConverter
offset.storage.file.filename=/var/lib/kafka-connect/connect.offsets
offset.flush.interval.ms=10000
# worker.properties(分散モード, 抜粋)
bootstrap.servers=broker1:9092,broker2:9092
group.id=connect-cluster-1
config.storage.topic=connect-configs
offset.storage.topic=connect-offsets
status.storage.topic=connect-status
config.storage.replication.factor=3
offset.storage.replication.factor=3
status.storage.replication.factor=3Connect では、ワーカーがプロセス、コネクタがジョブ、タスクが並列実行単位です。タスク数はコネクタ設定(tasks.max)やシンクならパーティション数により上限が決まります。
分散モードでは、構成(config.storage.topic)、オフセット(offset.storage.topic)、ステータス(status.storage.topic)をKafka内部トピックに保存します。これにより、REST経由で投入した設定がクラスタ全体で共有され、障害復旧やローリングアップグレードが容易になります。内部トピックはコンパクション有効で作成され、レプリケーションファクターは本番で少なくとも3を推奨します。自動作成を禁じているクラスタでは、事前に適切な設定で作成しておきます。
内部トピック関連の代表的プロパティ(分散ワーカー)
bootstrap.servers=broker1:9092,broker2:9092
group.id=connect-cluster-1
config.storage.topic=connect-configs
config.storage.replication.factor=3
offset.storage.topic=connect-offsets
offset.storage.replication.factor=3
status.storage.topic=connect-status
status.storage.replication.factor=3分散モードでは、ワーカー障害時にそのワーカーが保持していたタスクがクラスタ内の健全なワーカーへ再割当てされます。コネクタ設定は内部トピックにあるため、プロセスが変わっても継続実行できます。スタンドアロンは単一プロセスのため、障害でタスクが停止し、手動復旧が必要です。
設定変更は REST API で投入し、分散クラスタの全ワーカーが共有します。復旧時はコネクタやタスクの再起動、必要に応じて一時停止/再開を使います。
Connect REST API による運用(例)
# コネクタ一覧
curl -s http://connect1:8083/connectors
# コネクタ作成
curl -s -X POST http://connect1:8083/connectors -H 'Content-Type: application/json' -d '{
"name": "jdbc-sink-01",
"config": {"connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector", "topics": "orders", "tasks.max": "4"}
}'
# 一時停止/再開
curl -X PUT http://connect1:8083/connectors/jdbc-sink-01/pause
curl -X PUT http://connect1:8083/connectors/jdbc-sink-01/resume
# 再起動(コネクタ/すべてのタスク)
curl -X POST http://connect1:8083/connectors/jdbc-sink-01/restart?includeTasks=true&onlyFailed=trueシンクの並列度は原則として対象トピックのパーティション数に制限され、tasks.max をそれ以下に設定します。ソースは接続先システムの分割性に依存します。分散モードではワーカーを追加するだけで総処理能力を伸ばせます。
スタンドアロンでスケールしたい場合は、別プロセスとして複数起動し、対象トピックやテーブルを明確に分割する必要があります(オフセットファイルも分離)。一方、分散モードでは1つの設定を REST で投入し、クラスタが自動でタスク配分します。
シンク・コネクタ設定例(スループット調整)
{
"name": "s3-sink-raw",
"config": {
"connector.class": "io.confluent.connect.s3.S3SinkConnector",
"topics": "raw.events",
"tasks.max": "6",
"flush.size": "10000",
"key.converter": "org.apache.kafka.connect.storage.StringConverter",
"value.converter": "org.apache.kafka.connect.json.JsonConverter",
"value.converter.schemas.enable": "false"
}
}監視は JMX メトリクス(ワーカー/コネクタ/タスク単位)とステータストピックの併用が実務的です。エラーハンドリングは Dead Letter Queue(DLQ)やログ出力を適切に構成します。
セキュリティはブローカーへの接続(SASL/SSL)をワーカー共通のプロパティ、あるいはコネクタごとの producer.* / consumer.* で上書き設定します。分散モードのアップグレードはローリングが基本で、ワーカーを1台ずつ停止・更新・復帰させます。
代表的な運用設定スニペット
# JMX 有効化(起動スクリプトなど)
export KAFKA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
# DLQ とエラー制御(コネクタ側設定)
errors.tolerance=all
errors.log.enable=true
errors.deadletterqueue.topic.name=connect-dlq
errors.deadletterqueue.context.headers.enable=true
# ブローカー接続のセキュリティ例(ワーカー共通)
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="user" password="pass";モード差分と内部トピックの役割、オフセットの保存先、スケーリングの制約(tasks.max とパーティション数の関係)は頻出です。REST による運用、DLQ とエラー制御、ローリングアップグレードの可否も問われがちです。
用語の区別(ワーカー / コネクタ / タスク)と、分散モードでの設定共有の仕組み(config.storage.topic)が正しく説明できることが合格点の目安です。
覚えておきたい主要プロパティ早見
# 分散モード必須
group.id=connect-cluster-1
config.storage.topic=connect-configs
offset.storage.topic=connect-offsets
status.storage.topic=connect-status
# スタンドアロン固有
offset.storage.file.filename=/var/lib/kafka-connect/connect.offsets
# 並列度とフラッシュ
tasks.max=4
offset.flush.interval.ms=10000CCDAK / CCAAK
問題 1
本番環境で高可用性を保ちつつ、将来的に処理能力を段階的に増やしたい。どの Kafka Connect 実行モードを選び、設定はどこに保持されるか?
正解: C
高可用性とスケールアウトが要件であれば分散モードが推奨。分散モードではコネクタ設定は Kafka の内部トピック(config.storage.topic)に保存され、ワーカー間で共有される。スタンドアロンはローカルファイル管理で HA ではない。
スタンドアロンは本番で使えないのですか?
要件次第ですが、単一プロセスでフェイルオーバーが無く、構成とオフセットがローカル管理のため、可用性・保守性の観点から一般的な常時稼働の本番用途には不向きです。短期のバッチ、PoC、開発検証には有効です。
内部トピックを手動作成する場合の注意点は?
cleanup.policy=compact を必ず設定し、レプリケーションファクターは本番で3以上を推奨します。パーティション数はワークロードに依存しますが、よくある初期値の例として config=1、status=5、offsets=25 が挙げられます。クラスタの自動作成を無効化している場合は、接続前に適切な設定で作成しておくと安全です。
タスクとコネクタの違いは?
コネクタはジョブ定義(接続先やトピック、各種設定)で、タスクはそのジョブを並列に実行するワーカー内の単位です。tasks.max により生成可能なタスク数の上限が決まり、分散モードではこれらタスクがクラスタ内のワーカーに分配されます。
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-...