Kafka

Kafka Introduction

1. LinkedIn์˜ Kafka ๊ฐœ๋ฐœ ๋ฐฐ๊ฒฝ

์นดํ”„์นด ๊ฐœ๋ฐœ ์ „ ๋งํฌ๋“œ์ธ์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ

  • ๊ธฐ์กด ๋งํฌ๋“œ์ธ์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์€ ๊ฐ ํŒŒ์ดํ”„๋ผ์ธ์ด ํŒŒํŽธํ™”๋˜๊ณ  ์‹œ์Šคํ…œ ๋ณต์žก๋„๊ฐ€ ๋†’์•„ ์ƒˆ๋กœ์šด ์‹œ์Šคํ…œ์„ ํ™•์žฅํ•˜๊ธฐ ์–ด๋ ค์šด ์ƒํ™ฉ์ด์˜€์Œ

  • ๊ธฐ์กด ๋ฉ”์‹œ์ง• ํ ์‹œ์Šคํ…œ์ธ ActiveMQ๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ๋งํฌ๋“œ์ธ์˜ ์ˆ˜๋งŽ์€ ํŠธ๋ž˜ํ”ฝ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ์Œ

  • ์ด๋กœ ์ธํ•ด ์ƒˆ๋กœ์šด ์‹œ์Šคํ…œ์˜ ๊ฐœ๋ฐœ ํ•„์š”์„ฑ์ด ๋†’์•„์กŒ๊ณ , ๋งํฌ๋“œ์ธ์˜ ๋ช‡๋ช‡ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ชฉํ‘œ๋ฅผ ๊ฐ€์ง€๊ณ  ์ƒˆ๋กœ์šด ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœ

    • ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ์˜ ๋ถ„๋ฆฌ

    • ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ๊ณผ ๊ฐ™์ด ์˜๊ตฌ ๋ฉ”์‹œ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์ปจ์Šˆ๋จธ์—๊ฒŒ ํ—ˆ์šฉ

    • ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์œ„ํ•œ ๋ฉ”์‹œ์ง€ ์ตœ์ ํ™”

    • ๋ฐ์ดํ„ฐ๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์Šค์ผ€์ผ์•„์›ƒ์ด ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ

์นดํ”„์นด๋ฅผ ๊ฐœ๋ฐœ ํ›„ ๋งํฌ๋“œ์ธ์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ

  • ์นดํ”„์นด๋ฅผ ์ ์šฉํ•จ์œผ๋กœ์จ ๋ชจ๋“  ์ด๋ฒคํŠธ/๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์œผ๋ฉฐ,

  • ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๊ธฐ์กด์— ๋น„ํ•ด ๊ด€๋ฆฌํ•˜๊ธฐ ์‹ฌํ”Œํ•ด์กŒ์Œ

2. ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ

  • Publisher์™€ Subscriber๋กœ ์ด๋ฃจ์–ด์ง„ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง• ์ „์†ก ๋ฐฉ์‹

  • ๋ฉ”์‹œ์ง€๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ ๋‹จ์œ„๋ฅผ ๋ณด๋‚ด๋Š” ์ธก(Publisher/Producer)์—์„œ ๋ฉ”์‹œ์ง€ ์‹œ์Šคํ…œ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•˜๋ฉด ๊ฐ€์ ธ๊ฐ€๋Š” ์ธก(Subscriber/Consumer)๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ 

  • ๋ฐœ์‹ ์ž์˜ ๋ฉ”์‹œ์ง€์—๋Š” ์ˆ˜์‹ ์ž๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋ฐœํ–‰(Publish)

  • ๊ตฌ๋…(Subscribe)์„ ์‹ ์ฒญํ•œ ์ˆ˜์‹ ์ž๋งŒ์ด ์ •ํ•ด์ง„ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์Œ

  • ์ˆ˜์‹ ์ž๋Š” ๋ฐœ์‹ ์ž ์ •๋ณด๊ฐ€ ์—†์–ด๋„ ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ ์ด ๊ฐ€๋Šฅ

