[MSA] kafka ๊ฐœ์š”

Updated:

Categories:

Tags: , ,

๐Ÿ“Œ ๊ฐœ์ธ์ ์ธ ๊ณต๊ฐ„์œผ๋กœ ๊ณต๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๋ณต์Šตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
์ •ํ™•ํ•˜์ง€ ์•Š์€ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ๋ฐ”๋ž๋‹ˆ๋‹ค :๐Ÿ˜ธ
[ํ‹€๋ฆฐ ๋‚ด์šฉ์€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๋ณต๋ฐ›์œผ์‹ค๊ฑฐ์—์š”]

์ธํ”„๋Ÿฐ Dowon Lee๋‹˜์˜ Spring Cloud๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(MSA) ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.๐Ÿ˜Š
Spring Cloud๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(MSA) ๊ฐ•์˜ ๋“ค์œผ๋Ÿฌ ๊ฐ€๊ธฐ๐Ÿ‘ฉโ€๐Ÿซ

Apache Kafka: ๊ณ ์„ฑ๋Šฅ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค์˜ ์ดํ•ด

Apache Kafka๋Š” Apache Software Foundation์—์„œ Scala ์–ธ์–ด๋กœ ๊ฐœ๋ฐœ๋œ ์˜คํ”ˆ ์†Œ์Šค ๋ฉ”์‹œ์ง• ํ”„๋กœ์ ํŠธ์ด๊ณ ,
๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰๊ณผ ๋‚ฎ์€ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ œ๊ณตํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ํ”ผ๋“œ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋žซํผ์œผ๋กœ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค

  • ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋Š” ํ•œ ์‹œ์Šคํ…œ์—์„œ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์„œ๋ฒ„
  • ๋ฉ”์‹œ์ง€๋Š” ์ผ๋ฐ˜์ ์ธ ํ…์ŠคํŠธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ JSON, XML, Java ๊ฐ์ฒด ๋“ฑ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ํ†ตํ•ด ์†ก์‹ ์ž์™€ ์ˆ˜์‹ ์ž๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์˜ ์•ˆ์ •์„ฑ๊ณผ ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

Apache Kafka์˜ ์—ญ์‚ฌ

  • Kafka๋Š” ์›๋ž˜ ๋งํฌ๋“œ์ธ(LinkedIn)์—์„œ ๊ฐœ๋ฐœ
  • 2011๋…„์— ์˜คํ”ˆ ์†Œ์Šค๋กœ ๊ณต๊ฐœ๋˜์—ˆ์œผ๋ฉฐ, ํ˜„์žฌ๋Š” Apache Software Foundation์—์„œ ๊ด€๋ฆฌ
  • 2014๋…„์—๋Š” Kafka ๊ฐœ๋ฐœ์ž๋“ค์ด ์ปจํ”Œ๋ฃจ์–ธํŠธ(Confluent)๋ผ๋Š” ํšŒ์‚ฌ๋ฅผ ์„ค๋ฆฝํ•˜์—ฌ Kafka์˜ ๊ฐœ๋ฐœ๊ณผ ์„œ๋น„์Šค๋ฅผ ์ „๋ฌธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.

