[Kafka] Apache Kafka๋Š” ๋ฌด์—‡์ด๊ณ  ์™œ ์„ฑ๋Šฅ์ด ๋น ๋ฅผ๊นŒ?

๋ฐ˜์‘ํ˜•

์นดํ”„์นด๋ž€ ๋ฌด์—‡์ผ๊นŒ? ์นดํ”„์นด๋ž€ ๋ง์„ ๋“ค์–ด๋ณธ ์ ์€ ์žˆ์ง€๋งŒ ์•„์ง ์‚ฌ์šฉํ•ด๋ณธ ์ ์ด ์—†๋‹ค๋ฉด ์ด ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋˜๊ฒŒ ์ƒ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์นดํ”„์นด๋Š” Linkedin์—์„œ ์ฒ˜์Œ ๊ฐœ๋ฐœํ•˜์—ฌ ์•„ํŒŒ์น˜ ์˜คํ”ˆ ์†Œ์Šค๊นŒ์ง€ ์˜ค๊ฒŒ ๋œ ๋Œ€์šฉ๋Ÿ‰ ๋ฉ”์‹œ์ง€ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.

 

 

 

๋ฉ”์‹œ์ง€ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ํ”Œ๋žซํผ

์—ฌ๊ธฐ์„œ ์ด์•ผ๊ธฐํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ž€, ์šฐ๋ฆฌ๊ฐ€ ๊ฐœ๋ฐœํ•œ ์ผ๋ จ์˜ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋ น ์šฐ๋ฆฌ๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ์„œ๋กœ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ํ•จ์ˆ˜๋ผ๋ฆฌ ํ†ต์‹ ์„ ์œ„ํ•ด์„œ ๋ณด๋‚ด๊ณ  ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์šฐ๋ฆฌ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” ์–ด๋–จ๊นŒ์š”? ์„œ๋กœ ํ”„๋กœ์„ธ์Šค๋„ ๋‹ค๋ฅด๊ณ  ์ธ์Šคํ„ด์Šค๋„ ๋‹ค๋ฅธ ์ƒํ™ฉ์—์„œ ๊ฐ ์„œ๋น„์Šค๋ผ๋ฆฌ ํ†ต์‹ ํ•˜๋ ค๋ฉด ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ๋ฉ”์‹œ์ง€ ํ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

  • Mosquitto
  • Redis Pub/Sub

 

๋ฉ”์‹œ์ง€ ํ๋Š” ์ƒ๋Œ€ ์„œ๋น„์Šค์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์‹คํ•˜๊ฒŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋ณด์ฆํ•˜๋ฉฐ ๊ทธ๋ ‡์ง€ ์•Š๋Š” ๋™์•ˆ์—๋Š” ์ž์‹ ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ง€๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. 

 

Kafka๋Š” ์ด๋Ÿฐ ์‹œ์Šคํ…œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ ๋” ๋งŽ๊ณ , ๋” ๋ฐฉ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. 

 

์šฐ๋ฆฌ๊ฐ€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋‹ค๋ณด๋ฉด ์ˆ˜์‹ญ, ์ˆ˜๋ฐฑ๊ฐœ์˜ ์„œ๋น„์Šค๊ฐ„ ํ†ต์‹ ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์„œ๋น„์Šค์—์„œ ๋งŽ์€ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ํ…๋ฐ, ์ด๊ฒƒ์ด ์ˆ˜๋ฐฑ๊ฐœ๋กœ ๋งŽ์•„์ง€๋ฉด ๋ถ„์‚ฐํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด์— ์ ํ•ฉํ•œ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋ฐ”๋กœ ์นดํ”„์นด์ž…๋‹ˆ๋‹ค.

 

 

 

Kafka Architecture

์ผ๋ฐ˜์ ์ธ ๋ฉ”์‹œ์ง€ ํ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐœํ–‰ํ•˜๋Š” Producer(Source)์™€ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ๋…ํ•˜๋Š” Consumer(Target), ๊ทธ๋ฆฌ๊ณ  MQ๋กœ ๊ตฌ์„ฑ๋˜์–ด์ง‘๋‹ˆ๋‹ค.

 

 

