๐Ÿฅ‡[Bro's Insights - ์ธ๊ธฐ๊ธ€] โ†’ ๐Ÿš€ Kafka๋ฅผ ๋งŒ๋“  LinkedIn ๊ธฐ์ˆ  ๋„˜์–ด: Northguard & Xinfra ๊ณต๊ฐœ!

LinkedIn์ด Northguard์™€ Xinfra๋ฅผ ๋ฐœํ‘œ๋กœ, Kafka๋ฅผ ๋„˜์–ด์„œ๋Š” Log Storage์™€ Pub/Sub ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

[์›๋ณธ] https://medium.com/data-engineer-things/the-company-that-created-kafka-is-replacing-it-with-a-new-solution-386cd1c2dcc8

์›๋ณธ์„ ๋ฒˆ์—ญํ•ด์„œ ๊ณต์œ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

# ๊ฐœ์š”

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 ๋ชจ๋‘์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•˜์—ฌ, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹คํŒจ ์‹œ ์•ˆ์ „ํ•˜๊ฒŒ ๋˜๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ๋Š” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ค‘์—๋„ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘์„ ์ด์–ด๊ฐ‘๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ด์ค‘ ์“ฐ๊ธฐ๋Š” ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.

5 Likes