์ผ๋ฐ˜์ ์ธ ํ˜•ํƒœ์˜ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์˜ ๋ฌธ์ œ์ 

  • N:N์—ฐ๊ฒฐ์ด๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ ๊ฐ‘์ž๊ธฐ ๋งŽ์•„์งˆ ๊ฒฝ์šฐ ๋А๋ ค์งˆ ์ˆ˜ ์žˆ๊ณ  ์ด๋ฅผ ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•œ ํ™•์žฅ์„ฑ์ด ๋–จ์–ด์ง

  • ํŠน์ • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค์šด๋˜์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์ง€ ๋ชปํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€๊ฐ€ ์œ ์‹ค๋  ์ˆ˜ ์žˆ์Œ

Pub/Sub ๋ชจ๋ธ

  • ์ž‘๋™๋ฐฉ์‹

    • ํ”„๋กœ๋“€์„œ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ปจ์Šˆ๋จธ์—๊ฒŒ ์ง์ ‘ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ค‘๊ฐ„์˜ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์— ์ „๋‹ฌ (์ˆ˜์‹ ์ฒ˜ IDํฌํ•จ)

    • ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์˜ ๊ตํ™˜๊ธฐ๊ฐ€ ๋ฉ”์‹œ์ง€์˜ ์ˆ˜์‹ ์ฒ˜ ID๊ฐ’์„ ํ†ตํ•ด ์ปจ์Šˆ๋จธ๋“ค์˜ ํ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌ (push)

    • ์ปจ์Šˆ๋จธ๋Š” ํ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋‹ค๊ฐ€ ํ์— ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๊ฐ’์„ ํšŒ์ˆ˜

  • ์žฅ์ 

    • ํŠน์ • ๊ฐœ์ฒด๊ฐ€ ์ˆ˜์‹ ๋ถˆ๋Šฅ ์ƒํƒœ๊ฐ€ ๋˜๋”๋ผ๋„ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ๋งŒ ์‚ด์•„์žˆ๋‹ค๋ฉด ๋ฉ”์‹œ์ง€๊ฐ€ ์œ ์‹ค๋˜์ง€ ์•Š์Œ

    • ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ™•์žฅ์„ฑ์ด ์šฉ์ด

  • ๋‹จ์ 

    • ์ง์ ‘ ํ†ต์‹ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์‹œ์ง€๊ฐ€ ์ž˜ ์ „๋‹ฌ๋˜์—ˆ๋Š”์ง€ ํŒŒ์•…ํ•˜๊ธฐ ํž˜๋“ฌ

    • ์ค‘๊ฐ„์— ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์„ ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ์†๋„๊ฐ€ ๋น ๋ฅด์ง€ ์•Š์Œ

3. ๊ทธ๋ž˜์„œ ์นดํ”„์นด(Kafka)๋Š” ๋ฌด์–ด๋ƒ ?

์นดํ”„์นด ์•„ํ‚คํ…์ฒ˜

  • ํ”„๋กœ๋“€์„œ(Producer)

    • ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์‚ฐํ•˜์—ฌ ๋ธŒ๋กœ์ปค์˜ ํ† ํ”ฝ์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• 

  • ๋ธŒ๋กœ์ปค(Broker)

    • ์นดํ”„์นด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š” ์„œ๋ฒ„ ๋˜๋Š” ๋…ธ๋“œ๋ฅผ ์ง€์นญ

  • ์ปจ์Šˆ๋จธ(Consumer)

    • ๋ธŒ๋กœ์ปค์˜ ํ† ํ”ฝ์œผ๋กœ๋ถ€ํ„ฐ ์ €์žฅ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š” ์—ญํ• 

  • ์ฃผํ‚คํผ(Zookeeper)

    • ๋ถ„์‚ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ฝ”๋””๋„ค์ด์…˜ ์‹œ์Šคํ…œ

    • ๋ถ„์‚ฐ๋œ ๋…ธ๋“œ์˜ ์ •๋ณด๋ฅผ ์ค‘์•™์— ์ง‘์ค‘ํ•˜๊ณ  ๊ตฌ์„ฑ๊ด€๋ฆฌ, ๊ทธ๋ฃน ๋„ค์ด๋ฐ, ๋™๊ธฐํ™” ๋“ฑ์˜ ์„œ๋น„์Šค ์ˆ˜ํ–‰