ํ•˜์ง€๋งŒ Kafka๋Š” ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋Ÿ‰์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ Consumer Group๊ณผ ๊ทธ๋“ค ๊ทธ๋ฃน์ด ๋ถ„์‚ฐํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํŒŒํ‹ฐ์…˜ ๋“ฑ ์ผ๋ฐ˜์ ์ธ ๋ฉ”์‹œ์ง€ ํ๋ณด๋‹ค ์ข€ ๋” ๊ตฌ์„ฑ์ด ํ’๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

 

  • Producer: Kafka๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ์—ญํ•  ์ธ์Šคํ„ด์Šค
  • Consumer: Kafka์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ๊ฐ€๋Š” ์—ญํ•  ์ธ์Šคํ„ด์Šค
  • Message: Producer๋ฅผ ํ†ตํ•ด ๋ณด๋‚ด๊ณ , Consumer๊ฐ€ ์ฝ์–ด๊ฐ€๋Š” ๋ฐ์ดํ„ฐ ์กฐ๊ฐ
  • Topic: ๋ฐ์ดํ„ฐ์˜ ๊ฐœ๋…์  ๋ถ„๋ฆฌ ๋‹จ์œ„, Producer์™€ Consumer๊ฐ€ ํ†ต์‹ ํ•˜๋Š” ํ•˜๋‚˜์˜ ์ฑ„๋„
  • Broker: 
    - Kafka ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ์Šคํ„ด์Šค 
    - Topic์„ ์„œ๋น™ํ•˜๋Š” ํ•˜๋‚˜์˜ ์ฃผ์ฒด
    - ์—ฌ๋Ÿฌ ๊ฐœ์˜ Broker๊ฐ€ ํ•˜๋‚˜์˜ topic์„ ์„œ๋น™ํ•  ์ˆ˜ ์žˆ์Œ(๊ณ ๊ฐ€์šฉ์„ฑ)
    - ํ•˜๋‚˜์˜ Broker๊ฐ€ ์—ฌ๋Ÿฌ topic์„ ์„œ๋น™ํ•  ์ˆ˜ ์žˆ์Œ
    - ํ•˜๋‚˜์˜ topic์ด ์—ฌ๋Ÿฌ Broker์— ์„œ๋น™๋  ์ˆ˜ ์žˆ์Œ

  • Partitions: 
    - ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๋ฐ ๊ณ ์„ฑ๋Šฅ์„ ์–ป๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜์˜ ํ† ํ”ฝ์„ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ๋‚˜๋ˆˆ ๊ฒƒ
    - topic์ด ํŒŒํ‹ฐ์…˜์— ๋‚˜๋ˆ ์ง€๋Š” ํ˜•ํƒœ, ๋”ฐ๋ผ์„œ topic์„ ํŒŒํ‹ฐ์…˜์˜ ๊ทธ๋ฃน์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Œ
    - ์‹ค์ œ๋กœ ๋””์Šคํฌ์— ์–ด๋–ป๊ฒŒ ์ €์žฅ๋˜๋Š”์ง€๋ฅผ ๊ฐ€๋ฅด๋Š” ๊ธฐ์ค€ -> ๋””์Šคํฌ์—๋Š” ํŒŒํ‹ฐ์…˜ ๋‹จ์œ„๋กœ ์ €์žฅ๋จ.
    - Message๋Š” topic ๋‚ด ์–ด๋–ค ํŒŒํ‹ฐ์…˜์— ์ €์žฅ๋˜์–ด ์žˆ์Œ

  • Offset: Message๋Š” ํŒŒํ‹ฐ์…˜ ๋‚ด ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅ๋˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ์ˆœ์„œ๊ฐ€ offset
  • Zookeeper: Kafka ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐ Broker Healthcheck ๋“ฑ์„ ๋‹ด๋‹น
  • Segment: Producer๊ฐ€ ์ „์†กํ•œ ์‹ค์ œ ๋ฉ”์‹œ์ง€๊ฐ€ Broker์˜ ๋กœ์ปฌ ๋””์Šคํฌ์— ์ €์žฅ๋˜๋Š” ํŒŒ์ผ

 

 

Kafka์˜ ํŠน์„ฑ

๊ตฌ์กฐ๋งŒ ๋ณด๊ธฐ์—๋Š” ์นดํ”„์นด๊ฐ€ ๋Œ€์šฉ๋Ÿ‰ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ์ง€ ํŒŒ์•…์ด ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์นดํ”„์นด์˜ ํŠน์„ฑ์„ ๋ณด๋ฉฐ ๋Œ€์šฉ๋Ÿ‰ ์ฒ˜๋ฆฌ์— ์–ด๋–ค ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์ด ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

๋ถ„์‚ฐ ์‹œ์Šคํ…œ

