web-dev-qa-db-ja.com

複数のKafkaトピックに参加する方法は?

ので、私は持っています...

  • 一般的なアプリケーションログ(log4j)がある最初のトピック。 HTTP APIリクエスト/レスポンス、警告、例外などを保存します。1つの論理ビジネスリクエストに複数のログを関連付けることができます。 (これらのログは互いに数秒以内に発生します)
  • 2番目のトピックには、他のサービスがアクションを実行する上記のビジネスリクエストからのコマンドが含まれています。 (コマンドも互いに数秒以内に発生しますが、元の要求から数分かかる場合があります)
  • 3番目のトピックには、これらの他のサービスのアクションから生成されたイベントが含まれています。 (ほとんどのイベントは数秒で完了しますが、受信されるまでに最大3〜5日かかる場合があります)

したがって、単一の論理ビジネスリクエストには、マイクロサービスが相互に渡すuuidによって関連付けられた複数のログ、コマンド、およびイベントを含めることができます。

では、3つのトピックを読み、それらをすべて1つのjsonドキュメントとして結合し、Elasticsearchなどにダンプするために使用できるテクノロジー/パターンにはどのようなものがありますか?

ストリーミング?

5
user432024

Kafka Streams、またはKSQLを使用して、これを実現できます。どちらを使用するかは、Javaの好み/経験、および実行する結合の詳細によって異なります。

[〜#〜] ksql [〜#〜] はApache KafkaのSQLストリーミングエンジンであり、SQLだけで、Kafkaトピックに対してストリーム処理アプリケーションを宣言できます。トピックをフィルタリング、強化、および集約できます。現在、ストリームテーブル結合のみがサポートされています。例は この記事はこちら にあります。

Kafka Streams API はApache Kafkaの一部であり、ApacheKafkaでデータのストリーム処理を行うために使用できるJavaライブラリです。これが実際のKSQLです。に基づいて構築されており、 stream-stream joins などの処理の柔軟性が向上しています。

5
Robin Moffatt

KSQLを使用してストリームに参加できます。

  1. KSQLテーブル/ストリームには2つの構成があります。
  2. 現在、結合はストリームとテーブルでサポートされています。だから、どれが何に適しているかを特定する必要がありますか?
  3. 結合のためにウィンドウ処理を行う必要はありません。

KSQLを使用する利点。

  1. KSQLは簡単にセットアップできます。
  2. KSQLは、データをすばやくクエリするのに役立つSQL言語です。

欠点。

  1. 生産準備は整っていませんが、2018年4月にリリースが予定されています。
  2. 現在は少しバグがありますが、数か月で確実に改善されます。

ご覧ください。

https://github.com/confluentinc/ksql

2
Zamir Arif