์ž‘๋™๋ฐฉ์‹

  • ํ”„๋กœ๋“€์„œ๋Š” ์ƒˆ ๋ฉ”์‹œ์ง€๋ฅผ ์นดํ”„์นด์— ์ „๋‹ฌ

  • ์ „๋‹ฌ๋œ ๋ฉ”์‹œ์ง€๋Š” ๋ธŒ๋กœ์ปค์˜ ํ† ํ”ฝ์ด๋ผ๋Š” ๋ฉ”์‹œ์ง€ ๊ตฌ๋ถ„์ž์— ์ €์žฅ

  • ์ปจ์Šˆ๋จธ๋Š” ๊ตฌ๋…ํ•œ ํ† ํ”ฝ์— ์ ‘๊ทผํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ์˜ด (pull ๋ฐฉ์‹)

๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ๊ณผ ๋‹ค๋ฅธ ์ 

  • ๋””์Šคํฌ์— ๋ฉ”์‹œ์ง€ ์ €์žฅ

    • ๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ๊ณผ ๊ฐ€์žฅ ํฐ ํŠน์ง•

    • ๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์€ ์ปจ์Šˆ๋จธ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•˜๋ฉด ํ์—์„œ ๋ฐ”๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ญ์ œ

    • ํ•˜์ง€๋งŒ, ์นดํ”„์นด๋Š” ์ปจ์Šˆ๋จธ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•˜๋”๋ผ๋„ ๋””์Šคํฌ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ผ์ •๊ธฐ๊ฐ„ ๋ณด๊ด€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์‹œ์ง€์˜ ์†์‹ค์ด ์—†์Œ (์˜์†์„ฑ)

  • ๋ฉ€ํ‹ฐ ํ”„๋กœ๋“€์„œ, ๋ฉ€ํ‹ฐ ์ปจ์Šˆ๋จธ

    • ์นดํ”„์นด์˜ ๊ฒฝ์šฐ ๋””์Šคํฌ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ํŠน์ง•์œผ๋กœ ์ธํ•ด,

    • ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ ๋ชจ๋‘ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ

  • ๋ถ„์‚ฐํ˜• ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ

    • ๋‹จ์ผ ์‹œ์Šคํ…œ ๋Œ€๋น„ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•˜๋ฉฐ, ์‹œ์Šคํ…œ ํ™•์žฅ์ด ์šฉ์ดํ•จ

    • ์ผ๋ถ€ ๋…ธ๋“œ๊ฐ€ ์ฃฝ๋”๋ผ๋„ ๋‹ค๋ฅธ ๋…ธ๋“œ๊ฐ€ ํ•ด๋‹น ์ผ์„ ์ง€์† (๊ณ ๊ฐ€์šฉ์„ฑ)

  • ํŽ˜์ด์ง€ ์บ์‹œ

    • ์นดํ”„์นด๋Š” ์ž”์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ๋””์Šคํฌ Read/Write ๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ํŽ˜์ด์ง€ ์บ์‹œ๋ฅผ ํ†ตํ•œ Read/Write์œผ๋กœ ์ธํ•ด ์ฒ˜๋ฆฌ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฆ„

  • ๋ฐฐ์น˜ ์ „์†ก ์ฒ˜๋ฆฌ

    • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์—์„œ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ๋ฉ”์‹œ์ง€ ํ†ต์‹ ์„ ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌํ•  ๊ฒฝ์šฐ ๊ทธ๋งŒํผ ๋„คํŠธ์›Œํฌ ์™•๋ณต์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒ

    • ์ด๋กœ์ธํ•ด, ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์€ ๋‹จ์œ„๋กœ ๋ฌถ์–ด ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ๋ฅผ ํ•จ์œผ๋กœ์จ ์†๋„ ํ–ฅ์ƒ์— ํฐ ๋„์›€์„ ์คŒ

