Kafka

Kafka Source Connectors 実践ガイド: 外部システムからの取り込み設計とCCDAK対策

2026-04-19
NicheeLab編集部

Kafka ConnectのSource Connectorは、データベースやファイル、SaaSなど外部システムからKafkaトピックへ連続的にデータを取り込む公式メカニズムです。

本稿では、アーキテクチャ、スケーリング、スキーマ/順序性、信頼性・運用、デプロイ選択、セキュリティ/性能チューニングを5〜7セクションで体系化し、CCDAK対策ポイントも明確化します。

Source Connectorの基礎と使いどころ

Kafka Connectはプラガブルなコネクタで外部システムとKafka間のデータ連携を標準化します。Source Connectorは外部からKafkaへの一方向同期を担い、ジョブの定義(Connector)と並列実行単位(Tasks)で構成されます。設定・実行・監視はREST APIから行えます。

実務では「安定運用」「再利用性」「メンテ性」が理由で、個別のProducerアプリより先にSource Connectorを検討します。特にRDB取り込み(JDBC/CDC)、オブジェクトストレージ、ログ/ファイル取り込み、SaaSイベント購読などで効果的です。

  • 配信保証: 一般に少なくとも1回(at-least-once)。重複許容設計が前提。ConnectorやKafkaバージョンにより正確に一度を近似できる場合があるが、業務要件に合わせて重複排除や冪等設計を併用する。
  • 内部状態: オフセットはKafkaの内部トピック(__connect-offsets)で管理。構成(__connect-configs)、ステータス(__connect-status)も内部トピックに保存。
  • 軽度の変換はSMT(Single Message Transform)を優先。重い集約/結合が必要ならKafka StreamsやksqlDBを検討。

アーキテクチャとスケーリング: Workers・Connectors・Tasks

Kafka ConnectはWorkers(プロセス)がクラスタを形成し、Connector定義を分散管理、Tasksを各Workerに割り当てます。スケールアウトは主にtasks.maxの増加と、十分なKafkaパーティション数の確保で行います。再平衡はWorkerの増減や設定変更で発生します。

信頼性は内部トピックのレプリケーション・クォーラム、acks=all、十分なmin.insync.replicasで担保します。トピック設計とプロデューサ設定はConnectorから委譲/上書きされるため、要件に合わせて明示します。

  • Workerモード: スタンドアロン(単機)か分散(クラスタ)。本番は分散が基本。
  • Tasks並列度: tasks.maxに上限。実効並列は外部ソースの分割能力(例: テーブルシャーディング)やKafkaトピックのパーティション数にも依存。
  • 内部トピック: __connect-configs/__connect-offsets/__connect-status は十分なreplication.factor(例: 3)を推奨。

Source Connectorの論理構成

pollsendoffsetsExternal System(DB, Files, SaaS)Source Task(s)(N parallel)Kafka Topic(s)Partitions (M)Connect Worker Clusterinternal topics (__connect-*)Source Connectorの論理構成

取り込み設計: スキーマ、キー、パーティショニング、順序性

キー設計は最重要です。エンティティ単位の順序保証が必要なら、同一エンティティで同一キーを用い、同一パーティションに集約します。Kafkaの順序保証はパーティション内のみです。取り込み後の集約や下流処理のシャッフルも見越して、キーの安定性とカーディナリティを検討します。

スキーマはSchema Registryの利用を前提に設計すると変更管理が容易です。後方互換(Backward)を基本とし、列追加を優先、既存フィールドの削除/型変更は避けます。JDBC/CDCではDDL差分やNULL可否も考慮してください。

  • 重複の前提: at-least-onceにより同一レコードの重複が生じ得る。キー+値のバージョンやソース側の増分カラムで冪等消込できる設計が望ましい。
  • パーティション数: 消費スループットと順序要件のバランスで決定。エンティティ単位の直列性が必要な範囲がパーティション境界。
  • SMTの活用: キー抽出、ヘッダ付与、ルーティング、フィールドマスクなどはSMTで軽量実装。

JDBC Source Connectorの例(増分同期)

{
  "name": "jdbc-users-source",
  "config": {
    "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
    "connection.url": "jdbc:postgresql://db:5432/app",
    "connection.user": "appuser",
    "connection.password": "${file:/opt/connect/secrets.properties:db.password}",
    "mode": "timestamp+incrementing",
    "incrementing.column.name": "id",
    "timestamp.column.name": "updated_at",
    "table.whitelist": "public.users",
    "topic.prefix": "src.postgres.",
    "poll.interval.ms": "10000",
    "batch.max.rows": "5000",
    "value.converter": "io.confluent.connect.avro.AvroConverter",
    "value.converter.schema.registry.url": "http://schema-registry:8081",
    "key.converter": "org.apache.kafka.connect.storage.StringConverter",
    "producer.override.acks": "all",
    "producer.override.enable.idempotence": "true",
    "errors.tolerance": "all",
    "errors.deadletterqueue.topic.name": "_dlq.src.postgres.users",
    "errors.deadletterqueue.context.headers.enable": "true"
  }
}

信頼性・配信セマンティクス・エラーハンドリング

Kafka ConnectのSourceは一般に少なくとも1回の配信です。送信成功後にオフセットをコミットするため、クラッシュ復旧時に重複送信が起こり得ます。冪等なキー設計、下流での重複排除、またはソース側の変更検知列を活用して整合性を保ちます。