kafka ๋“ฑ์žฅ ์ด์ „๊ณผ ์ดํ›„

  1. ๋“ฑ์žฅ ์ด์ „ : ๊ธฐ์กด ์‹œ์Šคํ…œ์˜ ๋ฌธ์ œ์ 

    Kafka ์ด์ „์—๋Š” ๊ฐ ์‹œ์Šคํ…œ์ด ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ์—”๋“œ ํˆฌ ์—”๋“œ(End-to-End) ๋ฐฉ์‹์ด ์ผ๋ฐ˜์ ์ด์—ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค

    • ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์—ฐ๋™ ๊ตฌ์กฐ: ๊ฐ ์‹œ์Šคํ…œ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ํฌ๋งท์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฐœ๋ฐœ๊ณผ ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๋‹ค.
    • ํ™•์žฅ์„ฑ์˜ ํ•œ๊ณ„: ์‹œ์Šคํ…œ์ด ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ํ™•์žฅ์ด ์–ด๋ ต๋‹ค.
    • ์žฅ์•  ๋ฏผ๊ฐ์„ฑ: ํ•˜๋“œ์›จ์–ด๋‚˜ ์šด์˜์ฒด์ œ์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ์žฅ์• ์— ๋ฏผ๊ฐํ•˜๊ฒŒ ๋ฐ˜์‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ๋“ฑ์žฅ ์ดํ›„

    ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Kafka๊ฐ€ ๋“ฑ์žฅ

    • ๋‹จ์ผ ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต: ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์†ก์‹ ์ž๋Š” Kafka๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ณ , ์ˆ˜์‹ ์ž๋Š” Kafka์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.
    • ํ™•์žฅ์„ฑ ํ–ฅ์ƒ: ํด๋Ÿฌ์Šคํ„ฐ๋ง์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๋Œ€์˜ ๋ธŒ๋กœ์ปค๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์Šค์ผ€์ผ๋ง์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰๊ณผ ๋‚ฎ์€ ์ง€์—ฐ ์‹œ๊ฐ„: ๋ฉ”์‹œ์ง€๋ฅผ ์ตœ์ ํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜์—ฌ ๊ณ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ๋‹ค์–‘ํ•œ ์—์ฝ”์‹œ์Šคํ…œ ์—ฐ๋™: ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋น„์Šค, SQL ๊ธฐ๋ฐ˜ ์งˆ์˜ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๊ณผ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kafka์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

1. Kafka ๋ธŒ๋กœ์ปค

์‹คํ–‰๋œ kafka ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ๋งํ•œ๋‹ค.

  • ์—ญํ• : ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์„œ๋ฒ„๋กœ, Kafka ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑ
  • ๊ตฌ์„ฑ: ์ผ๋ฐ˜์ ์œผ๋กœ 3๋Œ€ ์ด์ƒ์˜ ๋ธŒ๋กœ์ปค๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.
  • ์žฅ์ : ๋ธŒ๋กœ์ปค ๊ฐ„์˜ ๋ฉ”์‹œ์ง€ ๋ณต์ œ๋ฅผ ํ†ตํ•ด ํ•œ ๋Œ€์˜ ์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋‹ค๋ฅธ ๋ธŒ๋กœ์ปค๊ฐ€ ์—ญํ• ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด ์•ˆ์ •์„ฑ์ด ๋†’๋‹ค.

2. ZooKeeper

  • ์—ญํ• 
    • Kafka ๋ธŒ๋กœ์ปค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์กฐ์œจํ•˜๋Š” ์ฝ”๋””๋„ค์ดํ„ฐ ์—ญํ• 
    • ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ (Broker Id, Controller ID) ๋“ฑ์„ ์ €์žฅํ•œ๋‹ค.
    • Controller ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.

      ๐Ÿ“Œ - n๊ฐœ์˜ Borker ์ค‘ 1 ๋Œ€๋Š” Controller ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰
      - Controller์˜ ์—ญํ•  : ๊ฐ Broker์—๊ฒŒ ๋‹ด๋‹น ํŒŒํ‹ฐ์…˜ ํ• ๋‹น ์ˆ˜ํ–‰ / Broker ์ •์ƒ ๋™์ž‘ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ด€๋ฆฌ

  • ๊ธฐ๋Šฅ:
    • ๋ธŒ๋กœ์ปค์˜ ์ƒํƒœ ๊ด€๋ฆฌ
    • ๋ฆฌ๋” ๋ธŒ๋กœ์ปค ์„ ์ถœ
    • ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋ธŒ๋กœ์ปค์˜ ์ƒํƒœ ์กฐ์ • ๋ฐ ๋ณต๊ตฌ
  • ๊ตฌ์„ฑ: Kafka๋Š” ZooKeeper์™€ ํ•จ๊ป˜ ๋™์ž‘ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

RabbitMQ

  • ๋ฉ”์„ธ์ง€ ํ์ž‰ ์„œ๋ฒ„
  • ์šฉ๋Ÿ‰์ ์ธ ์ธก๋ฉด์ด๋ผ๋˜๊ฐ€ ์•ˆ์ •์„ฑ ์ธก๋ฉด์—์„œ kafka๊ฐ€ ๋Œ€์šฉ๋Ÿ‰ ์‹œ์Šคํ…œ์—์„œ ๋” ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