4. ์นดํ”„์นด ๋ฐ์ดํ„ฐ ๋ชจ๋ธ

์นดํ”„์นด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ† ํ”ฝ๊ณผ ํŒŒํ‹ฐ์…˜์ด๋ผ๋Š” ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์ด ์กด์žฌ

ํ† ํ”ฝ(Topic)

  • ๋ฉ”์‹œ์ง€๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ฌถ์€ ๊ฐœ๋… (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ” / ํŒŒ์ผ์‹œ์Šคํ…œ์˜ ํด๋”์™€ ์œ ์‚ฌํ•œ ๊ฐœ๋…)

  • ํ”„๋กœ๋“€์„œ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ๊ฒฝ์šฐ ํ† ํ”ฝ์— ๋ฉ”์‹œ์ง€๊ฐ€ ์ €์žฅ๋จ.

ํŒŒํ‹ฐ์…˜(Partition)

  • ํ† ํ”ฝ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์ด๋ฉฐ ๋ฉ”์‹œ์ง€๊ฐ€ ์ €์žฅ๋˜๋Š” ์œ„์น˜

  • ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ๋“€์„œ์—์„œ ํ•œ๊ฐœ์˜ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ๊ฒฝ์šฐ ๋ณ‘๋ชฉ์ด ์ƒ๊ธฐ๊ณ , ๋ฉ”์‹œ์ง€์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์—†๊ฒŒ ๋จ

  • ๊ทธ๋ ‡๊ธฐ์—, ํŒŒํ‹ฐ์…˜์„ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ๋Š˜๋ฆฌ๊ณ  ๊ทธ ์ˆ˜๋งŒํผ ํ”„๋กœ๋“€์„œ๋„ ๋Š˜๋ ค ํ•˜๋‚˜์˜ ํŒŒํ‹ฐ์…˜๋งˆ๋‹ค ํ•˜๋‚˜์˜ ํ”„๋กœ๋“€์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์œผ๋ฉด ํ›จ์”ฌ ๋น ๋ฆ„

  • ๊ทธ๋ ‡๋‹ค๋ฉด ํŒŒํ‹ฐ์…˜์€ ๋งŽ์„ ์ˆ˜๋ก ์ข‹์€๊ฐ€?

    • ํŒŒ์ผ ํ•ธ๋“ค๋Ÿฌ์˜ ๋‚ญ๋น„๊ฐ€ ์กด์žฌ

      • ๊ฐ ํŒŒํ‹ฐ์…˜์€ ๋ธŒ๋กœ์ปค์˜ ๋””๋ ‰ํ† ๋ฆฌ์™€ ๋งคํ•‘๋˜๊ณ  ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋งˆ๋‹ค 2๊ฐœ์˜ ํŒŒ์ผ(์ธ๋ฑ์Šค, ์‹ค์ œ ํŒŒ์ผ)์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„ˆ๋ฌด ๋งŽ์€ ํŒŒ์ผ ํ•ธ๋“ค์ด ์ƒ๊ธธ ๊ฒฝ์šฐ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„๊ฐ€ ์ƒ๊น€

    • ์žฅ์•  ๋ณต๊ตฌ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ

      • ์นดํ”„์นด๋Š” ๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜(Replication)์„ ์ง€์›ํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์ง€์†์ ์œผ๋กœ ๋ฆฌ๋” ํŒŒํ‹ฐ์…˜์„ ํŒ”๋กœ์›Œ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ•˜๊ฒŒ๋จ

      • ํ•˜์ง€๋งŒ ํŒŒํ‹ฐ์…˜ ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์„ ๊ฒฝ์šฐ ๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜ํ–‰์ด ๋А๋ ค์ ธ ์žฅ์• ๋ณต๊ตฌ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ

    • ์ถ”ํ›„ ํŒŒํ‹ฐ์…˜ ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅ

      • ์นดํ”„์นด์—์„œ ํŒŒํ‹ฐ์…˜ ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์€ ์•„๋ฌด๋•Œ๋‚˜ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํŒŒํ‹ฐ์…˜ ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์€ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ. ๋งŒ์•ฝ ์ค„์ด๊ณ  ์‹ถ๋‹ค๋ฉด ํ† ํ”ฝ ์ž์ฒด๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ ๋ง๊ณ ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Œ

