Apache Kafka๋ ๋น ๋ฅด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์์ ์ ์ํด ๋ฐ์ดํฐ ํผ๋์ ๋ถ์ฐ ์คํธ๋ฆฌ๋ฐ, ํ์ดํ ๋ผ์ด๋ ๋ฐ ์ฌ์์ ์ํ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์ค๊ณ๋ ์คํ ์์ค ๋ถ์ฐํ ๊ฒ์-๊ตฌ๋ ๋ฉ์์ง ํ๋ซํผ์ด๋ค.
์นดํ์นด๋ ๊ธฐ๋ณธ์ ์ผ๋ก Publish-Subscribe ๋ชจ๋ธ์ ๊ตฌํํ ๋ถ์ฐ ๋ฉ์์ง ์์คํ ์ด๋ค. Publish-Subscribe ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด๋ด๋ ํ๋ก๋์(Producer, ์์ฐ์), ์๋นํ๋ ์ปจ์๋จธ(Consumer, ์๋น์) ๊ทธ๋ฆฌ๊ณ ์ด ๋ ์ฌ์ด์์ ์ค์ฌ์ ์ญํ ์ ํ๋ ๋ธ๋ก์ปค(Broker)๋ก ๊ตฌ์ฑ๋ ๋์จํ ๊ฒฐํฉ(Loosely Coupled)์ ์์คํ ์ด๋ค.
๋ค์ค ํ๋ก๋์, ๋ค์ค ์ปจ์๋จธ
์นดํ์นด์ ํ ํฝ์ ์ฌ๋ฌ ํ๋ก๋์๊ฐ ๋์์ ๋ฉ์์ง๋ฅผ ์ ์กํ ์ ์๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์นดํ์นด ํ ํฝ์ ๋ฉ์์ง๋ฅผ ์ฌ๋ฌ ์ปจ์๋จธ๋ค์ด ๋์์ ์ฝ์ด ๊ฐ ์ ์๋ค. ๋ฟ๋ง ์๋๋ผ ํ๋์ ํ๋ก๋์๊ฐ ์ฌ๋ฌ ํ ํฝ์ ๋ฉ์์ง๋ฅผ ์ ์กํ ์๋ ์์ผ๋ฉฐ, ํ๋์ ์ปจ์๋จธ๊ฐ ์ฌ๋ฌ ํ ํฝ์์ ๋ฉ์์ง๋ฅผ ์ฝ์ด ๊ฐ ์๋ ์๋ค.
ํนํ ํ๋์ ๋ฉ์์ง๋ฅผ ์ฌ๋ฌ ์ปจ์๋จธ๊ฐ ์ฝ์ด ๊ฐ ์ ์๋ ์ธก๋ฉด์ด ์นดํ์นด์ ํฐ ๊ฐ์ ์ผ๋ก ์์ฉํ๋ค.
์ด๋ฌํ ๋ค์ค ํ๋ก๋์, ๋ค์ค ์ปจ์๋จธ์ ์ง์์ ํตํด ํ๋์ ์นดํ์นด ์์คํ
์ผ๋ก ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์
์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๊ฒ ๋์์ผ๋ฉฐ, ๋ฐ์ดํฐ์ ์์ฐ์/์๋น์ ๊ด๊ณ๋ ์ ์ฐํ๊ฒ ๊ตฌ์ฑํ ์ ์๊ฒ ๋์๋ค.
ํ์ผ์์คํ
์ ์ ์ฅ
๊ธฐ์กด์ ๋ฉ์์ง ์์คํ
์ ํ๋ก๋์๊ฐ ์ ์กํ ๋ฉ์์ง๋ฅผ ๋ธ๋ก์ปค์ ๋ฉ๋ชจ๋ฆฌ ์์ ์กด์ฌํ๋ ํ(Queue)์ ์ ์งํ๊ณ , ์ดํ ์ปจ์๋จธ๊ฐ ๋ฉ์์ง๋ฅผ ์ฝ์ด๊ฐ๋ฉด ํ์์ ๋ฉ์์ง๋ฅผ ์ ๊ฑฐํ๋ค.
์นดํ์นด๋ ํ๋ก๋์๊ฐ ์์ฑํ ๋ฉ์์ง๋ฅผ ๋ธ๋ก์ปค๊ฐ ์์นํ ์๋ฒ์ ํ์ผ ์์คํ
์ ์ ์ฅํ๋ค. ๋ฐ๋ผ์ ์ปจ์๋จธ๋ ํ๋ก๋์๊ฐ ์์ฑํ ๋ฉ์์ง๋ฅผ ๋ฐ๋ก๋ฐ๋ก ์๋นํ์ง ์์๋ ๋๋ฉฐ ์นดํ์นด๊ฐ ๋ฉ์์ง๋ฅผ ๋ณด์กดํ๊ณ ์๋ ๊ธฐ๊ฐ๋ด์์๋ ์ธ์ ๋ ์ง ์ฝ์ด ๊ฐ ์ ์๋ค.
์ด๋ฐ ๋ฐฉ์์ ํ๋ก๋์์ ์ปจ์๋จธ์ ์๋ ์ฐจ์ด๊ฐ ์์ ๋ ์ ์ฉํ๋ค. ์๋ฅผ ๋ค์ด ์ปจ์๋จธ ์ชฝ์ ์ฅ์ ๊ฐ ์๊ฒผ๊ฑฐ๋ ์๊ฐ์ ์ธ ๋คํธ์ํฌ ํธ๋ํฝ ํญ์ฃผ๋ก ์ฒ๋ฆฌ๊ฐ ๋ฆ์ด์ก์ ๋ ๋ธ๋ก์ปค์ ๋์์ ํฐ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉด์ ์ฒ๋ฆฌ ์๋๋ฅผ ๋ฐ๋ผ๊ฐ ์ ์๊ฒ ํด์ค๋ค. ๋ํ ์ปจ์๋จธ๋ค์ด ๋ฐ์ดํฐ๋ฅผ ๋ชจ์๋ค๊ฐ ์ฒ๋ฆฌํ๋ ๋ฐฐ์น(batch) ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ฉฐ, ์ปจ์๋จธ ์ชฝ์์ ์๋ฌ๊ฐ ์๊ฒผ์ ๋ ์ด์ ์ ์ฝ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์ฝ์ ์ ์๊ฒ ํด์ค๋ค.
์นดํ์นด ๋ธ๋ก์ปค๊ฐ ํ์ผ ์์คํ
์ ์ ์ฅํ ๋ฉ์์ง๋ ๊ด๋ฆฌ์์ ์ํด ์ค์ ๋ ์ผ์ ๋ณด์กด ๊ธฐ๊ฐ๋์ ์ฌ์ฉ๊ฐ๋ฅํ๋ฉฐ ์ดํ ๋ธ๋ก์ปค๊ฐ ์์นํ ์๋ฒ์ ํ์ผ ์์คํ
์์ ์ญ์ ๋๋ค.
ํ์ฅ์ฑ(Scalability)
์นดํ์นด ํด๋ฌ์คํฐ๋ ์ด์์ค์ ํ์ฅ์ด ์ฉ์ดํ๋๋ก ์ค๊ณ๋์๋ค. ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ ์ด์ฐฝ๊ธฐ ์ ์ ์์ ๋ธ๋ก์ปค๋ค๋ก ํด๋ฌ์คํฐ๋ฅผ ์ด์ํ๋ค๊ฐ ์์คํ
ํธ๋ํฝ์ด ๋์์ง๋ฉด ๋ธ๋ก์ปค๋ฅผ ์ถ๊ฐํด์ ํด๋ฌ์คํฐ๋ฅผ ํ์ฅํ ์ ์๋ค. ์ฆ, ์ํ์ ์ธ ํ์ฅ (Horizontally Scale, Scale out) ์ด ์ฝ๊ฒ ์ด๋ค์ง๋ค.
์นดํ์นด ํ ํฝ์ ๋ฉ์์ง๋ฅผ ์ ์กํ๋ ํ๋ก๋์ ์ญ์ ์ด์์ค์ ์ผ๋ง๋ ์ง ์ฆ๊ฐ์ํฌ ์ ์๋ค.
์นดํ์นด์์ ๋ฉ์์ง๋ฅผ ์ฝ์ด๊ฐ๋ ์ปจ์๋จธ์ ๊ฒฝ์ฐ ์ปจ์๋จธ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด๋ฉฐ ์ปจ์๋จธ ๊ทธ๋ฃน์ ์ปจ์๋จธ๋ฅผ ์ถ๊ฐํ ์ ์๋ค. ์ปจ์๋จธ ๊ทธ๋ฃน์ ์ปจ์๋จธ๊ฐ ์ถ๊ฐ๋๋ฉด ์ปจ์๋จธ์ ํํฐ์
์์ ๊ถ(Ownership)์ด ์ฌ๋ถ๋ฐฐ๋๋ ๋ฆฌ๋ฐธ๋ฐ์ค ๊ณผ์ ์ ๊ฑฐ์ณ ์ปจ์๋จธ ๊ทธ๋ฃน์ ์ํ ์ปจ์๋จธ๋ค์ด ๊ณ ๋ฅด๊ฒ ํํฐ์
์ ํ ๋น ๋ฐ๊ฒ ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ปจ์๋จธ ์ญ์ ์ด์ ์ค์ ๋ฌด๋ํ๊ฒ ์ถ๊ฐ๋ ์ ์๋ค.
์นดํ์นด ํ ํฝ์ ๋ด๋ถ์์ ํํฐ์
(Partition)์ด๋ผ๋ ์ธ๋ถํ๋ ๋จ์๋ก ๋๋์ด ์ ์ฅ๋๋๋ฐ ํ ํฝ์ ํํฐ์
๊ฐ์๋ ์ด์์ค์ ์ถ๊ฐํ ์ ์๋ค.
์ด๋ฐ ๋ชจ๋ ํ์ฅ ์์
์ด ์นดํ์นด ์ด์์ ์ฌ๊ฐํ ๋ถ๋ด์ ์ค ์ ๋๋ ์๋๋ฉฐ ์ฝ๊ณ ๊ฐํธํ๊ฒ ์ด๋ฃจ์ด ์ง ์ ์๋๋ก ์ค๊ณ๋์๋ค.
๊ณ ์ฑ๋ฅ
์นดํ์นด๋ ๋์ฉ๋ ์ค์๊ฐ ๋ก๊ทธ ์ฒ๋ฆฌ์ ํนํ๋์ด ์๋ค. ์ผ๋ฐ์ ์ธ ๋ฒ์ฉ ๋ฉ์์ง ์์คํ
์ด ์ง์ํ๋ ๋ช ๊ฐ์ง ๊ธฐ๋ฅ์ ํฌ๊ธฐํ๋ฉด์ ๋์ ์ฒ๋ฆฌ๋(Throughput)์ ๊ฐ๋๋ก ์ค๊ณ๋์๋ค.
์๋ฅผ ๋ค์ด IBM Websphere MQ ๊ฐ์ ๊ฒฝ์ฐ ๋ณต์์ ํ(Queue)์ ๋ฉ์์ง๋ค์ ์์์ (Atomically)์ผ๋ก ์ ๋ฌ ํ ์ ์๋ ํธ๋์ญ์
(Transaction) ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. JMS์ ๊ฒฝ์ฐ ์ปจ์๋จธ๊ฐ ๋ฉ์์ง๋ฅผ ์๋นํ๋์ง ์ฌ๋ถ๋ฅผ ์ ์ ์๋ ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค.
์นดํ์นด๋ ์ด๋ฐ ๊ธฐ๋ฅ์ ๋ฐฐ์ ํ๊ณ ๋ฐ์ด๋ ์ฒ๋ฆฌ๋(Throughput)์ ๊ฐ๋๋ก ์ค๊ณ๋์๋ค. ๋ถํ์ํ ๊ธฐ๋ฅ์ ์ ์ธํ๊ณ ๋ด๋ถ์ ์ผ๋ก ๋ฐฐ์น์ฒ๋ฆฌ, ๋ถ์ฐ ์ฒ๋ฆฌ์ ๊ฐ์ ๋ค์ํ ๊ธฐ๋ฒ์ ์ฌ์ฉํด ์ฑ๋ฅ์ ์ฒ๋ฆฌ๋์ ์ต๋๋ก ๋์ด๋๋ค.
์ปจ์๋จธ์ pull ๋ฐฉ์
๊ธฐ์กด์ ๋ฉ์์ง ์์คํ
์ ๊ฒฝ์ฐ ๋ธ๋ก์ปค๊ฐ ์ปจ์๋จธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ฃผ๋ "Push ๋ฐฉ์"์ ์ฑํํ ๊ฒฝ์ฐ๊ฐ ๋ง์ด ์๋ค.
์นดํ์นด๋ ์ปจ์๋จธ๊ฐ ๋ธ๋ก์ปค์๊ฒ์ ๋ฉ์์ง๋ฅผ ๊ฐ์ ธ์ค๋ "Pull ๋ฐฉ์"์ ์ฑํํ๋ค.
Pull ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ปจ์๋จธ์ ์ฒ๋ฆฌ๋์ ๋ธ๋ก์ปค๊ฐ ๊ณ ๋ฏผํ ํ์๊ฐ ์๋ค. ์ปจ์๋จธ๋ ์์ ์ด ์ฒ๋ฆฌํ ์ ์๋ ๋งํผ์ ๋ฉ์์ง๋ง ๋ธ๋ก์ปค์๊ฒ์ ๊ฐ์ ธ๊ฐ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ต์ ์ ๋ฉ์์ง์ฒ๋ฆฌ ์ฑ๋ฅ์ ๊ฐ์ ์ ์๋ค. ๋ง์ผ ์ปจ์๋จธ์ ์ฒ๋ฆฌ ์๋๊ฐ ํ๋ก๋์์ ์์ฐ ์๋๋ณด๋ค ๋๋ฆฌ๋ค๋ฉด ์ปจ์๋จธ๋ฅผ ์ถ๊ฐํ์ฌ ์ฒ๋ฆฌ๋์ ๋๋ฆด ์ ์๋ค. ๋ํ ๋ฉ์์ง๋ฅผ ๋ชจ์๋ค๊ฐ ํ๋ฒ์ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐฐ์น์ฒ๋ฆฌ๋ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๊ฒ ๋์๋ค.
๋์คํฌ์ ๋ฉ์์ง ์ ์ฅ
๋ฉํฐ ํ๋ก๋์, ๋ฉํฐ ์ปจ์๋จธ
๋ถ์ฐํ ์คํธ๋ฆฌ๋ฐ ํ๋ซํผ
ํ์ด์ง ์บ์
๋ฐฐ์น ์ ์ก ์ฒ๋ฆฌ
Apache kafka๋ ์๋์ ๊ฐ์ ์ธ ๊ฐ์ง ์ฃผ์ ์๊ตฌ ์ฌํญ์ ์ผ๋์ ๋๊ณ ์ค๊ณ ๋์๋ค.
์ผ๋ถ ๋ฉ์์ง ์์คํ ๊ณผ ๋ฌ๋ฆฌ ํธ๋์ญ์ ๋๋ ๋ค๋ฅธ ๋ฐฐํฌ ๋ชจ๋ธ์ ๋ํ ๋งค๋ ฅ์ ์ธ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ ์๋๋ค. ์คํธ๋ฆผ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ ๊ฒ์/๊ตฌ๋ ๋ชจ๋ธ์ ๋ํ ๋ฐ์ดํฐ ๋ถ๋ฐฐ๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์ค์ ์ ๋๋ค.
์ฒ์๋ถํฐ ์ฅ๊ธฐ๊ฐ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ๋ฐ์ดํฐ ์ฌ์์ ์ ๊ณตํ๋๋ก ์ค๊ณ๋์์ผ๋ฏ๋ก Apache Kafka๋ ๋ฐ์ดํฐ ์์์ฑ, ๋ด๊ฒฐํจ์ฑ ๋ฐ ์ฌ์์ ๊ณ ์ ํ๊ฒ ์ ๊ทผํ ์ ์๋ค. ์ด๋ Apache Kafka๊ฐ ํด๋ฌ์คํฐ์์ ๋ฐ์ดํฐ ๋ณต์ ์์์ฑ, ๋ฐ์ดํฐ ๋ณผ๋ฅจ ๋ฐ ๋ก๋ ์ฆ๊ฐ๋ฅผ ์ํด ํํฐ์ ๊ฐ ๋ฐ์ดํฐ ๊ณต์ , ํ ํฝ/ํํฐ์ , ๋ฐ์ดํฐ ์คํ์ ๋ฐ ์ปจ์๋จธ ๊ทธ๋ฃน ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ก์ธ์ค๋ฅผ ํ์ฉํจ์ผ๋ก์จ ํ์ฅ์ฑ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์์ ์์๋ณผ ์ ์๋ค.
Apache Kafka๋ ์๋ ์ค์๊ฐ ๋ก๊ทธ ์ฒ๋ฆฌ๋ฅผ ์ํ ํต์ ๊ณ์ธต ์ญํ ์ ํ๋๋ก ์ค๊ณ๋์๊ธฐ ๋๋ฌธ์ ์์ฐ์ค๋ฝ๊ฒ ์ค์๊ฐ ์คํธ๋ฆผ ์ฒ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์ธ๋ฆฐ๋ค. ๋ฐ๋ผ์ Apache Kafka๋ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ฐฐํฌํ ์์๋ ํต์ ์ธํ๋ผ๋ฅผ ํ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์์ ์ผ๋ก ์ ํฉํ๋ค.