๐ ์นดํ์นด๋ ์ ๋น ๋ฅผ๊น?
์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ ์ณ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด์๋ ์ค์ฌ์ด ๋๋ ๋ฉ์์ง ์๋น์ค๊ฐ ํ์ํ๊ณ ๋ณดํต kafka, rabbitmq, redis (pub/sub) ๋ฑ์ ์๋ฃจ์ ์ ๋์ ํ๊ฒ ๋ฉ๋๋ค. ๊ทธ ์ค kafka ๋ GC ๋ก ์ธํด ์ง์ฐ์ด ๋ฐ์ํ ์ ์๋ JVM ๊ธฐ๋ฐ์ผ๋ก ๋์ํจ์๋ ๋ถ๊ตฌํ๊ณ VM ์ฅ๋น์์๋ ๊ฝค ๊ด์ฐฎ์ ์ฒ๋ฆฌ๋์ ๋ณด์ฌ์ค๋๋ค. ์ด์ ๋ํ ๊ถ๊ธ์ฆ์ ์์ฐจ์ ์ผ๋ก ์์๊ฐ ๋ณผ ์ ์๋ ์ข์ ๊ธ์ด ์์ด ๊ณต์ ๋๋ฆฝ๋๋ค. ๊ธ์์ ์ ๋ฆฌํ Kafka ๊ฐ ๋น ๋ฅธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๐ ์ ์ง์ฐ I/O ์ฌ์ฉ ์ ์ก๋ฐ์ ๋ฉ์์ง๋ RAM์ ์ฌ์ฉํ์ฌ ์ง์ฐ ์๊ฐ์ ๋ฎ์ถ๊ณ , DISK๋ฅผ ์ต์ํ์ผ๋ก ์ฌ์ฉ. ๐ ์์ฐจ์ I/O ์๋ฃ๊ตฌ์กฐ ์ฌ์ฉ (log) ๋ฉ์์ง ์ถ๊ฐ๋ ๋๋จ์์ ์ด๋ค์ง๊ณ , ๋ฉ์์ง ์ฝ๊ธฐ๋ consumer ๋ง๋ค ๋ณ๋์ ํฌ์ธํฐ๋ฅผ ๋์ด ํ์ ์๊ฐ์ ํผํ๋ 'log' ๋ผ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ฌ์ฉ. ๐ zero-copy ์ ์ฉ ์ดํ ์์ญ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ๊ณผ์ ์์ด ์ปค๋์ ์ง์ ์ ๋ฌํ์ฌ ํจ์จ์ ๋์. ๐ ์ํ ํ์ฅ ์์คํ ๋จ์ผ ์ฃผ์ ์ ๋ํด ์ฌ๋ฌ ์๋น์๋ก ๋ถ์ฐ ๊ฐ๋ฅํ ์์คํ . ๐ ๋ฐ์ดํฐ ์์ถ ๋ฐ ์ผ๊ด ์ฒ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๋ฌถ์ ๋จ์๋ก ๊ด๋ฆฌํ์ฌ ์ ์ก/๊ด๋ฆฌ ํจ์จ์ ๋์ด๊ณ , ์ด๋ฅผ ์์ถํ์ฌ ๋ณด๊ด/์ ์กํ๋ ๊ตฌ์กฐ. ํนํ ๋ค๋ฅธ๊ฒ๋ณด๋ค zero-copy ์ ๋ํด ๊ฝค๋ ๊น๊ณ ์์ธํ๊ฒ ์ค๋ช ํ๊ณ ์๋๋ฐ์ ์์ธํ ์ค๋ช ๊ณผ ๋ฒค์น๋งํฌ๋ฅผ ๋ค๋ฃฌ ์ํฐํด๋ค์ ์ค๊ฐ์ค๊ฐ ์ฒจ๋ถํ์ฌ ์ฝ๋ ์ฌ๋ฏธ๊ฐ ์์์ต๋๋ค. ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฒจ๋ถ๋๋ฆฐ ์๋ฌธ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์. ๐ ์๋ฌธ * https://frogred8.github.io/docs/034_why_is_kafka_fast/