์นดํ”„์นด๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์ด๋ž€, ๋„คํŠธ์›Œํฌ ์ƒ์— ์—ฐ๊ฒฐ๋œ ์ปดํ“จํ„ฐ ๊ทธ๋ฃน์„ ๋งํ•˜๋ฉฐ ํ•˜๋‚˜์˜ ๋งˆ์Šคํ„ฐ ์ปดํ“จํ„ฐ๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปดํ“จํ„ฐ๋ฅผ ๋งˆ์น˜ ํ•˜๋‚˜์˜ ์ปดํ“จํ„ฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ์žฅ์ ์„ ์ง€๋‹™๋‹ˆ๋‹ค.

 

  • ๋‹จ์ผ ์‹œ์Šคํ…œ์— ๋น„ํ•ด ์ฒ˜๋ฆฌ/๋ฐ˜์‘ ์†๋„๊ฐ€ ๋น ๋ฆ„
  • ์žฅ์•  ๋Œ€์‘ ์œ ๋ฆฌ (ํ•˜๋‚˜์˜ ๋…ธ๋“œ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋„ ๋‹ค๋ฅธ ๋…ธ๋“œ์—์„œ ๋Œ€์‘)
  • ์‹œ์Šคํ…œ ํ™•์žฅ ์šฉ์ด

 

๋‹จ์ผ ์‹œ์Šคํ…œ์—์„œ๋Š” ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์—์„œ ๋ชจ๋“  ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ์ด์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์—์„œ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์„ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ๋‚˜๋ˆ ์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๊ณ  ํ•œ ๋ฒˆ ๊ตฌ์ถ•ํ•ด๋†“์œผ๋ฉด N๊ฐœ ์ด์ƒ ํ™•์žฅํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

 

 

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

๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ค์–ด๊ฐ€๋Š” ๋น„์šฉ์€ I/O ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์นดํ”„์นด๋Š” Producer๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ, ์ด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ๋””์Šคํฌ์ž…๋‹ˆ๋‹ค. ์–ด? ๊ทธ๋Ÿฐ๋ฐ, ๋””์Šคํฌ๋Š” ๋Š๋ฆฌ์ž–์•„์š”?

 

๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋””์Šคํฌ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋น„ํ•ด ๋Š๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์นดํ”„์นด๋Š” ์ด๋Ÿฌํ•œ ๋””์Šคํฌ์˜ ๋‹จ์ ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ํŽ˜์ด์ง€ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

ํŽ˜์ด์ง€ ์บ์‹œ๋ž€, Disk I/O ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ ํ•œ ๋ฒˆ ์ฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ด๋‘์—ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ๋Š” Disk๊ฐ€ ์•„๋‹Œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

  • Kafka๋Š” OS๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํŽ˜์ด์ง€ ์บ์‹œ๋ฅผ ํ™œ์šฉ
  • ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ผ๋ถ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด Disk I/O์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ค„์—ฌ ์„ฑ๋Šฅ ํ–ฅ์ƒ

 

ํŠนํžˆ ํ›„์ž์˜ ํŠน์„ฑ ๋•Œ๋ฌธ์— Kafka์—์„œ๋Š” JVM Heap ํฌ๊ธฐ๋ฅผ 5GB๋กœ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐ€๊ธ‰์  Kafka ์„œ๋ฒ„ ์œ„์— ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜ฌ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚จ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํŽ˜์ด์ง€ ์บ์‹œ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

 

 

Zero copy

Linux OS๋ฅผ ๊ณต๋ถ€ํ•ด๋ณด์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด ์ด ์šฉ์–ด์— ๋Œ€ํ•ด ์ต์ˆ™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์นดํ”„์นด๋Š” Zero copy๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์•ž์„œ ์นดํ”„์นด๋Š” ๋””์Šคํฌ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฐ”๋กœ ๋””์Šคํฌ์— ์ €์žฅํ•ด ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

์ด ๋•Œ Disk I/O๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„์˜ ํŽ˜์ด์ง€ ์บ์‹œ๋ฅผ ์ด์šฉํ•ด์„œ ์ด์ „์— ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋Š” Disk I/O๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์ด์ฃ .

 

์ „ํ†ต์ ์ธ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐฉ์‹์€ ๋ณดํ†ต ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฌ๋ฆฐ ํ›„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

 

Zero copy๋Š” Linux Kernel ํ•จ์ˆ˜ ์ค‘ sendFile ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. 