์˜คํ”„์…‹๊ณผ ๋ฉ”์‹œ์ง€์ˆœ์„œ

  • ์˜คํ”„์…‹(offset)

    • ํŒŒํ‹ฐ์…˜๋งˆ๋‹ค ๋ฉ”์‹œ์ง€๊ฐ€ ์ €์žฅ๋˜๋Š” ์œ„์น˜

    • ํŒŒํ‹ฐ์…˜ ๋‚ด์—์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์œ ๋‹ˆํฌํ•˜๊ฒŒ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆซ์ž ํ˜•ํƒœ๋กœ์„œ ๋™์ผ ํŒŒํ‹ฐ์…˜ ๋‚ด ๋ฉ”์‹œ์ง€์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•ด์คŒ

    • ์ปจ์Šˆ๋จธ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋งˆ๋‹ค ์˜คํ”„์…‹ ์ •๋ณด๋ฅผ ์ปค๋ฐ‹(commit)ํ•จ์œผ๋กœ์จ ๊ธฐ์กด์— ์–ด๋”” ์œ„์น˜๊นŒ์ง€ ๊ฐ€์ ธ์™”๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ๋จ

ํŒŒํ‹ฐ์…˜๊ณผ ๋ฉ”์‹œ์ง€์ˆœ์„œ

  • ํŒŒํ‹ฐ์…˜์„ ์—ฌ๋Ÿฌ๊ฐœ ์ง€์ •ํ•  ๊ฒฝ์šฐ

    • ํ”„๋กœ์Šˆ๋จธ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ๋•Œ, ํŒŒํ‹ฐ์…˜์ด ์—ฌ๋Ÿฌ๊ฐœ์ธ ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€๋Š” ๊ฐ๊ฐ์˜ ํŒŒํ‹ฐ์…˜์œผ๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐฐ๋ถ„ (Round-robin ๋ฐฉ์‹)

    • ๋ฉ”์‹œ์ง€์˜ ์ˆœ์„œ๋Š” ์˜ค๋กœ์ง€ ๋™์ผ ํŒŒํ‹ฐ์…˜ ๋‚ด ์˜คํ”„์…‹์„ ๊ธฐ์ค€์œผ๋กœ๋งŒ ๋ณด์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์—,

    • ์—ฌ๋Ÿฌ๊ฐœ์˜ ํŒŒํ‹ฐ์…˜์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋™์ผ ํŒŒํ‹ฐ์…˜ ๋‚ด์—์„œ๋Š” ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€๋งŒ, ํŒŒํ‹ฐ์…˜๊ณผ ํŒŒํ‹ฐ์…˜ ์‚ฌ์ด์—์„œ๋Š” ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•  ๊ฒฝ์šฐ ์ˆœ์„œ๊ฐ€ ์„ž์ผ ์ˆ˜ ์žˆ์Œ

    • ์ „์ฒด ๋ฉ”์‹œ์ง€์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ partition์„ 1๊ฐœ๋กœ๋งŒ ์„ค์ •ํ•ด์•ผ ํ•จ

      • ํ•˜์ง€๋งŒ ํŒŒํ‹ฐ์…˜์ด ํ•˜๋‚˜์ด๋ฏ€๋กœ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ

๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜

  • ๊ณ ๊ฐ€์šฉ์„ฑ ๋ฐ ๋ฐ์ดํ„ฐ ์œ ์‹ค์„ ๋ง‰๊ธฐ ์œ„ํ•ด replication์„ ์ˆ˜ํ–‰

  • ์›๋ณธ ํŒŒํ‹ฐ์…˜์˜ ๊ฒฝ์šฐ '๋ฆฌ๋”'๊ฐ€ ๋˜๊ณ , ๋ณต์ œ ํŒŒํ‹ฐ์…˜์˜ ๊ฒฝ์šฐ 'ํŒ”๋กœ์›Œ'๊ฐ€ ๋จ

  • ๋งŒ์•ฝ ๋ฆฌ๋” ํŒŒํ‹ฐ์…˜์ด ์žˆ๋Š” ๋ธŒ๋กœ์ปค๊ฐ€ ๋‹ค์šด๋  ๊ฒฝ์šฐ, ๋ณต์ œ ํŒŒํ‹ฐ์…˜์„ ๊ฐ€์ง„ ๋ธŒ๋กœ์ปค์˜ ํŒ”๋กœ์›Œ ํŒŒํ‹ฐ์…˜์ด ์ƒˆ๋กœ์šด ๋ฆฌ๋”๊ฐ€ ๋˜์–ด ์ •์ƒ์ ์œผ๋กœ ํ”„๋กœ๋“€์„œ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ

ISR(In Sync Replica)

  • ๋ฆฌ๋”์™€ ํŒ”๋กœ์›Œ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ทธ๋ฃน

  • ๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ทธ๋ฃน ๋‚ด ๋™๊ธฐํ™” ๋ฐ ์‹ ๋ขฐ์„ฑ ์œ ์ง€

  • ํŒ”๋กœ์›Œ๋Š” Read/Write ๊ถŒํ•œ์ด ์—†๊ณ  ์˜ค๋กœ์ง€ ๋ฆฌ๋”๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ํŒ”๋กœ์›Œ๊ฐ€ ๋‹ค์šด๋˜์„œ ๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ชปํ•  ๊ฒฝ์šฐ ๋™๊ธฐํ™” ๋ฌธ์ œ ๋ฐœ์ƒ

  • ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋กœ ์ธํ•ด, ๋ฌธ์ œ๊ฐ€ ๊ฐ์ง€๋œ ํŒ”๋กœ์›Œ(์„ค์ •๋œ ์ผ์ •์ฃผ๊ธฐ(replica.lag.time.max.ms)๋งŒํผ ์š”์ฒญ์ด ์˜ค์ง€ ์•Š๋Š” ํŒ”๋กœ์›Œ)๋Š” ISR ๊ทธ๋ฃน์—์„œ ์ถ”๋ฐฉ๋จ

Consumer ๊ทธ๋ฃน

  • ์ปจ์Šˆ๋จธ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•˜๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ํ”„๋กœ๋“€์„œ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์†๋„๊ฐ€ ๋” ๋นจ๋ผ์„œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ ์  ์Œ“์ผ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ

  • ๋™์ผ ํ† ํ”ฝ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ์ปจ์Šˆ๋จธ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์ด๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต

  • ์•„๋ž˜์™€ ๊ฐ™์ด ํ•˜๋‚˜์˜ consumer๊ฐ€ ํ”„๋กœ๋“€์„œ์˜ ๋ฉ”์‹œ์ง€ ์ „์†ก ์†๋„๋ฅผ ๋”ฐ๋ผ๊ฐ€์ง€ ๋ชปํ•  ๊ฒฝ์šฐ

  • ์•„๋ž˜์™€ ๊ฐ™์ด ์ปจ์Šˆ๋จธ๋ฅผ ํ™•์žฅํ•˜์—ฌ ํ•˜๋‚˜์˜ ํŒŒํ‹ฐ์…˜ ๋‹น ํ•˜๋‚˜์˜ ์ปจ์Šˆ๋จธ๊ฐ€ ์—ฐ๊ฒฐ๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Œ (๋ฆฌ๋ฐธ๋Ÿฐ์Šค, rebalance)

  • ํ•˜๋‚˜์˜ ํŒŒํ‹ฐ์…˜ ๋‹น ํ•˜๋‚˜์˜ ์ปจ์Šˆ๋จธ๊ฐ€ 1:1 ์—ฐ๊ฒฐ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ํ™•์žฅํ•  ์ˆ˜๋Š” ์—†์Œ

  • ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์€ ์ปจ์Šˆ๋จธ๊ฐ€ ์ผ์ •ํ•œ ์ฃผ๊ธฐ๋กœ ํ•˜๋Š” ํ•˜ํŠธ๋น„ํŠธ(์ปจ์Šˆ๋จธ๊ฐ€ poll()ํ•˜๊ฑฐ๋‚˜ ๋ฉ”์‹œ์ง€์˜ ์˜คํ”„์…‹์„ ์ปค๋ฐ‹ํ• ๋•Œ ๋ณด๋ƒ„)๋ฅผ ํ†ตํ•ด ์ปจ์Šˆ๋จธ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ง€ํ•˜๋ฉฐ, ๋งŒ์•ฝ ์˜ค๋žซ๋™์•ˆ ํ•˜ํŠธ๋น„ํŠธ๊ฐ€ ์—†๋‹ค๋ฉด ํ•ด๋‹น ์ปจ์Šˆ๋จธ์˜ ์„ธ์…˜์ด ํƒ€์ž„์•„์›ƒ๋˜๊ณ  ๋ฆฌ๋ฐธ๋Ÿฐ์Šค๋ฅผ ์ˆ˜ํ–‰

  • ์นดํ”„์นด์˜ ๋ฉ”์‹œ์ง€ ํ ์‹œ์Šคํ…œ์€ ํ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ๊ฐ€๋„ ์‚ฌ๋ผ์ง€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์ด ๋™์ผ ํ† ํ”ฝ์— ๋ถ™์„ ์ˆ˜ ์žˆ์Œ

