๐ Connect์ Connector ์ฐจ์ด
Apache Kafka์์๋ Kafka Connect๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฐ์ดํฐ ์ด๋์ ์ํ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด ๋๊ตฌ์ ํต์ฌ ๊ตฌ์ฑ ์์๋ Connectors(์ปค๋ฅํฐ)์ ๋๋ค.
๐ Kafka ์ Kafka Connector ์ฐจ์ด
Kafka
๋ชฉ์ : ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ๊ณ , ์ค์๊ฐ์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ, ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ํ๋ซํผ์
๋๋ค. ๋ฐ์ดํฐ์ Pub/Sub(๋ฐํ/๊ตฌ๋
)์ ์ค์ฌ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
์ญํ : ๋ฉ์์ง ํ๋ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ์ญํ ์ ์ํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ๊ณ , ๋ค์ํ ์๋น์์๊ฒ ์ค์๊ฐ์ผ๋ก ์ ๋ฌํฉ๋๋ค.
์ฌ์ฉ ์ฌ๋ก: ๋๊ท๋ชจ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ, ๋ก๊ทธ ์ฒ๋ฆฌ, ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ
์ฒ, ๋ฐ์ดํฐ ์์ง ๋ฐ ๋ถ์ ๋ฑ์ ์ฌ์ฉ๋ฉ๋๋ค.
๊ตฌ์ฑ ์์: ๋ธ๋ก์ปค, ํ ํฝ, ํํฐ์
, ํ๋ก๋์, ์ปจ์๋จธ ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
ํ์ฅ์ฑ: ๋๊ท๋ชจ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ์ ๋ํ ๋์ ํ์ฅ์ฑ๊ณผ ์ฒ๋ฆฌ๋์ ์ ๊ณตํฉ๋๋ค.
Kafka Connector
๋ชฉ์ : Kafka์ ์ธ๋ถ ์์คํ
๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ด๋์ํค๋ ๋๊ตฌ๋ก, ๋ฐ์ดํฐ์ ์ด์ , ํธํ์ฑ ์ ์ง, ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ ๋ฑ์ ๋ด๋นํฉ๋๋ค.
์ญํ : ์ธ๋ถ ์์คํ
๊ณผ์ ์ฐ๋์ ๋ด๋นํ์ฌ ๋ฐ์ดํฐ๋ฅผ Kafka๋ก ๊ฐ์ ธ์ค๊ฑฐ๋ Kafka์์ ๋ค๋ฅธ ์์คํ
์ผ๋ก ๋ณด๋ด๋ ์์
์ ์ฒ๋ฆฌํฉ๋๋ค.
์ฌ์ฉ ์ฌ๋ก: ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ํ์ผ ์์คํ
, ๋ฉ์์ง ์์คํ
๋ฑ๊ณผ์ ํตํฉ, ๋ฐ์ดํฐ์ ์ด์ ๊ณผ ํธํ์ฑ ์ ์ง, ๋๋ ๋ฐ์ดํฐ์ ์คํธ๋ฆฌ๋ฐ ๋ฑ์ ์ฌ์ฉ๋ฉ๋๋ค.
๊ตฌ์ฑ ์์: Source Connector(๋ฐ์ดํฐ๋ฅผ Kafka๋ก ๊ฐ์ ธ์ค๋), Sink Connector(๋ฐ์ดํฐ๋ฅผ Kafka์์ ๋ค๋ฅธ ์์คํ
์ผ๋ก ๋ณด๋ด๋)๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
ํ์ฅ์ฑ: ๋ค์ํ ์ธ๋ถ ์์คํ
๊ณผ์ ํตํฉ์ ์ง์ํ์ฌ ๋ฐ์ดํฐ ์ด์ ๋ฐ ํธํ์ฑ ์ ์ง๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๐ฉ ๋์ ๊ฒฝํ๋ด..
kafka๋ ๋ฐ์ดํฐ๋ง ์ ์ก(save๋ฐ๋ก ์ฝ๋ ๊ตฌํ ํ์)ํ๊ณ
kafka connect๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ฉด db์ save๊น์ง ํ๋ฒ์ ๋๋ค.
๐ Kafka Connector ์ฅ๋จ์
์ฅ์
1. DB๊ฐ ๋ฌ๋ผ๋ ์ฑํฌ ๊ฐ๋ฅ(์ด๊ธฐ์ข db) - Kafka Connector๋ง์ด ์ฝ๋์์ด ๊ฐ๋ฅ
2. ๋ง์ดํฌ๋ก์๋น์คํ๊ฒฝ์์ ์๋ก ๋ค๋ฅธ db์ ์ฑํฌ๋ฅผ ์์ฝ๊ฒ(์ฝ๋์์ด) ๋๋ถ๋ถ ๋ณด์ฅ ๊ฐ๋ฅ
3. Event Sourcing, CQRS, Saga ํจํด ๋ฑ์ ์ฌ์ฉํ์ง ์๊ณ ๋ ์ด๋์ ๋ ์ฑํฌ๊ฐ ๋ณด์ฅ๋จ
๋จ์
1. ์๋ฒํ๋ ๋ ๋๋ ค์ผ ๋๋ค.
Kafka Connect์๋ฒ๊ฐ ๋ด๋ ค๊ฐ ๋ ์ฐ๋๋์ด ์๋ db ๋ชจ๋ global lock์ด ๊ฑธ๋ฆฐ๋ค.(connect ์ฌ๊ธฐ๋ํ๋ ค๋ฉด ์ ์ ๊ฐ ์๋ ์๋ฒฝ์ ํ๋ค.)
2. ์ฃผ๊ธฐ์ ์ผ๋ก db๊ฐ ๋ณ๋์ด ์๋์ง ํ์ธํ๊ธฐ ์ํ ์ฟผ๋ฆฌ๊ฐ ๊ณ์ ๋๊ฐ๊ณ ์์(jdbc Connector)
์ด๊ฑฐ ๋ง์ผ๋ ค๋ฉด db debezium connector๋ฅผ ์ฌ์ฉํ๋ฉด ์ฟผ๋ฆฌ ์๋๊ฐ๋ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฅํ๊ธด ํจ
3. DB ์ปค์คํ ์ด ์ด๋ ต๋ค.
A_DB์ B_DB๊ฐ Connect๋ก ์ฐ๊ฒฐ์ด ๋์ด ์๋๋ฐ
A_DB์ saveํ ์, B_DB์ saveํ๋ฉด์ ๋ค๋ฅธ ํ๋์๋ -1์ ํ๊ณ ์ถ์ ๋ ์๋จ.
์๋ ๋์ด ์ด๋ฏธ ์ฑํฌ ๋ง์์ ํ๋๋ผ๊ณ ๋ด๋ ๋ฌด๋ฐฉํ๊ธฐ ๋๋ฌธ..
๐ (๊ฐ์์ง๋ฌธ) ์ถ๊ฐ๋ก ๊ถ๊ธํ ์
์ง๋ฌธ1.
๊ทธ๋ฌ๋ฉด kafka connect ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ง์ดํฌ๋ก์๋น์ค๋ค์์ ์ฌ์ฉ๋๋ DB๊ฐ ๋ค์ํ ๊ฒฝ์ฐ์
kafka connect ๋ฅผ ํตํด์ ํ๋ ์ DB๋ ๋ค์ํ ์ข
๋ฅ์ ๋ฐ์ดํฐ ์ ์ฅ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์๋์ผ๋ก ๋ณด๋ด๊ธฐ ์ํจ์ธ ๊ฑด๊ฐ์??
๋ต๋ณ
Kafka Connect๋ ๋ง์ดํฌ๋ก์๋น์ค๋ค๊ฐ์ ๋ฐ์ดํฐ ๊ณต์ ๋ฟ๋ง ์๋๋ผ, Kafka์ Topic์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ๋ฆฌ์์ค๋ค๊ณผ ์ฐ๊ฒฐ, ๊ณต์ ํด ์ฃผ๋ Platform์ ๋๋ค. ๋ฐ๋ผ์, DB๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์๋ ์๊ณ , ๋ค๋ฅธ ๋ฆฌ์์ค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์๋ ์์ต๋๋ค.
์ง๋ฌธ2
DB๋ฅผ ํ๊ฐ๋ง ์ฌ์ฉํ๋ค๋ฉด kafka connect ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ kafka๋ง ์ฌ์ฉํด๋ ๋๋๊ฑด๊ฐ์??
์ ํํ ์ด๋จ ๋ ์ด๋ค๊ฑธ ์ฌ์ฉํด์ผํ๋์ง ๊ถ๊ธํฉ๋๋ค!!
๋ต๋ณ
DB๋ฅผ ํ๋๋ง์ ์ฌ์ฉํด์ Shared Database์ ๊ฐ๋ ์ผ๋ก ์ฌ๋ฌ ๋ง์ดํฌ๋ก์๋น์ค์์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ๊ทธ๋ด ๊ฒฝ์ฐ์๋ Kafka๋ฅผ ๋นผ๊ณ ์ง์ DB์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋, ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ๋ค๋ง, ํธ๋์ญ์ ์ ์์ ๋ฐ ๋ฐ์ดํฐ๊ฐ ๋ฐ์ํ ์ด๋ฒคํธ๋ค์ ๊ธฐ๋ก์ ์ํด์ Kafka์ ๊ฐ์ ๋ฉ์์ง ํ์ ์๋น์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ์์์๋ ๋ง์ดํฌ๋ก์๋น์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ ํ๋์ ๋ฐฉ๋ฒ์ผ๋ก Kafka Connect๋ฅผ ํตํ ๋๊ธฐํ๋ฅผ ์๊ฐํ์๊ณ , ์ด์ธ์๋ Event Sourcing, CQRS, Saga ํจํด ๋ฑ์ด ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ถ๋ถ์ ๋ํด์๋ ํ์ ๊ฐ์๋ก ์ค๋น์ค์ ๋๋ค.
์ง๋ฌธ3.
feign client ๋ rest api ๋ฅผ ํตํ ๋๊ธฐ ํต์ ์ด๊ณ
kafka ๋ ๊ตฌ๋
๋ฐฉ์์ ํตํ ๋น๋๊ธฐ ํต์ ์ผ๋ก ์ดํดํ๊ณ ์์ต๋๋ค.
feign client ์ kafka ๋์ค์ ์ด๋จ ๋ ์ด๋ค ๋ฐฉ์์ ์ฌ์ฉํ๋์ง ์ ์๋ฟ์ง๊ฐ ์์์ ์ ๋
๋ณดํต ๋ง์ดํฌ๋ก์๋น์ค๋ค ๋ผ๋ฆฌ์ ํต์ ์ feign client์ผ๋ก ์ฒ๋ฆฌํ๊ณ
์ฃผ๋ฌธํ๋ฉด ์ฌ๊ณ ๊ฐ ๋น ์ ธ์ผํ๋ ๋ฐ์ดํฐ ๋๊ธฐํ ์ฒ๋ฆฌ๊ฐ์๊ฑด kafka ๋ก ํ๋ค๊ณ ์ดํดํ๊ณ ์์ต๋๋ค.
ํน์ ๋ชจ๋ ์ฒ๋ฆฌ๋ฅผ feign client ๋ kafka ๋์ค ํ๋๋ง ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์กด์ฌํ๋๊ฑด๊ฐ์??
๋ต๋ณ
Feign Client๋ ๋ง์ดํฌ๋ก์๋น์ค๊ฐ์ ํต์ ์ ์ถ์ํ ์์ผ๋์ ๊ฐ์ฒด๋ผ๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค. ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ์ ํต์ ์ ์ํด ๋ค๋ฅธ ์๋น์ค์ ์ฃผ์๋ ํฌํธ ๋ฑ์ ์ ๋ณด๋ฅผ ์ง์ ์ ๋ ฅํ์ง ์๊ณ , ์๋น์ค์ ์ด๋ฆ(์์ด๋)๋ฅผ ์ด์ฉํ์ฌ ํต์ ํ ์ ์๋๋ก ํด ์ค๋๋ค.
Kafka๋ ๋ง์ดํฌ๋ก์๋น์ค๊ฐ์ ํต์ ์ ์ฒ๋ฆฌํ๋ค๊ธฐ ๋ณด๋ค๋ ๋ฐ์ดํฐ๋ฅผ Kafka์ ์ ์ฅ์(Topic)์ ์์ฐจ์ ์ผ๋ก ์ ์ฅํด ์ฃผ๋ ๋ชฉ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
2๊ฐ์ ์ฌ์ฉ ์ฉ๋๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, ๋ ์ค ํ๋๋ง ์ฌ์ฉํ๋ค๋ ๊ฒ๋ณด๋ค๋ Spring Boot + Spring Cloud๋ก ์์ฑ๋ ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ์ ํต์ ์ ์ํด RestTemplate ๋๋ Feign Client๋ฅผ ์ฌ์ฉํ๊ณ , ๊ทธ ์ธ ๋ฐ์ดํฐ๋ ์ด๋ฒคํธ ๋ฑ๊ณผ ๊ฐ์ ๋ค์ํ ์ ๋ณด๋ฅผ ๋ค๋ฅธ ์๋น์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ ์ฅํ๊ณ ๊ฐ์ ธ์ค๋ ๊ธฐ์ ์ ์ํด์ Kafka๋ฅผ ์ฌ์ฉํ์ ๋ค๊ณ ๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.