Kafkaストリームライブラリで、KTableとGlobalKTableの違いを知りたい。
また、KStreamクラスには、2つのメソッドleftJoin()
とouterJoin()
があります。これら2つの方法の違いは何ですか?
KStream.leftJoin を読みましたが、正確な違いを見つけることができませんでした。
KTable
は、実行中のすべてのKafka Streamsインスタンス間でデータを分割しますが、GlobalKTable
は各インスタンスのすべてのデータの完全なコピーを保持します。GlobalKTable
の欠点は、明らかにより多くのメモリが必要になることです。利点は、ストリームからの非キー属性を使用してKStream-GlobalKTable結合を実行できること。結合のKStream-KTable結合と非キーストリーム属性の場合、結合属性を抽出してそれをキーとして設定することによってのみ可能です。結合を実行する前-これにより、結合を計算する前にストリームの再分割ステップが発生します。
ただし、意味上の違いもあることに注意してください。ストリームテーブル結合の場合、Kafkaストリームは、レコードのタイムスタンプに基づいてレコード処理を整列します。したがって、テーブルの更新は、 GlobalKTable
の場合、時間同期がないため、GlobalKTable
に更新され、ストリームレコードの処理から完全に切り離されます(そのため、セマンティクスが弱くなります)。
詳細は KIP-99:Add Global Tables to Kafka Streams を参照してください。
左結合と外部結合について:データベースでは、それぞれ左外部結合と完全外部結合に似ています。
左外部結合の場合、左側の結合に一致がない場合、右入力ストリームのデータが「失われる」ことがあります。
(完全)外部結合の場合、データはドロップされず、両方のストリームの各入力レコードが結果ストリームに含まれます。