Kafka์™€ RabbitMQ์˜ ๋น„๊ต

ํŠน์ง• Apache Kafka RabbitMQ
๋ฉ”์‹œ์ง• ๋ชจ๋ธ ๊ฒŒ์‹œ-๊ตฌ๋…(Publish-Subscribe) ๋ชจ๋ธ ๋ฉ”์‹œ์ง€ ํ์ž‰(Message Queuing) ๋ฐ ๊ฒŒ์‹œ-๊ตฌ๋… ๋ชจ๋ธ
์ฒ˜๋ฆฌ๋Ÿ‰ ์ดˆ๋‹น ์ˆ˜๋ฐฑ๋งŒ ๊ฑด์˜ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ ์ค‘๊ฐ„ ์ •๋„์˜ ์ฒ˜๋ฆฌ๋Ÿ‰ ์ง€์›
์ง€์—ฐ ์‹œ๊ฐ„ ๋‚ฎ์€ ์ง€์—ฐ ์‹œ๊ฐ„ ๋น„๊ต์  ๋‚ฎ์€ ์ง€์—ฐ ์‹œ๊ฐ„
์˜์†์„ฑ ๋””์Šคํฌ์— ๋ฉ”์‹œ์ง€ ์ €์žฅ, ๋กœ๊ทธ ๊ธฐ๋ฐ˜ ์ €์žฅ ๋ฐฉ์‹ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ๋””์Šคํฌ์— ๋ฉ”์‹œ์ง€ ์ €์žฅ, ๋ฉ”์‹œ์ง€ ํ™•์ธ ๋ฐ ์˜์†์„ฑ ์˜ต์…˜ ์ œ๊ณต
๋ฉ”์‹œ์ง€ ์ˆœ์„œ ๋ณด์žฅ ํŒŒํ‹ฐ์…˜ ๋‚ด์—์„œ๋งŒ ์ˆœ์„œ ๋ณด์žฅ FIFO(First-In-First-Out) ํ๋กœ ์ˆœ์„œ ๋ณด์žฅ ๊ฐ€๋Šฅ
ํ™•์žฅ์„ฑ ๋ธŒ๋กœ์ปค ์ถ”๊ฐ€๋ฅผ ํ†ตํ•œ ์ˆ˜ํ‰ ํ™•์žฅ ์šฉ์ด ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ง€์›ํ•˜์ง€๋งŒ ํ™•์žฅ์„ฑ์€ Kafka๋ณด๋‹ค ์ œํ•œ์ 
ํ”„๋กœํ† ์ฝœ ์ „์šฉ TCP ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ AMQP, MQTT, STOMP ๋“ฑ ๋‹ค์–‘ํ•œ ํ”„๋กœํ† ์ฝœ ์ง€์›
์‚ฌ์šฉ ์‚ฌ๋ก€ ๋กœ๊ทธ ์ˆ˜์ง‘, ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ, ์ด๋ฒคํŠธ ์†Œ์‹ฑ, ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ž‘์—… ๋Œ€๊ธฐ์—ด, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ , RPC ๊ตฌํ˜„

Apache Kafka๋Š” ํ˜„๋Œ€์˜ ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•„์ˆ˜์ ์ธ ์—ญํ• ์„ ํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค์ด๋‹ค.
๊ธฐ์กด ์‹œ์Šคํ…œ์˜ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์—ฐ๋™ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , ํ™•์žฅ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ์ œ๊ณตํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์‚ฐ์—… ๋ถ„์•ผ์—์„œ ํ™œ์šฉ๋˜๊ณ  ์žˆ๋‹ค.
Kafka๋ฅผ ๋„์ž…ํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ , ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๊ฐ€์น˜๋ฅผ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
์•ž์œผ๋กœ๋„ Kafka๋Š” ๋น…๋ฐ์ดํ„ฐ์™€ ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ์˜ ํ•ต์‹ฌ ๊ธฐ์ˆ ๋กœ์„œ ๊ทธ ์ค‘์š”์„ฑ์ด ๋”์šฑ ๋ถ€๊ฐ๋  ๊ฒƒ ๊ฐ™๋‹ค.





MSA ์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด ๋‹ค๋ฅธ ๊ธ€ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

Leave a comment