์—ฌ๊ธฐ์„œ sendFile์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฌ๋ฆฌ์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ๋„คํŠธ์›Œํฌ์— ์ „์†กํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, Kafka๋Š” ์ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜์—ฌ I/O๋ฅผ ์ค„์—ฌ ๋น ๋ฅธ ์†๋„๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

๋ฐฐ์น˜/์••์ถ• ์ „์†ก

TCP ํ†ต์‹ ์˜ ๋‹จ์ ์€ ํ•œ ๋ฒˆ ์ „์†กํ•  ๋•Œ 3 hand shake, 4 hand shake ๋“ฑ ๋งŽ์€ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๊ธ‰์  ๋งŽ์€ ๋ฐ์ดํ„ฐ์˜ ์ „์†ก์€ ์ž‘๊ฒŒ ์—ฌ๋Ÿฌ๋ฒˆ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ฌถ์–ด์„œ ํ•œ ๋ฒˆ์— ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ์Šต๋‹ˆ๋‹ค.

 

์นดํ”„์นด๋Š” ๋ฌถ์–ด์„œ ๋ณด๋‚ด๊ณ , ๋ฌถ์–ด์„œ ๋ฐ›๋Š” ๋ฐฐ์น˜ ์ „์†กํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ตœ์†Œํ™” ํ•˜๋ฉฐ ์„ฑ๋Šฅ์„ ๋ณด์ฆํ•ฉ๋‹ˆ๋‹ค.

 

๋˜ํ•œ ์••์ถ• ์ „์†ก์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ด๋ฉด์„œ ๋„คํŠธ์›Œํฌ ๋น„์šฉ๋„ ์ ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค.

 

  • ๋ฉ”์‹œ์ง€ ์ „์†ก์‹œ ๋†’์€ ์••์ถ• ์ „์†ก์„ ๊ถŒ์žฅ
  • ์••์ถ•์„ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ(bandwith) ์ถ•์†Œ

 

์—ฌ๊ธฐ์„œ ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์ด๋ž€, ๋„คํŠธ์›Œํฌ๊ฐ€ ๋‹จ์œ„ ์‹œ๊ฐ„ ๋‚ด ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํฌ๊ธฐ์˜ ์ „๋‹ฌ ์šฉ๋Ÿ‰์„ ์˜๋ฏธํ•˜๋Š”๋ฐ ๋Œ€์—ญํญ์ด ํฌ๋ฉด ํด์ˆ˜๋ก ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ์€ ๋Œ€์—ญํญ์„ ์‚ฌ์šฉํ•ด ๋„คํŠธ์›Œํฌ ๋น„์šฉ์„ ์ค„์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

๊ณ ๊ฐ€์šฉ์„ฑ ๋ณด์žฅ

๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ๊ณ ๊ฐ€์šฉ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

 

 

 

Kafka์˜ Low Latency I/O

์•„๋ฌด๋ฆฌ Zero copy, ํŽ˜์ด์ง€ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•ด๋„ Disk I/O ๋ฐœ์ƒ์œผ๋กœ ์ธํ•œ ๊ทผ๋ณธ์ ์ธ ์„ฑ๋Šฅ ์ด์Šˆ๋Š” ํ”ผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์นดํ”„์นด๋Š” Disk I/O์˜ ์„ฑ๋Šฅ์„ ์ตœ๋Œ€ํ•œ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ ์นดํ”„์นด๋Š” Sequential I/O๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

  • ์ˆœ์ฐจ์  ๋ฐ์ดํ„ฐ ์ €์žฅ์„ ํ†ตํ•ด ์ฝ๊ธฐ ์ง€์—ฐ ๊ฐ์†Œ

 

์šฐ๋ฆฌ๊ฐ€ ํ‘œ์ค€์œผ๋กœ ๋งํ•˜๋Š” ๋””์Šคํฌ์˜ ์ฝ๊ธฐ ์†๋„๋Š” ์‹ค์ œ ๋””์Šคํฌ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์†๋„๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ์ฐพ๋Š” ์‹œ๊ฐ„(seek time)์— ์˜ํ•ด ๋””์Šคํฌ ์ฝ๊ธฐ ์†๋„๊ฐ€ ์ง€์—ฐ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์›์ธ์€ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๋žœ๋คํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์นดํ”„์นด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅํ•˜์—ฌ ์ด๋Ÿฌํ•œ Seek Time์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ, ํŒŒ์ผ์„ ์“ฐ๋Š” ์œ„์น˜๋Š” OS๊ฐ€ ๊ฒฐ์ •ํ•ด์ค„ํ…๋ฐ, ์ด๊ฑธ ์นดํ”„์นด๊ฐ€ ์–ด๋–ป๊ฒŒ ์ œ์–ดํ•˜๋Š”๊ฑธ๊นŒ์š”?

 

