2017-09-11 10 views
0

私はConnect APIのKafkaドキュメントを読んで、問題のドメインに関連付けることを試みていました。私はすべての更新/挿入/削除で同期する必要がある共通のテーブルを持つ複数のデータベースがあります。 exmapleはこれです:データベーステーブルを同期させるためのApache Kafka Connect/Streams API

1)誰かがDB1でテーブル「order_history」を更新 - 私は

2)誰かが「PURCHASE_ORDER」にレコードを挿入、更新はDB2/DB3などに伝達することにしたい - 私が欲しいですDB2/DB3などと同じ挿入が行われるようにインサートをDB2/DB3などに伝えることができます。

3)テーブルはすべてのデータベースにあります。

これらは、データベース全体ではなく、特定のテーブルセットでのみ実行されます。私は接続APIドキュメントから理解することは、私は、次を提供する必要があるということです。

1)ソースコネクタ輸入データ - SQL /ファイルシステムからカフカのトピックに沈むコネクタはデータをエクスポート

2) - カフカのトピックからにしかし、それでは、Connect APIにはまだトピックに書き込み/読み込みが含まれているため、複数のデータベーステーブルを挿入/更新/削除に同期させることがどのように関係するかを理解しようとしています。必然的に私のユースケースです。私はKafkaストリームについても見てきましたが、データ集約やカウンター管理については効率的なツールのように思えます。

私の前提が正しいかどうかは誰でも説明できますが、Streams/Connect APIをまだ探索する必要がありますか?

よろしく、

+0

あなたは実際にどのような問題を解決していますか? 「更新/挿入/削除を同期する必要がある」ということはたくさんあります:)まっすぐなテーブル複製が必要な場合は、DB固有のオファリング(Oracle GoldenGateなど)があります。これが共有して伝播したいアプリケーションデータであれば、カフカが助けになるかもしれません。あなたは何かをやってほしいと思うものを記述し、何かをやりたいのであれば、* how *を手助けすることができます:) –

+0

@RobinMoffatt質問から、データベースへの挿入/更新/削除テーブル)は非常に自明です。 dbテーブルには、アプリケーションデータとその他のメタデータを混在させることができます。私はそれがあなたに合っているかどうか質問を更新しました – ha9u63ar

+0

私のコメントを投稿してからあなたの質問が変わりました:)質問をしましょう:なぜ標準のDB /テーブル複製ツールの代わりにKafkaを使用したいのですか?これらは同じDB、または異なる技術ですか? –

答えて

1

はい、あなたが別のデータベースから変更を適用するにはカフカConnectを使用することができます。通常、CDCツールを使用してソースデータベースのREDO /トランザクションログから直接イベントを取得し、各イベントをKafkaトピックにプッシュします。たとえば、Oracle GoldenGateまたはDebeziumプロジェクトがその例です。

Kafkaのトピックでは、Kafka ConnectのJDBCシンクを使用して、これらの変更をターゲットデータベースにプッシュできます。

これは、CDCレコードに操作を示す列(削除など)があり、行がになるため、ターゲット内で直接削除をミラー化する必要がある場合があります。この値でターゲットにを挿入しました。

しかし、文字通りあるDBから別のDBにテーブルセットをミラーリングする場合は、Kafkaではなくデータベース複製ツールを検討する必要があります。

カフカは、ある場所から別の場所にイベントをストリーミングしたい場合(削除イベントを保存する場合は、ターゲットから削除する場合)、同じデータを使用して他のターゲットに着陸するオプションを使用するか、他の直接アプリケーションを駆動します。これは、Kafka Streams、Kafka Consumer、またはKafkaと統合されている他の多数のテクノロジーやツールのいずれかである可能性があります。

Kafkaストリームに関しては、ソースデータベースから取得したデータに対してジョイン/フィルタリング/アグリゲーションなどの処理を行う場合に便利です。Kafka Streamsで直接Javaコードを記述するだけでなく、Kafkaの上にSQLのようなインターフェイスを使用するオプションが用意されています(KSQL from Confluent)。

+0

OK - DB1、DB2、DB3のイベント(挿入/更新/削除)が同じテーブル(例:table1')で発生している場合 - そして、もし私が注文を維持したいのであれば、Kafka Connectはそうするか、私はプレーンクライアントAPIを使用する必要がありますか?また、デベジウムはカフカほど成熟していないので解決策ではありません。 – ha9u63ar

+0

はいKafka(したがってKafka Connect)は、パーティション内での注文を保証します。 Debeziumであなたの懸念は何ですか?すでに多くの場所でプロダクションで使用されています。 –

+0

SQL Serverコネクタが必要ですが、SQL Serverが最も信頼性が高く安全なエンタープライズソリューションであるにもかかわらず、誰もそれを提供していません。私の問題は、このConnect APIは基本的なクライアントAPIほど単純化されておらず、開発者に必要とされない率直に多くのコードを書くように求めていることです。これはクリチズムではなく、事実です。テーブルのリスト、ターゲットJDBC URL、操作タイプ(CRUD)のみを提供し、カフカはこれを行うべきです - 他に定型的なコーディングがあってはいけません。現在、それはあまりにも多くの手抜きを必要とします。これが実行可能な回避策があるかどうかを知りたい理由です。 – ha9u63ar

関連する問題