LinkedIn์ด Northguard์ Xinfra๋ฅผ ๋ฐํ๋ก, Kafka๋ฅผ ๋์ด์๋ Log Storage์ Pub/Sub ํ์ฅ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ์์ธํ ์ ๋ณด๋ฅผ ํ์ธํ์ธ์.
์๋ณธ์ ๋ฒ์ญํด์ ๊ณต์ ๋๋ฆฝ๋๋ค.
# ๊ฐ์
LinkedIn์ 2025๋ ๊ธฐ์ค 12์ต ๋ช ์ด ๋๋ ์ฌ์ฉ์๋ฅผ ๋ณด์ ํ๊ณ ์๋ค๊ณ ๋ฐํ์ต๋๋ค. ์ด์ ๊ฐ์ ๋๊ท๋ชจ ์ฑ์ฅ์ผ๋ก ์ธํด Kafka ์ธํ๋ผ๋ ํฐ ๋ถ๋ด์ ์๊ฒ ๋์์ต๋๋ค. ๋น์ Kafka ์ธํ๋ผ๋ 150๊ฐ์ ํด๋ฌ์คํฐ์ 1๋ง ๋์ ๋จธ์ ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์์ผ๋ฉฐ, ๋งค์ผ 40๋ง ๊ฐ์ ํ ํฝ๊ณผ 17PB ๊ท๋ชจ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์์์ต๋๋ค.
๊ทธ๋ฌ๋ Kafka๋ ์ํคํ ์ฒ์ ์ผ๋ก ๊ฐํ๊ฒ ๊ฒฐํฉ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ด, ํธ๋ํฝ์ด ์ฆ๊ฐํ๋ฉด ๋จ์ํ ๋ ๋ง์ ๋จธ์ ์ ์ถ๊ฐํด์ผ๋ง ๋ถํ๋ฅผ ๊ฐ๋นํ ์ ์์์ต๋๋ค.
๋ํ Kafka๋ ๋ฐ์ดํฐ์ ๋ด๊ตฌ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ํํฐ์ ์ ๋ณต์ ํด์ผ ํฉ๋๋ค. ๋จ์ผ ๋ฆฌ๋๊ฐ ์ฐ๊ธฐ ์์ฒญ์ ์๋ฝํ๋ฉด ํด๋น ๋ฐ์ดํฐ๋ฅผ ํ๋ก์๋ค์๊ฒ ๋ณต์ ํฉ๋๋ค.
ํด๋ฌ์คํฐ์ ๋ฉค๋ฒ์ญ์ด ๋ณ๊ฒฝ๋๋ฉด, ๋ถํ๋ฅผ ๊ท ํ ์๊ฒ ๋ถ์ฐํ๊ธฐ ์ํด ๋ฐ์ดํฐ๊ฐ ์ฌ๋ถ๋ฐฐ๋์ด์ผ ํ๋ฉฐ, ์ด ๊ณผ์ ์ ํด๋ฌ์คํฐ์ ๊ฐ์ฉ์ฑ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
์ด ๋ฌธ์ ๋ค์ LinkedIn ๊ท๋ชจ์์ Kafka๋ฅผ ์ด์ํ ๋ ๋์ฑ ์ฌ๊ฐํด์ง๋๋ค.
LinkedIn์ ๋ ๋์ ํ์ฅ์ฑ์ ๊ฐ์ง ์๋ก์ด ์๋ฃจ์ ์ด ํ์ํ์ต๋๋ค. ์ด ์๋ฃจ์ ์ ๋ถํ ๋ถ์ฐ ์ธก๋ฉด์์ ๋ ํจ์จ์ ์ด์ด์ผ ํ๊ณ , ๋์์ Kafka๊ฐ ์ ๊ณตํด์๋ ๋์ ์ฒ๋ฆฌ๋, ๋ฎ์ ์ง์ฐ ์๊ฐ, ๋์ ๊ฐ์ฉ์ฑ, ๊ฐ๋ ฅํ ๋ด๊ตฌ์ฑ์ ์์ง ์์ผ๋ฉด์ ๋ฐ์ดํฐ์ ๋ฉํ๋ฐ์ดํฐ ๋ชจ๋์์ ๊ฐํ ์ผ๊ด์ฑ์ ๋ณด์ฅํด์ผ ํ์ต๋๋ค.
์ด ์๊ตฌ๋ฅผ ์ถฉ์กฑํ๊ธฐ ์ํด LinkedIn์ Northguard๋ผ๋ ๋ก๊ทธ ์คํ ๋ฆฌ์ง ์์คํ ์ ๊ตฌ์ถํ์ต๋๋ค. Northguard๋ ๋ฐ์ดํฐ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ ์์ ์ฒญํฌ๋ก ๋ถํ ํด ๋ ธ๋ ์ ์ฒด์ ๊ท ๋ฑํ๊ฒ ๋ถ์ฐ๋๋๋ก ์ค๊ณ๋์์ต๋๋ค.
์์ ์์ค์์ ๋ณด๋ฉด Northguard๋ Kafka์ ์ผ๋ถ ์ ์ฌ์ ์ ๊ฐ๊ณ ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋ธ๋ก์ปค ํด๋ฌ์คํฐ๋ก ๋์ํ์ง๋ง, ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑํ๊ณ ๋ณต์ ํ๋ ๋ฐฉ์์ Kafka์ ๋ค๋ฆ ๋๋ค.
# ๋ฐ์ดํฐ ๋ชจ๋ธ
Northguard์์ **๋ ์ฝ๋(record)**๋ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ ๋จ์์
๋๋ค. ์ด๋ Kafka์ ๋ฉ์์ง์ ์ ์ฌํ๋ฉฐ, ๋ฐ์ดํธ ์ํ์ค๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. ๊ฐ ๋ ์ฝ๋๋ ํค(key), ๊ฐ(value), ๊ทธ๋ฆฌ๊ณ ์ ํ์ ์ผ๋ก ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ **ํค๋(headers)**๋ฅผ ๊ฐ์ง๋๋ค.
๋ ์ฝ๋๋ ์ธ๊ทธ๋จผํธ- segment์ ์์ฐจ์ ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค. Kafka์ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ธ๊ทธ๋จผํธ๋ 1GB ํฌ๊ธฐ์ ํ์ผ๊ณผ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค.
ํ์ฑ ์ธ๊ทธ๋จผํธ- active segment๋ ์๋ก์ด ๋ ์ฝ๋๋ฅผ ๊ณ์ ์ถ๊ฐํ ์ ์๋ ์ํ์ ์ธ๊ทธ๋จผํธ๋ฅผ ์๋ฏธํฉ๋๋ค. ํ์ง๋ง ์ธ๊ทธ๋จผํธ๊ฐ ์ต๋ ํฌ๊ธฐ(1GB)์ ๋๋ฌํ์ ๋, 1์๊ฐ ์ด์ ํ์ฑ ์ํ๊ฐ ์ ์ง๋์์ ๋, ๋๋ ๋ณต์ ์ ์คํจํ์ ๋, ํด๋น ์ธ๊ทธ๋จผํธ๋ ๋ด์ธ(sealed) ์ฒ๋ฆฌ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ํฅ๋ฏธ๋ก์ด ์ ์, Northguard์์๋ ์ธ๊ทธ๋จผํธ(segment)๊ฐ ๋ณต์ ๋จ์๋ผ๋ ๊ฒ์ ๋๋ค. Kafka์์๋ **ํํฐ์ (partition)**์ด ๋ณต์ ๋จ์๋ก ์ฌ์ฉ๋์ง๋ง, Northguard๋ ์ด๋ฅผ ๋ฌ๋ฆฌ ์ค๊ณํ์ต๋๋ค. ์ด ๋ถ๋ถ์ ๋ค์์ ๋ค์ ๋ค๋ฃจ๊ฒ ๋ฉ๋๋ค.
Kafka์์๋ ํํฐ์ ์ด ๋ ผ๋ฆฌ์ ๋ก๊ทธ(logical log) ์ญํ ์ ํฉ๋๋ค. ๋ฐ๋ฉด, LinkedIn์ Northguard์์ ๋ ์ธ์ง-range๋ผ๋ ๊ฐ๋ ์ ๋์ ํ์ต๋๋ค. ๋ ์ธ์ง๋ Northguard์ ๋ก๊ทธ ์ถ์ํ-log abstraction๋ฅผ ์๋ฏธํฉ๋๋ค.
๋ ์ธ์ง๋ ์ฐ์๋ ํค ๋ฒ์ AโD, DโM, MโQ์ ๊ฐ์๋ฅผ ๊ฐ์ง๋ **์ธ๊ทธ๋จผํธ๋ค์ ์ฒด์ธ(chain)**์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค. ์ธ๊ทธ๋จผํธ์ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ ์ธ์ง๋ ํ์ฑ-active ์ํ์ผ ์ ์๊ณ , ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ด์ธ(sealed) ๋ ์ ์์ต๋๋ค.
๋ํ, Northguard์๋ ํ ํฝ-topic์ด๋ผ๋ ๊ฐ๋ ์ด ์์ต๋๋ค. ํ ํฝ์ ์ ์ฒด ํค์คํ์ด์ค(AโZ์ ๊ฐ์)๋ฅผ ํฌ๊ดํ๋๋ก ๊ตฌ์ฑ๋ ์ฌ๋ฌ ๋ ์ธ์ง๋ค์ ์งํฉ-collection์ ์๋ฏธํฉ๋๋ค.
Northguard๋ ํ ํฝ ๋ฒ์๋ฅผ ๋ณํฉํ๊ฑฐ๋ ๋ถํ ํ ์ ์์ต๋๋ค.
- ๋ถํ ์ ์ํํ๋ฉด ์๋ณธ ๋ฒ์๊ฐ ์ข ๋ฃ๋๊ณ ๋ ๊ฐ์ ์๋ก์ด ๋ฒ์๊ฐ ์์ฑ๋ฉ๋๋ค.
- ๋ณํฉ์ ์ํํ๋ฉด ๋ ๊ฐ์ ์๋ณธ ๋ฒ์๊ฐ ์ข ๋ฃ๋๊ณ ์๋ก์ด ๋ฒ์๊ฐ ์์ฑ๋ฉ๋๋ค.
ํ ํฝ์ ์ข ๋ฃ๋๊ฑฐ๋ ์ญ์ ๋ ์ ์์ผ๋ฉฐ, ์ด ๊ณผ์ ์ ๋ชจ๋ ํ ํฝ ๋ฒ์์ ๊ฑธ์ณ ์ด๋ฃจ์ด์ง๋๋ค. Northguard ํด๋ฌ์คํฐ์ ๊ด๋ฆฌ์๋ค์ ํ ํฝ์ ๋ํ ์ ์ฅ ์ ์ฑ ์ ์ค์ ํ ์ ์์ต๋๋ค. ์ ์ฑ ์ ์ด๋ฆ, ์ธ๊ทธ๋จผํธ๊ฐ ์ญ์ ๋๋ ์์ ์ ์ ์ํ๋ ๋ณด์กด ๊ธฐ๊ฐ, ๊ทธ๋ฆฌ๊ณ ์ผ๋ถ ์ง์ ๋ ์ ์ฝ ์กฐ๊ฑด์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
Northguard ํด๋ฌ์คํฐ์ ๊ฐ ๋ธ๋ก์ปค๋ ๋์ด๋ ๋ฐ์ดํฐ ์ผํฐ์ ๊ฐ์ ์ธ์ฝ๋ฉ๋ ์ ๋ณด๋ฅผ ํฌํจํด ๋ฐฐํฌ๋ฉ๋๋ค. ํ ํฝ์ ๋ํ ์ ์ฑ ์ ์ ์ํ ๋, ์ฌ์ฉ์๋ ์ ์ฝ ์กฐ๊ฑด์ ํํํ์ฌ ์ด๋ค ๋ธ๋ก์ปค๊ฐ ์ธ๊ทธ๋จผํธ์ ๋ณต์ ๋ณธ(์ธ๊ทธ๋จผํธ ์ฌ๋ณธ์ ๋ณด๊ดํ๋ ๋ธ๋ก์ปค)์ผ๋ก ์ ํ๋ ์ ์๋์ง๋ฅผ ๊ฒฐ์ ํ๋๋ก ํ ์ ์์ต๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ LinkedIn์ด Northguard์์ ๋ ์ธ์ง ๊ธฐ๋ฐ์ replica ํ ๋น์ ๋ฌ์ฑํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
# ๋ฐ์ดํฐ ๋ณต์
์์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ, Northguard์์ ๋ฐ์ดํฐ ๋ณต์ ์ ๋จ์๋ ์ธ๊ทธ๋จผํธ์ ๋๋ค. ์ด๋ Kafka์ ํํฐ์ ์ ๋นํด ๋ ์ธ๋ฐํ ๋จ์์ ๋๋ค.
LinkedIn์ Kafka ๋ฐฉ์์ด ๋ฐ์ดํฐ ์ ๋ฆผ์ ์ฒ๋ฆฌํ ๋ ๋นํจ์จ์ ์ผ ์ ์๋ค๋ ์ ์ ๊ด์ฐฐํ์ต๋๋ค. ๊ทธ ์ด์ ๋ ๊ฐ replica๊ฐ ์ ์ฒด ํํฐ์ ์ ์ ์ฒด ๋ณต์ฌ๋ณธ์ ์ ์ฅํด์ผ ํ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
- Kafka์์๋ ํด๋ฌ์คํฐ์ ์๋ก์ด ๋ธ๋ก์ปค๋ฅผ ์ถ๊ฐํ๋๋ผ๋ ํํฐ์ ์ด ์๋์ผ๋ก ์ ๋ธ๋ก์ปค๋ก ๋ก๋ ๋ฐธ๋ฐ์ฑ๋์ง ์์ต๋๋ค. ์๋ก์ด ๋ธ๋ก์ปค๋ ์ฌ์ฉ์๊ฐ ์๋ก์ด ํ ํฝ์ด๋ ํํฐ์ ์ ์์ฑํ๊ฑฐ๋ ์๋์ผ๋ก ์ฌ๋ถ๋ฐฐ ์์ ์ ์ํํ๊ธฐ ์ ๊น์ง๋ ์ ํด ์ํ๋ก ๋จ์ ํ์ฉ๋๊ฐ ๋ฎ์ต๋๋ค. ๊ทธ๋ฌ๋ ํ ํฝ์ด๋ ํํฐ์ ์ ์๋ก ์์ฑํ๋ ์์ ์ ์์ฃผ ์ด๋ฃจ์ด์ง์ง ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ด๋์ํค๋ ๋ฐฉ๋ฒ๋ ๋นํจ์จ์ ์ ๋๋ค.
- ๋ธ๋ก์ปค๋ ํซ ํํฐ์ (์: ๋๋์ ๋ฐ์ดํฐ ์์ง)์ด ์กด์ฌํ ๊ฒฝ์ฐ ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ์ด๋ฌํ ์ํฉ์์๋ ๋ฐ์ดํฐ ์ฌํํฐ์ ๋์ด ํ์ํฉ๋๋ค.
Northguard๋ Kafka์ ๋ก๊ทธ ์ถ์ํ(ํํฐ์ ๋)๋ฅผ ์ฌ์ฉํ๋ ๋์ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ณต์ ํ๋ ๋ฐฉ์์ ์ ํํฉ๋๋ค.
์ฌ๊ธฐ์ ํต์ฌ์ ์ธ๊ทธ๋จผํธ๊ฐ ๋ก๊ทธ๋ณด๋ค ๋ ์์ฃผ ์์ฑ๋๋ค๋ ์ ์ ๋๋ค. ๋ธ๋ก์ปค๊ฐ ์๋ง์ ์ฐ๊ธฐ ์์ฒญ์ ๋ฐ๊ณ ์๋นํ ๋ถํ ์ํ์ ๋์ฌ ์๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค.
Northguard๋ ์๋ก์ด ๋ธ๋ก์ปค๋ฅผ ์ถ๊ฐํ์ฌ ์ํฌ๋ก๋๋ฅผ ๋ถ์ฐ์ํค๋๋ฐ, ํฅ๋ฏธ๋ก์ด ์ ์ Kafka์ฒ๋ผ ๊ธฐ์กด ๋ธ๋ก์ปค์์ ์๋ก์ด ๋ธ๋ก์ปค๋ก ํํฐ์ ์ ์ด๋์ํฌ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. ์์คํ ์ ๋จ์ง ์๋ก์ด ํ์ฑ ์ธ๊ทธ๋จผํธ๋ฅผ ์๋ก์ด ๋ธ๋ก์ปค์ ํ ๋นํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฐ์ดํฐ ์์ง ์ํฌ๋ก๋๊ฐ ์๋ก์ด ๋ธ๋ก์ปค๋ก ์ ๋ฌ๋์ด ๊ณผ๋ถํ์ ๊ฑธ๋ฆฐ ๋ธ๋ก์ปค์ ๋ถ๋ด์ด ์ค์ด๋ญ๋๋ค.
๋ํ, ์ธ๊ทธ๋จผํธ๋ Kafka์ ํํฐ์ ๋ณด๋ค ๋ ์์ ๋จ์์ด๋ฏ๋ก ๋ฐ์ดํฐ๋ฅผ ์ด๋ํ๋ ๊ณผ์ ์ด Kafka์ ๋นํด ํจ์ฌ ๋ ๋ถ๋ด์ค๋ฝ์ต๋๋ค.
# ๋ฉํ๋ฐ์ดํฐ
Northguard๋ ๋ค์๊ณผ ๊ฐ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- ํ ํฝ: ํ ํฝ์ด ์ข ๋ฃ๋๊ฑฐ๋ ์ญ์ ๋ ๋, ๊ทธ๋ฆฌ๊ณ ํด๋น ๋ฒ์๊ฐ ๋ณํฉ๋๊ฑฐ๋ ๋ถํ ๋ ๋
- ๋ฒ์: ์ํ(active/sealed/deleting), ์ด๋ค ํ ํฝ์ ์ํ๋์ง, ์์ฑ ์๊ฐ, ๋ณด์กด ๊ธฐ๊ฐ
- ์ธ๊ทธ๋จผํธ: ์ธ๊ทธ๋จผํธ์ replica, ์ํ(active/sealed/reassigned), ์์ offset, ์ธ๊ทธ๋จผํธ ๊ธธ์ด, ์์ฑ ๋ฐ ์ข ๋ฃ ์๊ฐ
Northguard๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด Raft ๊ธฐ๋ฐ์ ๋ณต์ ์ํ ๋จธ์ ์ ์ฌ์ฉํ๋ฉฐ, ์ด๋ vnodes์ ๋ถ์ฐ๋์ด ์์ต๋๋ค. Northguard ํด๋ฌ์คํฐ๋ ํ๋ ์ด์์ vnode๋ฅผ ๊ฐ์ง๋ฉฐ(์ฌ๊ธฐ์ vnode๋ ๋ธ๋ก์ปค ๋ด์ ํ๋ก์ธ์ค๋ก ์ถ์ ๋จ), ๊ฐ vnode๋ ํ ํฝ, ๋ฒ์, ์ธ๊ทธ๋จผํธ ๋ฉํ๋ฐ์ดํฐ์ ์ผ๋ถ๋ฅผ ์ ์ฅํฉ๋๋ค.
Northguard๋ ์ผ๊ด์ฑ ํด์ฑ์ ์ฌ์ฉํ์ฌ ๋ฉํ๋ฐ์ดํฐ๋ฅผ vnodes์ ๋ถ์ฐ์ํต๋๋ค. ํ ํฝ ๋ฉํ๋ฐ์ดํฐ๋ ํ ํฝ ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ํด์ฑ๋๊ณ , ๋ฒ์์ ์ธ๊ทธ๋จผํธ ๋ฉํ๋ฐ์ดํฐ๋ ๋ฒ์ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ํด์ฑ๋ฉ๋๋ค.
๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ค๋ฉํ๊ณ ๋ถ์ฐ๋ ์กฐ์ ์ ํ์ฉํจ์ผ๋ก์จ, Northguard๋ Kafka์ ์ปจํธ๋กค๋ฌ ๋ณ๋ชฉ ํ์์ ์ ๊ฑฐํ๊ณ ๊ฐ๋ ฅํ ์ผ๊ด์ฑ๊ณผ ๋์ ๊ฐ์ฉ์ฑ์ ์ ๊ณตํฉ๋๋ค.
# ํ๋กํ ์ฝ
์์ํ ์ ์๋ฏ์ด, Northguard๋ Kafka์ ๋ฉํ๋ฐ์ดํฐ ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์กฐ์งํ๋ ๋ฐฉ์์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํ๋กํ ์ฝ ๋ํ ๋ค๋ฆ ๋๋ค.
๋ฉํ๋ฐ์ดํฐ ์์ ์ ์์ฒญ-์๋ต ๋ชจ๋ธ์ ๋ฐ๋ฅด๋ฉฐ, ํด๋ผ์ด์ธํธ๋ ์ด๋ค ๋ธ๋ก์ปค๋ก๋ ์์ฒญ์ ๋ณด๋ผ ์ ์์ต๋๋ค. ํด๋น ๋ธ๋ก์ปค๋ ๊ธ๋ก๋ฒ ์ํ์ ๋ก์ปฌ ๋ณต์ฌ๋ณธ์ ํ์ธํ์ฌ ์ด๋ค vnode๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋์ง ์๋ณํ๊ณ , ์ ์ ํ vnode๋ก ์์ฒญ์ ๋ผ์ฐํ ํฉ๋๋ค.
๋ฐ์ดํฐ์ ๊ด๋ จ๋ ์์ (์: producer, consumer, replication)์ ์ธ์ ๊ธฐ๋ฐ ์คํธ๋ฆฌ๋ฐ ํ๋กํ ์ฝ์ ํตํด ์ํ๋ฉ๋๋ค.
Kafka์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์ดํฐ ์์ฑ ๊ณผ์ ์ ๋ฆฌ๋์์ ํต์ ์ ํตํด ์ด๋ฃจ์ด์ง๋๋ค. ํด๋ผ์ด์ธํธ๋ ํ์ฑ ์ธ๊ทธ๋จผํธ ๋ฆฌ๋์ ํธ๋์ ฐ์ดํฌ๋ฅผ ์์ํ๋ฉฐ, ๋ธ๋ก์ปค๊ฐ ํ์ฉํ๋ ์๋์ฐ ํฌ๊ธฐ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๋ฌ๋ฐ๊ฒ ๋ฉ๋๋ค.
ํ๋ก๋์๋ ๋ ์ฝ๋๊ฐ ์๋์ฐ๋ฅผ ์ด๊ณผํ์ง ์๋ ํ, ์ธ๊ทธ๋จผํธ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํ ์ฌ๋ฌ ์์ฒญ์ ์ ์กํฉ๋๋ค. ๋ธ๋ก์ปค๋ ๋ ์ฝ๋๊ฐ ์ปค๋ฐ๋์์ ๋(๋ชจ๋ replica์ ์๊ตฌ ์ ์ฅ๋์์ ๋)๋ง ํ๋ก๋์์๊ฒ ACK๋ฅผ ๋ฐํํฉ๋๋ค.
์๋น ๊ณผ์ ์ ์์ฐ ๊ณผ์ ๊ณผ ์ ์ฌํ์ง๋ง ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ํ๋ฅธ๋ค๋ ์ ์ด ๋ค๋ฆ ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์์ฉํ ์ ์๋ ๋ฐ์ดํฐ์ ์์ ๊ฒฐ์ ํ๋ฉฐ, ๋ธ๋ก์ปค๋ ๋ ์ฝ๋๊ฐ ์ฌ์ ์ ์ ์๋ ์์ ์ด๊ณผํ์ง ์๋ ํ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ์ ์กํฉ๋๋ค. ์ด๋ Kafka์์ ์๋น์๊ฐ ๋ธ๋ก์ปค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ์๊ณผ ๋์กฐ์ ์ ๋๋ค.
์ธ๊ทธ๋จผํธ ๋ณต์ ์ญ์ ๋ฐ์ดํฐ ์์ฑ ๊ณผ์ ๊ณผ ๋งค์ฐ ์ ์ฌํ๊ฒ ๋์ํ์ง๋ง, ์ฐจ์ด์ ์ ํ์ฑ ์ธ๊ทธ๋จผํธ ๋ฆฌ๋์ ์ธ๊ทธ๋จผํธ ํ๋ก์ ๊ฐ์ ์ํธ์์ฉ์ด๋ผ๋ ์ ์ ๋๋ค.
# ์คํ ๋ฆฌ์ง ๊ณ์ธต
Northguard์ ์คํ ๋ฆฌ์ง๋ ํ๋ฌ๊ทธ์ธ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ธฐ๋ณธ ๊ตฌํ์ ์ธ๊ทธ๋จผํธ๋ณ๋ก ์์ฑ๋๋ Write Ahead Log(WAL)๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ๊ตฌํ์ Direct I/O๋ฅผ ํ์ฉํ๋ฉฐ, RocksDB์ ํฌ์ ์ธ๋ฑ์ค๋ฅผ ๋ณด๊ดํฉ๋๋ค.
์ฐ๊ธฐ ์์ฒญ์ ๋ค์ ์กฐ๊ฑด ์ค ํ๋๊ฐ ์ถฉ์กฑ๋ ๋๊น์ง ๋ฐฐ์น๋ฉ๋๋ค.
- ์ ์๋ ์๊ฐ์ด ๊ฒฝ๊ณผํ์ ๋
- ๋ฐฐ์น ํฌ๊ธฐ๊ฐ ์ค์ ๋ ํ๋์ ๋๋ฌํ์ ๋
- ์ฐ๊ธฐ ์์ฒญ ์๊ฐ ์ค์ ๋ ํ๋์ ๋๋ฌํ์ ๋
์ดํ ๋ฐฐ์น๋ ๋๊ธฐ์ ์ผ๋ก WAL์ ๊ธฐ๋ก๋๊ณ , ์ธ๊ทธ๋จผํธ ํ์ผ์ ์ถ๊ฐ๋๋ฉฐ, ํด๋น ํ์ผ์ด fsync ์ฒ๋ฆฌ๋๊ณ , ์ธ๋ฑ์ค๊ฐ ๊ฐฑ์ ๋ฉ๋๋ค.
Kafka๋ zero-copy ์ฝ๊ธฐ์ ๊ฐ์ ์ ๊ฐ์ง์ง๋ง, ์ฐ๊ธฐ ๊ณผ์ ์์๋ ์ฌ์ ํ ์ ํ๋ฆฌ์ผ์ด์ ๋ฒํผ์์ OS ํ์ด์ง ์บ์๋ก, ๊ทธ๋ฆฌ๊ณ ๋์คํฌ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํด์ผ ํฉ๋๋ค. Direct I/O๋ ์ค๊ฐ OS ํ์ด์ง ์บ์ ๋ณต์ฌ๋ฅผ ์ ๊ฑฐํจ์ผ๋ก์จ ์ฐ๊ธฐ ๊ฒฝ๋ก๋ฅผ ์ต์ ํํ ์ ์์ต๋๋ค. ๋ํ Northguard๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ ์บ์ฑ์ ํ์ฉํ์ฌ ์๋น๋ ๋ฐ์ดํฐ์ ๋ํ ์ ๋ณด๋ฅผ ์บ์์ ์ฑ์๋ฃ๋ ๋ฐฉ์์ผ๋ก ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
# Kafka ํด๋ผ์ด์ธํธ์ ๋์ ๋ฐฉ์
Kafka์ Northguard ๊ฐ์ ํ๋กํ ์ฝ ์ฐจ์ด์ LinkedIn ๋ด์์ Kafka๊ฐ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉ๋๊ณ ์๋ค๋ ์ ๋๋ฌธ์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์๋นํ ๋์ ์ ์ ๋๋ค.
์ด๋ฅผ ์ํด LinkedIn์ Northguard์ Kafka๋ฅผ ๋ชจ๋ ์ง์ํ๋ ๊ฐ์ Pub/Sub ๊ณ์ธต์ธ Xinfra๋ฅผ ๋์
ํ์ต๋๋ค. Xinfra๋ ๋ฌผ๋ฆฌ์ ํด๋ฌ์คํฐ๋ฅผ ์ถ์ํํ๊ณ Kafka์ Northguard ํด๋ผ์ด์ธํธ ๋ชจ๋์๊ฒ ํตํฉ๋ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
Xinfra๋ ์ฌ์ฉ์ ํ ํฝ์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ง์ํ๊ธฐ ์ํด ์ด์ค ์ฐ๊ธฐ ๋ฐฉ์์ ํ์ฉํฉ๋๋ค. ์ด ๊ณผ์ ์์๋ ํ๋ก๋์๊ฐ ๋จผ์ ๋ง์ด๊ทธ๋ ์ด์ ๋๊ณ , ๊ทธ ๋ค์์ผ๋ก ์ปจ์๋จธ๊ฐ ๋ง์ด๊ทธ๋ ์ด์ ๋ฉ๋๋ค.
๋ง์ด๊ทธ๋ ์ด์ ๊ธฐ๊ฐ ๋์ ํ๋ก๋์๋ Kafka์ Northguard ๋ชจ๋์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋กํ์ฌ, ๋ง์ด๊ทธ๋ ์ด์ ์คํจ ์ ์์ ํ๊ฒ ๋๋์๊ฐ ์ ์๋๋ก ํฉ๋๋ค. ํ๋ก๋์์ ์ปจ์๋จธ๋ ๋ง์ด๊ทธ๋ ์ด์ ์ค์๋ ์ ์์ ์ผ๋ก ๋์์ ์ด์ด๊ฐ๋๋ค. ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋๋ฉด ์ด์ค ์ฐ๊ธฐ๋ ๋นํ์ฑํ๋ฉ๋๋ค.



