์นดํ”„์นด๋Š” ๊ฑฐ๋Œ€ํ•œ ํŒŒ์ผ๋“ค(๊ฐ default: 1GB)๋กœ ์ €์žฅํ•˜๋Š”๋ฐ, ์‹ค์ œ๋กœ ๋ฉ”์‹œ์ง€ ํ•˜๋‚˜๊ฐ€ 1GB์ธ ๊ฒƒ์ด ์•„๋‹Œ ํ•ด๋‹น ํŒŒ์ผ ํ•˜๋‚˜์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๊ด€ํ•˜์—ฌ ๋ชจ๋“  ๋ฉ”์‹œ์ง€๊ฐ€ expire ๋˜์—ˆ์„ ๋•Œ ํ•ด๋‹น ํŒŒ์ผ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

 

๊ฒฐ๊ตญ ์นดํ”„์นด๋Š” 100% ์™„๋ฒฝํ•œ Sequential I/O๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฏธ๋ฆฌ ๊ฑฐ๋Œ€ํ•œ ํŒŒ์ผ ์‚ฌ์ด์ฆˆ๋ฅผ ํ•œ ๊ฐœ ์žก๊ณ  ๊ฑฐ๊ธฐ์„œ line by line์œผ๋กœ ์ €์žฅํ•˜์—ฌ I/O ์„ฑ๋Šฅ์„ ๋†’์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 100%๊ฐ€ ์•„๋‹Œ 8~90% ์ •๋„์˜ ์ˆœ์ฐจ์  I/O๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์ด์ฃ .

 

์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์ด ์žˆ์–ด ์•„๋ž˜์™€ ๊ฐ™์€ ์ œ์•ฝ์ด ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

 

  • ๊ฐ€๊ธ‰์  ๋‹ค๋ฅธ ์•ฑ์ด ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๋…๋ฆฝ์ ์ธ ํŒŒ์ผ ์‹œ์Šคํ…œ ์‚ฌ์šฉ ๊ถŒ์žฅ.
  • ๋ฐ์ดํ„ฐ ์‚ฌ์ด์ฆˆ๊ฐ€ ํฐ ๋ฉ”์‹œ์ง€์˜ ์ „์†ก์€ ์ง€์–‘

 

๋งŒ์•ฝ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ, ๋‹ค๋ฅธ ์•ฑ์— ์˜ํ•ด I/O๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ํŒŒํŽธํ™”๊ฐ€ ์ƒ๊ธฐ๋ฉด ์นดํ”„์นด์—๋„ ๊ทธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ ๋˜๋ฉฐ ๋˜ํ•œ, ๋ฐ์ดํ„ฐ ์‚ฌ์ด์ฆˆ๊ฐ€ ํฐ ๋ฉ”์‹œ์ง€๊ฐ€ ๋Œ€๋Ÿ‰์œผ๋กœ ์ „์†ก๋œ๋‹ค๋ฉด ์นดํ”„์นด ๋‹จ๋…์œผ๋กœ๋„ ๋””์Šคํฌ ํŒŒํŽธํ™”๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๊ธ‰์ ์ด๋ฉด ๋ฐ์ดํ„ฐ ์‚ฌ์ด์ฆˆ๋ฅผ ์ค„์ด๋Š” ๊ฒŒ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

๋งˆ์น˜๋ฉฐ…

์—ฌ๊ธฐ๊นŒ์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ Kafka์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ์นดํ”„์นด๋Š” ๋Œ€๊ทœ๋ชจ ๋ถ„์‚ฐ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ํ”Œ๋žซํผ์œผ๋กœ์จ ๊ธฐ์กด์˜ ๋ฉ”์‹œ์ง€ ํ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋˜ ๋‹จ์ ๊ณผ ๋น„์šฉ์„ ์ค„์ด๋ฉด์„œ ํšจ์œจ์ ์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ›Œ๋ฅญํ•œ ์†Œํ”„ํŠธ์›จ์–ด์ž…๋‹ˆ๋‹ค.

 

๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” ์นดํ”„์นด์˜ ์ฝ”๋””๋„ค์ดํ„ฐ์ธ Zookeeper์— ๋Œ€ํ•ด์„œ ์ž‘์„ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•

Tistory Comments 0