エラー処理は段階的に設計します。レコード変換やスキーマ不一致はDLQへ退避し、運用で是正。リトライ可能な一時エラーはバックオフ付きで再試行し、恒久エラーはDLQ+アラートに切り分けます。

  • 代表的な設定: errors.tolerance=all, errors.deadletterqueue.topic.name, errors.retry.timeout, errors.retry.delay.max.ms
  • Producer側の堅牢化: acks=all, enable.idempotence=true, delivery.timeout.msの見直し、圧縮(compression.type)でスループット/コスト最適化
  • 内部トピックはmin.insync.replicasを明示し、ブローカー障害時の耐性を確保

デプロイ方式の選択と運用: スタンドアロン vs 分散

開発/検証ではスタンドアロン、本番は分散モードが基本です。分散モードではConnector設定は内部トピックで共有され、Worker間で自動的にTasksが再割当てされます。更新やスケールアウトはREST APIからオンラインで実施できます。

独自Producerを実装すべきケースは限定的です。コネクタでサポートしないAPI仕様や厳格な独自トランザクション制御が必要な場合に検討します。まずは既存コネクタとSMTの組合せで要件充足を試みます。

  • ローリング更新: Workerを1台ずつ再起動。再平衡の影響最小化へtasks.maxやクールダウンを調整
  • スケール: Worker台数とtasks.maxを増やす前に、トピックのパーティション数と外部ソースの分割戦略を見直す
  • 監視: コネクタ/タスクの状態、送信レート、エラーレート、DLQ滞留、再平衡頻度、内部トピックのレプリケーション
方式適用規模/可用性再平衡・横展開管理コスト/ユースケース
スタンドアロン小規模/単機(冗長性なし)再平衡なし。単一プロセス内で実行最小コスト。開発/PoC/単発取り込み向け
分散モード中〜大規模/高可用(複数Worker)自動再平衡でTasks再割当。ローリング更新可本番標準。複数コネクタの集中管理
独自Producer実装要件依存/可用性は自前実装アプリ側でスケール管理コネクタ非対応APIや厳格な独自制御が必要な場合のみ

セキュリティと性能チューニング

Kafka接続はSASL/SSLで保護し、最小権限のACLを設定します。外部ソースの認証情報はConfig Providerで間接参照(例: ファイル/環境変数/外部シークレットストア)し、平文を避けます。監査上、DLQや内部トピックも含めてデータ分類を行ってください。

性能はエンド・ツー・エンド最適化が必要です。タスク並列、外部ソースのページング/スキャン戦略、Connector固有のpoll/batch設定、Producerのバッチ/遅延、Kafkaトピックのパーティション/圧縮、ネットワークMTU等を一貫して調整します。

  • 認可: コネクタが書き込む全トピックに対しWrite/Create/DescribeConfigs等、必要最小限のACLを付与
  • Config Provider: ${file:...}, ${env:...} などでシークレット値を参照。リロードポリシーと権限を管理
  • チューニング例: poll.interval.ms、batch.max.rows(コネクタ依存)、producer.override.linger.ms/ batch.size、圧縮率とCPUのトレードオフ

問題で確認

CCDAK

問題 1

社内PostgreSQLのusersテーブルをKafkaに継続取り込みしたい。初回フル取得後は更新のみ取り込み、整合性を保ちつつ重複は下流で吸収可能。コネクタで最も適切な設定はどれか。

  1. JDBC Source Connectorでmode=timestamp+incrementingを用い、incrementing/timestamp列を指定し、acks=allとidempotenceを有効化する
  2. File Source ConnectorでCSVをtailし、定期的にファイルをローテーションする
  3. Sink ConnectorでKafkaからDBへ流し、変更はDBトリガーでKafkaに戻す
  4. MirrorMakerを使ってDBからKafkaへ直接レプリケーションする

正解: A

RDBからKafkaへの取り込みにはJDBC Sourceが適し、mode=timestamp+incrementingで初回フル+増分を安全に扱える。acks=allとidempotenceにより重複発生時の影響を最小化できる。他の選択肢は要件に合致しない。

よくある質問

Source Connectorは正確に一度(exactly-once)の保証がありますか?

一般には少なくとも1回(at-least-once)です。重複は発生し得るため、キー設計や下流での重複排除を前提にします。一部の条件下で重複を最小化する手段(冪等プロデュースやトランザクション活用)はありますが、エンドツーエンドの厳密な意味でのexactly-onceはソース特性やコネクタ実装に依存します。

スループットが頭打ちです。最初に確認すべきポイントは?

tasks.maxとKafkaのパーティション数のバランス、外部ソース側の分割可能性(テーブルシャーディング/並列スキャン)、poll.interval.msやbatch設定、Producerのlinger.ms/batch.size/圧縮、ネットワーク/ディスクIO、内部トピックのブローカー健全性を順に確認します。

コネクタ設定の更新はどう適用されますか?停止が必要ですか?

分散モードではREST APIで設定をPUT/POSTすると、Connectクラスタが設定を内部トピックに反映し、必要に応じてTasksを再起動・再割当します。通常は停止不要ですが、一部の設定はタスク再起動を伴うため瞬間的な再平衡が発生します。

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

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.