web-dev-qa-db-ja.com

KTableとGlobalKTable、および左のJoin()と外部のJoin()の違いは何ですか?

Kafkaストリームライブラリで、KTableとGlobalKTableの違いを知りたい。

また、KStreamクラスには、2つのメソッドleftJoin()outerJoin()があります。これら2つの方法の違いは何ですか?

KStream.leftJoin を読みましたが、正確な違いを見つけることができませんでした。

13
Ajit Dongre

KTable VS GlobalKTable

KTableは、実行中のすべてのKafka Streamsインスタンス間でデータを分割しますが、GlobalKTableは各インスタンスのすべてのデータの完全なコピーを保持します。GlobalKTableの欠点は、明らかにより多くのメモリが必要になることです。利点は、ストリームからの非キー属性を使用してKStream-GlobalKTable結合を実行できること。結合のKStream-KTable結合と非キーストリーム属性の場合、結合属性を抽出してそれをキーとして設定することによってのみ可能です。結合を実行する前-これにより、結合を計算する前にストリームの再分割ステップが発生します。

ただし、意味上の違いもあることに注意してください。ストリームテーブル結合の場合、Kafkaストリームは、レコードのタイムスタンプに基づいてレコード処理を整列します。したがって、テーブルの更新は、 GlobalKTableの場合、時間同期がないため、GlobalKTableに更新され、ストリームレコードの処理から完全に切り離されます(そのため、セマンティクスが弱くなります)。

詳細は KIP-99:Add Global Tables to Kafka Streams を参照してください。

leftJoin()VS outerJoin()

左結合と外部結合について:データベースでは、それぞれ左外部結合と完全外部結合に似ています。

左外部結合の場合、左側の結合に一致がない場合、右入力ストリームのデータが「失われる」ことがあります。

(完全)外部結合の場合、データはドロップされず、両方のストリームの各入力レコードが結果ストリームに含まれます。

26
Matthias J. Sax