๋ฉ์์ง์ ํค = ํํฐ์ ํค ๊ฐ์ง๊ณ ์คํธ๋ฆผ-์คํธ๋ฆผ ์กฐ์ธํ๋ ๊ฒ์ ๋ง์ด ๋ดค๋๋ฐโฆ์๊ตฌ์ฌํญ์ด ํญ์ ๊ทธ๋ฐ ๊ฒ์ด ์๋์ด์ ํค๊ฐ ์๋ ํ๋ ๊ฐ์ง๊ณ ์กฐ์ธํด์ผํ ๊ฒฝ์ฐ๋ ์๋ค. ์ด๋ฐ๊ฑฐ๋ฅผ ๋ญ๋ผ๊ณ ๋ถ๋ฅด๋์ง๋ฅผ ๋ชจ๋ฅด๋ค๊ฐ ์ด๋ฐ ๊ธฐ๋ฅ์ Foreign-Key Join์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
์์์ ์ด๋ฉ์ผ, ์ด๋ฆ ๋ฑ์ ์ ๋ ฅํด์ผ ๋ณผ ์ ์์ง๋ง, ์ฌ๋ผ์ด๋๋ง ๋ด๋ ํฐ ๋ฌด๋ฆฌ๋ ์๋ค. ์นดํ์นด 2.4๋ถํฐ ์๋ค๋๊น ์ง๊ธ ์ธ ์ ์๋ ๊ธฐ๋ฅ์ด๊ธฐ๋ ํ๋ค (KSQL์์๋ ์์ง ์ง์ํ์ง ์๋๋ค https://github.com/confluentinc/ksql/issues/4424)
์ข ์ฐ๋ ค?๊ฐ ๋๋ ๊ฒ์ ๋น์ฉ์ด๋ค. Ktable - Ktable์ joinํ๋ฉด ์๋ฅผ ๋ค์ด์ left join์ด๋ผ๊ณ ํ๋ฉด ์ผ์ชฝ ํ ์ด๋ธ ํฌ๊ธฐ ๋งํผ rocksdb ์คํ ๋ฆฌ์ง๊ฐ ํ์ํ๊ณ , ์นดํ์นด ๋ธ๋ก์ปค ์คํ ๋ฆฌ์ง๋ ํ์ํ๋ค (Log compaction์ด ๋๋ ์ด์จ๋ ํค์ ๊ฐฏ์์ ๋น๋กํด์ ๊ณต๊ฐ์ด ํ์ํ๋ค sizing ๋ฌธ์ ์ฐธ์กฐ). ๊ฒ๋ค๊ฐ ๋น์ฐํ ๊ธฐ์กด์ ์๋ Ktable - ktable๋ค๋ ๊ณต๊ฐ์ ์ฐจ์งํ๋ค. ์๋๋ถํฐ ์นดํ์นด๋ฅผ confluent์์ ๋ฐ๋ฏ์ด source of truth๋ก ์ผ๊ณ , ์คํธ๋ฆผ์ ๋ง์ด ์ผ์ผ๋ฉด ๋ณ ์๊ด์ด ์๊ฒ ์ง๋ง, ๋จ์ํ ๋ฉ์์ง ์ ์ก ๋ ์ด์ด๋ก๋ง ์๊ฐ์ ํ๋ค๋ฉด ํฌ์๋ฅผ ํจ์ฌ ๋๋ ค์ผ ํ ๊ฒ์ด๋ค. ์ฌ์ค Stateful ์คํธ๋ฆฌ๋ฐ์ด ์ฉ๋ ์ฐจ์งํ๋ ๊ฒ์ ๋น์ฐํ ๊ฒ์ด๊ณ , ์ด๊ฒ ์๊น์ฐ๋ฉด ๊ทธ๋ฅ ์ฝ์ ๋ joinํ๋ฉด ๋๋ค.
์ฐธ๊ณ ๋ก Flink์์๋ ์ด๊ฑธ regular join์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค (PK, foreignkey ๊ตฌ๋ถ์ ์ ํจ) https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/streaming/joins.html#regular-joins https://stackoverflow.com/questions/57118053/flink-dynamic-table-vs-kafka-stream-ktable