5. ์นดํ”„์นด๋Š” ์–ด๋–ค ๊ฒฝ์šฐ ํ•„์š”ํ•œ๊ฐ€?

Kafka vs RabbitMQ vs Google Cloud Pub/Sub

  • ๋ชจ๋‘ ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ์ œ๊ณตํ•˜๋ฉฐ, ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์Œ

RabbitMQ

  • AMQP(Advanced Message Queuing Protocol, ํด๋ผ์ด์–ธํŠธ์™€ ๋ฏธ๋“ค์›จ์–ด๊ฐ„ ๋ฉ”์‹œ์ง€ ๊ตํ™˜ ๊ฐœ๋ฐฉํ˜• ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ)์„ ์œ„ํ•ด ๊ฐœ๋ฐœ ๋˜์–ด ๋‹ค๋ฅธ AMQP ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜ MQ(ex. RabbitMQ, ActiveMQ, ZeroMQ)๋“ฑ๊ณผ ๋ฐ์ดํ„ฐ ๊ตํ™˜์ด ์ˆ˜์›”

  • ํ•„์š”์— ๋”ฐ๋ผ ๋™๊ธฐ/๋น„๋™๊ธฐ ๊ตฌํ˜„ ๊ฐ€๋Šฅ

  • ์œ ์—ฐํ•œ ๋ผ์šฐํŒ…์ด ๊ฐ€๋Šฅ(exchanger๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ ์ ˆํžˆ ๊ฐ๊ฐ์˜ queue์— ๋ถ„๋ฐฐ)ํ•˜์—ฌ ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ๊ณ , ๊ด€๋ฆฌUI๊ฐ€ ์ง๊ด€์ ์ด๊ณ  ํŽธ๋ฆฌ

  • broker ์ค‘์‹ฌ์ ์ด๋ฉฐ, producer์™€ consumer๊ฐ„ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ๋ณด์žฅ์— ์ดˆ์ ์„ ๋งž์ถ”์–ด ์‹ ๋ขฐ์„ฑ์ด ๋†’์Œ

  • 20k+/sec ์ฒ˜๋ฆฌ ๋ณด์žฅ

