๐ ํด๋น ํฌ์คํ ์ YouTube GeekNews ์ฑ๋์ ๋ฐ์ดํฐ ์ธํ๋ผ ๊ฐ์ ๋ด์ฉ์ ๊ธฐ๋ฐํด ์ ๊ฐ ์ฌ๊ตฌ์ฑํ์ฌ ์์ฑํจ์ ์๋ ค๋๋ฆฝ๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ ๋ฐ์ดํฐ ์ธํ๋ผ ๊ตฌ์กฐ์์ ์ฃผ๋ก ETL ๋๊ตฌ๋ฅผ ๋ค๋ฃจ๋ Ingestion & Transformation์ ํด๋นํ๋ ๋ ๋ค๋ฅธ ์์ ์ค ํ๋์ธ Event Streaming์ ๋ํด ์์๋ณด๋ ค ํ๋ค.
์ฐ์ Event Streaming ์ด๋ ๋ฌด์์ผ๊น? ์ํค๋ฐฑ๊ณผ์ ๋ฐ๋ฅด๋ฉด ์ ํํ Event Stream Processing์ด๋, ์ด๋ฒคํธ ์ค์ฌ ์ ๋ณด์์คํ ์ ๊ตฌ์ถ์ ์ง์ํ๋๋ก ์ค๊ณ๋ ์ผ๋ จ์ ๊ธฐ์ ์ด๋ผ๊ณ ์ ์ํ๋ค. ๊ฒฐ๊ตญ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ์ ์๋ฏธํ๋ค. ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ์ด ํ์ํ ๊ฒ์ ์๋์ง๋ง ๊ธ์ต๊ธฐ๊ด์ด ์ฃผ์์ ์์ฅ ๋ณํ๋ฅผ ๋ชจ๋ํฐ๋งํ๋ค๊ฑฐ๋ ์ด์ก์ฐจ๋, ๋๊ธฐ๊ณ์ ๋ถ์ด์๋ ์ผ์์ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ์ฒ๋ฆฌํด ๊ณ ์ฅ ์ฌ๋ถ๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ๊ฒ๊ณผ ๊ฐ์ด ํน์ ์ํฉ์ ์ด๋ ๊ฒ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ์ผ๋ก ์ฒ๋ฆฌ๋์ด์ผ ํ๋ ๋ฐ์ดํฐ๋ค์ด ๋ถ๋ช ์กด์ฌํ๋ค. ๋ฐ๋ผ์ ์ด๋ฒ ํฌ์คํ ์์ ์๊ฐํ Event Streaming๋ค์ ๋๊ตฌ๋ค์ ์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ๋ค์ด ์กด์ฌํ๋ ๋๊ตฌ๋ค์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ ์คํธ๋ฆฌ๋ฐ์ด ์ค์ํ ๊น? ๋ฐ๋ก ๋ฐ์ดํฐ ๊ฐ์ฉ์ฑ(Availability) ๋๋ฌธ์ด๋ค. ์ฆ, ์ธ์ , ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ ๋๊ฐ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋์ง๋ผ๋ ๋ฌธ์ ์ ๋ํด ์คํธ๋ฆฌ๋ฐ์ '๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ์์ '๋ถํฐ ์๊ฐ๊ณผ ์ฃผ์ฒด์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด์ ํฌ์คํ ์์ ๋ฐฐ์ด Apache Spark์๋ Spark Streaming ์ด๋ผ๋ ๊ธฐ๋ฅ์ด ์กด์ฌํ๋ค. ์ด๊ฒ๋ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฒ์ด ์๋๊ฐ? ์ ์ํ๊ฒ๋ ์๋๋ค. ์คํํฌ์์ ์ ๊ณตํ๋ Spark Streaming ์ ์ ํํ๊ฒ Batch ๊ธฐ๋ฐ ์คํธ๋ฆฌ๋ฐ์ด๋ค. Batch ์คํธ๋ฆฌ๋ฐ์ด๋, ์ผ์ ์๊ฐ ๋ฒ์ ๋ด์ ๋ฐ์ดํฐ ํฌ์ธํธ๋ค๋ง์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํ๋ค.(๋ง์น ๋จธ์ ๋ฌ๋์ ํ์ต์ํฌ ๋ Mini-batch๋ก ํ์ต์ํค๋ ๊ฒ์ฒ๋ผ ๋ง์ด๋ค!) ๋ฐ๋ผ์ ์ด๋ฌํ ํ๊ณ์ (?)์ผ๋ก ์ธํด ๋ฐ์ดํฐ ํ๋ ๋น ์ค์๊ฐ์ผ๋ก ์คํธ๋ฆฌ๋ฐํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ Spark๊ฐ ํ์ง ๋ชปํ๋ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ์ฆ, Event Streaming์ ํ ์ ์๊ฒ ๋์์ฃผ๋ ๋๊ตฌ๋ค์ ์๊ฐํ๋ ค ํ๋ค. ํ๋จ์ ์๋ฃ๋ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค Batch ๊ธฐ๋ฐ ์คํธ๋ฆฌ๋ฐ, ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ์ ๋น๊ตํ๋ ๊ทธ๋ํ์ด๋ค.
Kafka์ ์ปจ์ ์? Pub / Sub Messaging !
ํ์๋ ์์ ์ ์ ํฌ๋ธ์ Dev์์๋๊ป์ ์๊ฐํ์๋ Kafka ์์์ ํ๋ฒ ๋ณธ์ ์ด ์๋ค. ๋น์์๋ "์ด๊ฒ ๋์ฒด ๋ฌด์จ ๋ง์ด์ผ..?" ์ถ์๋๋ฐ ์ด๋ฒ์ ์ฝ๊ฐ์ ๊ณต๋ถ๋ฅผ ํด๋ณด๊ณ Kafka๊ฐ ์ด๋ค ๊ธฐ๋ฅ์ํ๊ณ ์ด๋ค ์ฅ์ ์ด ์๋์ง์ ๋ํด ์กฐ๊ธ์ ์๊ฒ ๋์๋ค. ์ต๊ทผ์ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ๊ธฐ๋ฅ์ด ํ์ํ ๋ง์ ๊ธฐ์ ๋ค์์ ๊ฑฐ์ ํ์ค์ผ๋ก ์ฌ์ฉ๋๊ณ ์๋ค๊ณ ํ๋ค. ๊ฒฐ๊ตญ ์ค์๊ฐ์ผ๋ก ์คํธ๋ฆฌ๋ฐ์ด ๋๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ฑ ๊ฐ๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๋๊ตฌ์ด์ ํ๋ ์์ํฌ(๋๋ ํ๋ซํผ)์ญํ ์ ํ๊ฒ ๋๋ค.
์ฐธ๊ณ ๋ก Kafka๋ Writing์ ์ต์ ํ๋ ์์คํ ์ด๋ผ ๋ถ๋ฆฐ๋ค. ์ด๋ฌํ ํน์ง์ผ๋ก ๋ถ๋ฆฌ๊ฒ ๋ ๊ณ๊ธฐ์ ๋ํด์๋ Kafka๋ฅผ ๋ง๋ ์ฌ๋์ด Kafka๋ก ์ด๋ฆ์ ์ง์ ์ด์ ์ ๊ด๋ จ๋์ด ์๋๋ฐ ๊ด์ฌ์ด ์๋ค๋ฉด ๊ฐ์๋ฅผ ๋ค์ด๋ณด์! Kafka๊ฐ ๊ธฐ์ ์ ์ผ๋ก Writing ์ด๋ผ๋ ํน์ง์ด ์๋ค๋ ๊ฒ์ ๋ํด์๋ ํ๋จ์์ ์์๋ณธ๋ค.
Kafka๋ Pub/Sub์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ Publishing/Subscribing Messaging ์ปจ์ ์ ๊ฐ๊ณ ์๋ค. ๊ทธ๋ฌ๋ฉด Kafka๋ฅผ ์ดํดํ๊ธฐ ์ํด์ Pub/Sub Messaging ๊ฐ๋ ์ ์ดํดํด๋ณด์.
์ฐ์ ์์ ๊ฐ์ด ๋ ๊ฐ์ ํ๋ก ํธ์๋ ์๋ฒ์์ ์ฌ์ฉ์๋ค์ ์งํ(๋ฉํธ๋ฆญ)์ ์์งํ๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๊ทธ๋ฐ๋ฐ ์ฐ๋ฆฌ๊ฐ ๋ฐ์ดํฐ ์ธํ๋ผ ๊ตฌ์กฐ์ ์ฒซ ๋ฒ์งธ ๊ตฌ์ฑ์์์ธ Sources๋ฅผ ์์๋ณผ ๋ ์ดํด๋ณด์๋ ๊ฒ์ฒ๋ผ ์งํ ๋ฐ์ดํฐ๊ฐ ๋ฐ์ํ๋ Sources๋ค์ ์ ๊ทธ๋ฆผ์ฒ๋ผ 2๊ฐ๋ง ์๋ ๊ฒ์ด ์๋ ์ ๋ง ๋ค์ํ ์์ค๋ค๋ก๋ถํฐ ์งํ ๋ฐ์ดํฐ๋ค์ด ๋ฐ์ํ๋ค.
์ ๊ทธ๋ฆผ์ฒ๋ผ ๋ค์ํ ์์ค๋ค๋ก๋ถํฐ ์งํ ๋ฐ์ดํฐ๊ฐ ๋ฐ์ํ๊ณ ๊ฐ ์งํ์ ๋ง๊ฒ ์งํ๋ฅผ ๋ณด์ฌ์ฃผ๋ UI ๋ ์งํ๋ค์ ๋ถ์ํ๋ GA์ ๊ฐ์ ์๋ฒ ๋ฑ์ผ๋ก ์งํ ๋ฐ์ดํฐ์ ์ฑ๊ฒฉ์ ๋ง๊ฒ ๋ค๋ฅธ ๊ณณ์ผ๋ก ์งํ ๋ฐ์ดํฐ๊ฐ ์ด๋ํ๊ฒ ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ ๊ทธ๋ฆผ์์ ๋ณด๋ ๊ฒ์ฒ๋ผ ๋ฐ์ํ๋ ์งํ ๋ฐ์ดํฐ๋ง๋ค ๋ณด๋ผ ๊ณณ์ ๋ฐ๋ก 1:1 ๋งคํํ๊ฒ ๋๋ฉด ๋๋ฌด ๋ง์์ง๊ณ ๋ณต์กํด์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ฐฉ๊ธ ์ธ๊ธํ ๋ฌธ์ ์ ์ ๊ทน๋ณตํ๊ธฐ ์ํด Pub/Sub Messaging ์ปจ์ ์ด ๋์ ๋๋ค. ์ ๊ทธ๋ฆผ์ ์์๋ก ์ดํด๋ณด์. ๋ค์ํ ์๋ฒ์์ ์งํ ๋ฐ์ดํฐ๋ค์ด ๋ฐ์ํ๊ณ ์งํ ๋ฐ์ดํฐ๋ค์ ์ฑ๊ฒฉ์ ๋ง๊ฒ ํ๋์ Pub/Sub ๋ฉ์์ง ์์คํ ์ ๋ง๋ ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ์ํ๋ ์งํ ๋ฐ์ดํฐ๋ค ์ฆ, ๋ฉ์์ง๋ค์ Pub/Sub ์์คํ ์ ์ ๋ฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด Pub/Sub ์์คํ ์ ๊ตฌ๋ (Subscribe) ํ๋ ์งํ๋ฅผ ๋ณด์ฌ์ฃผ๋ UI, ์งํ๋ฅผ ๋ถ์ํ๋ GA์ ๊ฐ์ ์๋ฒ๋ค์ด ์งํ ๋ฐ์ดํฐ๋ค(๋ฉ์์ง)์ ๋ฐ์๊ฐ๊ฒ ๋๋ค.
๊ฒฐ๊ตญ Pub/Sub ๋ฉ์์ง ์์คํ ์ 'Pub'์ ๋ค์ํ ์๋ฒ๋ค๋ก๋ถํฐ ๋ฉ์์ง(์งํ ๋ฐ์ดํฐ)์ ์ค์ ์์คํ ์ผ๋ก 'Publishing' ํ๊ณ ํด๋น ์ค์ ์์คํ ์ 'Subscribing' ํ๋ ์ฌ๋ฌ ์๋ฒ๋ค(UI ์๋ฒ, ๋ถ์ ์๋ฒ ๋ฑ๋ฑ)์ด ๋ฉ์์ง(์งํ ๋ฐ์ดํฐ)์ ๋ฐ์๊ฐ๋ ๊ตฌ์กฐ๊ฐ ๋๋ค.
๊ทธ๋ฐ๋ฐ, ์นดํ์นด(Kafka)๋ ์์ ๊ฐ์ด ์งํ ๋ฐ์ดํฐ ์ฑ๊ฒฉ์ ๋ง๊ฒ Pub/Sub ์์คํ ์ ์ฌ๋ฌ๊ฐ ๋๋ ๊ฒ๋ ์ซ์ด(?)ํ๋ค. ๊ทธ๋์ ์ด ์ฌ๋ฌ๊ฐ์ Pub/Sub ์์คํ ๋ ํ๋๋ก ํตํฉํ๊ธฐ๋ก ํ๋ค. ์ด๊ฒ์ด Kafka ๊ธฐ๋ฅ์ ์ถ๋ฐ์ ์ด๋ค.
Kafka = 2๊ฐ์ง ๋ชจ๋ธ
Kafka๋ 2๊ฐ์ง ๋ชจ๋ธ์ ํฉ์ณค๋ค๊ณ ํ ์ ์๋ค. ์ด 2๊ฐ์ง ๋ชจ๋ธ์ ๋ํด ์์๋ณด์.
1. Queuing
๋จผ์ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ํค๋ Source๋ค์ธ Producer๋ค์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ผ์ Queue ๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์ ์๋ ์๋ฃ๊ตฌ์กฐ์ ๋จผ์ ๋ฃ๋๋ค.(์ฐธ๊ณ ๋ก Queue๋ ๋จผ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋๊ฐ๋ FIFO(First-In-First-Out) ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์๋ฏธํ๋ค) ๊ทธ๋ฆฌ๊ณ ํ์ ๋ฃ์ ๋ฐ์ดํฐ๋ค์ Consumer(์ปจ์๋จธ)๋ค์ด ๋จ 'ํ ๋ฒ์ฉ'๋ง ํ๋ฅผ ์ฝ์ด์ ์ฒ๋ฆฌํ๋ค.
2.Pub/Sub
์ฌ๋ฌ๊ฐ์ง ์ข ๋ฅ์ ์ด๋ฒคํธ ๋ฐ์ดํฐ(์งํ ๋ฐ์ดํฐ์ ๋์ผ)๊ฐ ๋ฐ์ํ๋ค. ๊ทธ๋ฐ๋ฐ ์๊น ์์์ ๋ณธ ๊ฒ์ฒ๋ผ ๋ค์ํ ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ค ์ค์์ ๋น์ทํ ์ฑ๊ฒฉ์ ๋ฐ์ดํฐ๋ค์ด ๋ถ๋ช ์กด์ฌํ๋ค. ๋ํ ํ๋์ ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ ๋๊ณ ์ด๋ฅผ Subscribe ํ๊ณ ์ ํ๋ ์ฌ๋ฌ๋์ ์๋ฒ๋ค์ด ์กด์ฌํ ์ ๋ ์๋ค. ๋ค์ ๋งํด ์ด๋ค ์ด๋ฒคํธ ๋ฐ์ดํฐ์ ๋ํ์ฌ ํ๋์ ๊ตฌ๋ ์(ํ๋์ ์ปจ์๋จธ)๊ฐ ์์ ์ ์๊ณ ์ด๋ค ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ ์ฌ๋ฌ ์ปจ์๋จธ๋ค๋ก ๊ตฌ์ฑ๋์ด ์๋ ์ฌ๋ฌ ๊ตฌ๋ ์๊ฐ ์์ ์ ์๋ค.
์ด๋ ๊ฒ 2๊ฐ์ง ๋ชจ๋ธ๋ก ๊ตฌ์ฑ๋ ์นดํ์นด๋ ์ ๋ง ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ฉฐ ๋ฌดํ๋๋ก ํ์ฅ์ด ๊ฐ๋ฅํ๋ค. ๋ํ ์ ๋ฌ๋๋ ์ด๋ฒคํธ ์คํธ๋ฆฌ๋ฐ์ ๋ด๋ถ์ ์ผ๋ก ๋ถ์ฐ์ฒ๋ฆฌํ์ฌ ์์ ํ๊ฒ ์ ์ฅํ๋ ๊ณ ๊ฐ์ฉ์ฑ์ ํน์ง๋ ์กด์ฌํ๋ค.
์นดํ์นด๋ ์ฃผ๋ก ์ค์๊ฐ, ์น, ๋ก๊ทธ ๋ถ์, ๋ฉ์์ง, ํธ๋์ ์ ๊ทธ๋ฆฌ๊ณ ์ฌ์ง์ด OLTP์ CDC๋ฅผ ์คํธ๋ฆฌ๋ฐ์ผ๋ก ๋ฐ๊ธฐ๋ ํ๋ค. ๊ทธ๋์ ์์ ์ด์ผ๊ธฐํ ETL ๋๊ตฌ ๋ฟ๋ง ์๋๋ผ Sources ์ญํ ๋ ์ํํ๋ ์ญํ ๊น์ง๋ ๊ฐ๋ฅํ๋ค.
Kafka์ ๋ด๋ถ ์ํคํ ์ฒ
์ด๋ฒ์ Kafka์ ๋ด๋ถ์ ์ธ ์ํคํ ์ฒ๋ฅผ ์ดํด๋ณด์.
- Producer : ์ด๋ฒคํธ ๋ฐ์ดํฐ(์งํ ๋ฐ์ดํฐ)๋ฅผ ๋ฐ์์ํค๋ Sources
- Kafka broker : ์ผ์ข ์ ์๋ฒ๋ฅผ ์๋ฏธ
- Topic : Kafka broker๋ผ๋ ์๋ฒ ๋ด์ ์กด์ฌํ๋ ํ ์ด๋ธ(๋ฐ์ดํฐ)
- push : Producer๊ฐ ๋ง๋ค์ด๋ด๋ ๋ฐ์ดํฐ๋ฅผ Kafka broker ์๋ฒ์ ์ ์ก ์ฆ, ๋ฉ์์ง์ Publishing
- pull : Kafka broker ์๋ฒ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ค์ Consumer๊ฐ ๊ฐ์ ธ์ค๋ ์ฆ, ๋ฉ์์ง์ Subscribing
์ ๊ทธ๋ฆผ์์ ๋ ํ๋ ์ฃผ๋ชฉํ ๋ถ๋ถ์ Zookeeper Cluster์ด๋ค. ๊ทธ๋ฆผ์ ์ ๋ณด๋ฉด ์ปจ์๋จธ์ Kafka broker๋ก๋ถํฐ Zookeeper Cluster๋ก ํฅํ๋ ํ์ดํ๋ค์ด ์๋ค. Zookeeper Cluster๋ ์ฐ์ ์ฌ๋ฌ๊ฐ์ Kafka broker๋ผ๋ ์๋ฒ๋ค ์ค ์ด๋ค ์๋ฒ๊ฐ ๋ค์ด๋์ด ์๊ณ ์ด๋ค ์๋ฒ๊ฐ ๋ฑ๋ก๋์ด ๋์ํ๊ณ ์๋์ง ๊ด๋ฆฌํ๋ ์ญํ ์ ํ๋ค. ๋ํ ์ปจ์๋จธ๋ค์ด ์ด๋ค Topic์ ๊ฐ์ ธ๊ฐ์ง ๋ฑ๋ก์ ํ๊ธฐ ์ํ ์ญํ ๋ ํ๋ค.
๊ทธ๋ฌ๋ ์ต๊ทผ์ Zookeeper Cluster๊ฐ Kafka broker๋ค์ ๋ด๋ Kafka Cluster๋ค๊ณผ ๋ฐ๋ก ์กด์ฌํ๋ค๋ณด๋ ์ค๋ณต, ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํด์ Zookeeper Cluster ์์กด์ฑ์ ์ ๊ฑฐํ๊ธฐ ์ํด ์นดํ์นด ๋ด๋ถ์์ Zookeeper Cluster๋ฅผ ์ํ ์นดํ์นด๋ฅผ ๋ ํ์ฑํ๋ ์ด๋ฅธ๋ฐ "Kafka On Kafka"๋ก ๊ฐ์ ํ๊ณ ์๋ค๊ณ ํ๋ค.
๋ค์์ Producer๋ค์ด ๋ฉ์์ง(๋ฐ์ดํฐ)์ Kafka broker๋ก ์ ์กํด ์ด ๋ฉ์์ง๋ค์ด Partition(ํํฐ์ )์ผ๋ก ์ ์ฅ์ด ๋๋ค. ์ด ๋ ํํฐ์ ์ ๋ํด์ ๊ฐ๋จํ ์์๋ณด์.
(์ ๊ทธ๋ฆผ์์ TOPIC CLICK์ 'ํด๋ฆญ' ๋ฐ์ดํฐ๊ฐ ๋ด๊ฒจ์๋ ํ ์ด๋ธ, TOPIC UPLOAD๋ '์ ๋ก๋' ๋ฐ์ดํฐ๊ฐ ๋ด๊ฒจ์๋ ํ ์ด๋ธ์ ์๋ฏธํ๋ค.)
ํํฐ์ ์ ํ ๊ฐ๋ก๋ง ์ค์ ํ๋ค๋ฉด ํ๋์ ํํฐ์ ์ ๊ณ์์ ์ผ๋ก ์คํธ๋ฆฌ๋ฐ๋๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค. ์ด๋ฌํ ์ํฉ์ด ์ง์๋๋ฉด ์๋๊ฐ ๋งค์ฐ ๋๋ ค์ง๋ค. ๋ฐ๋ผ์ ํํฐ์ ์ ์ฌ๋ฌ๊ฐ๋ก ๋๋์ด์ ๊ฐ ํํฐ์ ์ ๋ฐ์ดํฐ(๋ฉ์ธ์ง)๋ฅผ Writeํ๊ฒ ๋๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์๋ ์ ํ๊ฐ ์์ด์ง๋ค. ์ด ๋ ์๊น ๋ฌธ๋์์ ์ธ๊ธํ๋ Kafka์ "Writing ํน์ฑ"์ด ๋ฐ๋ก ์ด๊ฒ์ด๋ค.
ํ์ง๋ง ์นดํ์นด์ ๋จ์ ์ด ์ฌ๊ธฐ์ ์๋ค. ๋ฐ๋ก ๋๋ ค๋ฒ๋ฆฐ ํํฐ์ ์ ์ค์ผ ์ ์๋ค๋ ๊ฒ. ๋ฌผ๋ก ํํฐ์ ์ ์ค์ด๊ธฐ ์ํด ๋์ผํ ๋ฉ์์ง(๋ฐ์ดํฐ)์ ์ ์ฅํ ๋ ๋ค๋ฅธ Topic์ ๋ง๋ค๊ณ ์ด ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌ, ๋ถ์ฌ๋ฃ๊ธฐ ํ๋ฉด ๋๊ธด ํ๋ค. ๊ฐ์ธ์ ์ธ ์๊ฐ์ด์ง๋ง ์ด๋ ๊ฒ ํ๊ฒ ๋๋ฉด Topic ๋ํ ๋์ด๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ ์๋๊ฐ ์ถ๊ธฐ๋ ํ๋ค.
Kafka APIs ์ Kafka๋ฅผ ์๋ฃจ์ ์ผ๋ก ์ ๊ณตํด์ฃผ๋ ๋๊ตฌ๋ค
๋ค์์ Kafka๊ฐ ์ ๊ณตํ๋ API๋ค์ ๋ํด ๊ฐ๋จํ๊ฒ ์ดํด๋ณด๊ณ ๋์ด๊ฐ์
- Admin API : Topic, Kafka broker, ์๋ฒ ๋ฑ์ ๊ด๋ฆฌ
- Producer API : ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด๋ด๋ ์ญํ
- Consumer API : ์ปจ์๋จธ๋ค์ด ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๊ฐ๋๋ก ํ๋ ์ญํ
- Kafka Streams API : Producer๊ฐ ๋ง๋ค์ด๋ธ ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์คํธ๋ฆผ ํ๋ก์ธ์ฑ์ ์ฒ๋ฆฌ
- Kafka Connect API : ์ด๋ฒคํธ ์คํธ๋ฆฌ๋ฐ์๋ค๊ฐ ์ ์กํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณ ์๋ ์ธ๋ถ DB๋ ๋ค์ํ ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ . ์ฆ, ์ด API ๊ฐ์๋ฅผ ์ฆ๊ฐ์ํค๋ฉด ETL ๋๊ตฌ์ ์ฅ์ ์ด์๋ ์์ค๋ฅผ ๋๋ฆฌ๋ ๋ฐ ๊ธฐ์ฌ
์์ ๊ฐ์ด ์ด๋ฒคํธ ์คํธ๋ฆฌ๋ฐ์ ๋ฐ์ด๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์นดํ์นด์๋ ์์ฌ์ด ์ ์ด ๋ ํ๋ ๋ ์๋ค. ๋ฐ๋ก ์ค์น, ์คํ, ๋ค๋ฃจ๋ ๊ฒ ๋งค์ฐ ์ด๋ ต๋ค๋ ์ ์ด๋ค.(๊ณ ์ ๋ถ๋ค์๊ฒ ์ฝ๊ฒ ..) ๊ทธ๋์ ์ด๋ฅผ ๊ณ ๋ คํ์ฌ ์นดํ์นด๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ๋๋ก ๋ง๋ ๋ช ๊ฐ์ง ํ๋ซํผ์ด์ ๋๊ตฌ๋ค์ด ์กด์ฌํ๋ค.
- Confluent : ์นดํ์นด๋ฅผ ๋ง๋ ๋ถ๋ค์ด ์ฐฝ์ ํ ํ์ฌ์ด๋ค. ์ง์ ์นดํ์นด๋ฅผ ์ฐฝ์ํ์ ๋ถ๋ค์ด๋ผ์ ๊ทธ๋ฐ์ง ์นดํ์นด๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค์ด์ค ์๋ฃจ์ ๋๊ตฌ์ด๋ค.
- Apache Pulsar : ์ผํ์์ ๋ง๋ ๋๊ตฌ๋ก, ๊ตฌ์ฑ์ด ๊ฑฐ์ Confluent์ ๋น์ทํ๋ค.
- AWS Kinesis : ์๋ง์กด์ด ๋ง๋ ์คํธ๋ฆฌ๋ฐ ํ๋ซํผ์ด๋ค. ์นดํ์นด๊ฐ ๊ฐ๊ณ ์๋ ๋จ์ ์ธ ํํฐ์ ์ ์ค์ผ ์ ์๋ค๋ ์ ์ ๊ทน๋ณตํด ์ค๋(Kinesis์์๋ ์นดํ์นด์ ํํฐ์ ์ '์ค๋'๋ผ๊ณ ๋ถ๋ฅธ๋ค)๋ฅผ ๋์ด๊ณ ์ค์ด๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์๋์ ์ธ ์ธก๋ฉด์์ ๋ณด์์ ๋ ์นดํ์นด๊ฐ Kinesis ๋ณด๋ค ํจ์ฌ ์ฑ๋ฅ์ด ๋น ๋ฅด๋ค๊ณ ํ๋ค.
- AWS MSK(Managed Streaming for Kafka): ์๋ง์กด์ด Kinesis๋ฅผ ๋ง๋ค์์ง๋ง ์ฑ๋ฅ ์๋๊ฐ ์นดํ์นด์ ๋นํด ๋งค์ฐ ๋๋ฆฌ๋ค๋ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋๋ง ์ง๋ถํ๋ฉด ํธํ๊ฒ ์นดํ์นด๋ฅผ ๊ด๋ฆฌํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๋๊ตฌ์ด๋ค.
'Apache Spark' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[PySpark] Spark์ Dataframe API๋ฅผ ์์๋ณด์!(2) (0) | 2022.02.05 |
---|---|
[PySpark] Spark์ Dataframe API๋ฅผ ์์๋ณด์!(1) (4) | 2022.02.03 |
[Infra] ๋ฐ์ดํฐ ์ธํ๋ผ - Ingestion&Transformation(Spark Platform, Python Lib, Batch Query Engine) (0) | 2021.04.23 |
[Infra] ๋ฐ์ดํฐ ์ธํ๋ผ - Ingestion&Transformation (0) | 2021.04.23 |
[Infra] ๋ฐ์ดํฐ ์ธํ๋ผ ๊ตฌ์กฐ์ Sources (0) | 2021.04.23 |