Kafka

  • ๊ณ ์„ฑ๋Šฅ, ๊ณ ๊ฐ€์šฉ์„ฑ, ํ™•์žฅ์„ฑ

  • ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์œผ๋กœ์„œ, ํ™•์žฅ์„ฑ(scalability) ๋ฐ ๊ณ ๊ฐ€์šฉ์„ฑ(high available)์ด ๋†’์Œ

  • ๋”ฐ๋ผ์„œ, ๋…ธ๋“œ ์žฅ์• ์— ๋Œ€ํ•œ ๋Œ€์‘์„ฑ์ด ๋†’์Œ

  • ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด ๋„คํŠธ์›Œํฌ ์™•๋ณต ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ

  • ๋””์Šคํฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•จ์œผ๋กœ์จ ์˜์†์„ฑ(persistency)์„ ๋ณด์žฅ (์ฆ‰, ์˜ค๋ฅ˜ ์‹œ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅ)

  • Producer ์ค‘์‹ฌ์ ์ด๋ฉฐ, ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ๋ณด์žฅ์ด optional

    • ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ๋ณด์žฅ์„ ํ•  ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ์†๋„๊ฐ€ ๋А๋ ค์ ธ(๋ฆฌ๋”์™€ ํŒ”๋กœ์›Œ ๋ชจ๋‘์—๊ฒŒ ack(์‘๋‹ต ์Šน์ธ)์„ ๋ฐ›์•ผ์•„ ํ•˜๋ฏ€๋กœ) ์นดํ”„์นด์˜ ์ฒ˜๋ฆฌ์†๋„ ์ธก๋ฉด์˜ ์žฅ์ ์ด ์ƒ์‡„

  • ๋ผ์šฐํŒ… ๊ธฐ๋Šฅ์ด ์—†์Œ (producer๊ฐ€ ์ง์ ‘ ์ ์ ˆํ•œ topic๊ณผ partion์œผ๋กœ ๋ณด๋‚ด์ค˜์•ผ ํ•จ)

  • 100k+/sec ์ฒ˜๋ฆฌ ๋ณด์žฅ

์ฒ˜๋ฆฌ์†๋„ ๋น„๊ต

  • Producer์˜ ๋ฉ”์‹œ์ง€ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ ๋น„๊ต

  • Consumer ๋ฉ”์‹œ์ง€ ์ˆ˜์‹  ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ ๋น„๊ต

Kafka

  • ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰ ๋ฐ ๊ณ ์„ฑ๋Šฅ/๋ถ„์‚ฐ/์Šค์ผ€์ผ ์•„์›ƒ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ

  • ๊ฐ€์šฉ์„ฑ(์žฅ์•  ๋Œ€์‘)์ด ๋†’์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

  • ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ๋ณด์žฅ์ด ํ•„์ˆ˜์ ์ด์ง€ ์•Š์€ ๊ฒฝ์šฐ

  • ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

  • ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ

  • ๋ฉ”์‹œ์ง€ ์˜์†์„ฑ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ

RabbitMQ

  • ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๋ฉ”์‹œ์ง€ ํ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ (๋ผ์šฐํŒ… ๊ธฐ๋Šฅ์ด ์œ ์—ฐํ•จ)

  • ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ๋ณด์žฅ์ด ํ•„์ˆ˜์ ์ธ ๊ฒฝ์šฐ

  • ๋ฉ”์‹œ์น˜ ์ฒ˜๋ฆฌ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ฒฝ์šฐ

  • ๋ฉ”์‹œ์ง€ ์˜์†์„ฑ X

Google Pub/Sub

  • Kafka์™€ ์œ ์‚ฌํ•œ ์•„ํ‚คํ…์ฒ˜ (topic ๊ฐœ๋…)

  • ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋กœ์„œ ๋ณ„๋„์˜ ์„ค์น˜๋‚˜ ์šด์˜์ด ํ•„์š”์—†์Œ

  • ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์ˆœ์„œ ๋ณด์žฅ์ด ์•ˆ๋จ(๋ถ„์‚ฐํ˜• ์•„ํ‚คํ…์ฒ˜)

  • ๋ฉ”์‹œ์ง€ ์˜์†์„ฑ X (์ €์žฅ๊ธฐ๊ฐ„ ์ตœ๋Œ€ 7์ผ)


References

Last updated