CS/Network

Message Queue

leeh96 2023. 4. 16. 20:55

Message Queue

ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ†ต์‹  ๋ฐฉ๋ฒ• ์ค‘์— ํ•˜๋‚˜๋กœ,

๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด(Message Oriented Middleware:MOM)๋ฅผ ๊ตฌํ˜„ํ•œ ์‹œ์Šคํ…œ

 

 

 

๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด (MOM)

์‘์šฉ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐ„์˜ ๋ฐ์ดํ„ฐ(๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€) ํ†ต์‹ ์„ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด

  • ๋ฉ”์‹œ์ง€ : ์š”์ฒญ, ์‘๋‹ต, ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ํ˜น์€ ๋‹จ์ˆœํ•œ ์ •๋ณด ๋“ฑ์˜ ์ž‘์€ ๋ฐ์ดํ„ฐ

๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ณด๊ด€ํ•˜๊ฑฐ๋‚˜ ๋ผ์šฐํŒ… ๋ฐ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์„ ๊ฐ€์ง„๋‹ค.

  • ๋ฉ”์‹œ์ง€์˜ ๋ฐฑ์—…์„ ์œ ์ง€ํ•จ์œผ๋กœ์จ ์ง€์†์„ฑ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†ก์ˆ˜์‹  ์ธก์€ ๋™์‹œ์— ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค
  • ํ•˜๋‚˜์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์—ฌ๋Ÿฌ ์ˆ˜์‹ ์ž์—๊ฒŒ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค
  • ์†ก์ˆ˜์‹  ์ธก์˜ ์š”๊ตฌ์— ๋”ฐ๋ผ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค

=> ๋ฉ”์‹œ์ง€ ํ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฒ„ํผ๋‹ค !

๋ฉ”์‹œ์ง€๋ฅผ ์ „์†ก ๋ฐ ์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์ค‘๊ฐ„์— ๋ฉ”์‹œ์ง€ ํ๋ฅผ ๋†“๋Š”๋‹ค.

๋ฉ”์‹œ์ง€ ํ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ผ๋Œ€์ผ ํ†ต์‹ ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

๋ฉ”์‹œ์ง€ ํ์˜ ํŠน์ง•

  • ๋น„๋™๊ธฐ(Asynchronous) : ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ์ž์—๊ฒŒ ๋ฐ”๋กœ ๋ณด๋‚ด์ง€ ์•Š๊ณ  ํ์— ๋„ฃ๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜์ค‘์— ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„(Decoupling) : ์ƒ์‚ฐ์ž ์„œ๋น„์Šค์™€ ์†Œ๋น„์ž ์„œ๋น„์Šค๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ํ–‰๋™ํ•˜๊ฒŒ ๋จ์œผ๋กœ์จ ์„œ๋น„์Šค ๊ฐ„ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์•„์ง„๋‹ค.
  • ํƒ„๋ ฅ์„ฑ(Resilience) : ์ผ๋ถ€๊ฐ€ ์‹คํŒจํ•˜๋”๋ผ๋„ ์ „์ฒด์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.
  • ์šฉ์žฅ์„ฑ(Redundancy) : ์‹คํŒจํ•  ๊ฒฝ์šฐ ์žฌ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค
  • ๋ณด์žฅ์„ฑ(Guarantees) : ๋ฉ”์‹œ์ง€ ํ๋Š” ํ์— ๋ณด๊ด€๋˜๋Š” ๋ชจ๋“  ๋ฉ”์‹œ์ง€๊ฐ€ ๊ฒฐ๊ตญ ์†Œ๋น„์ž ์„œ๋น„์Šค์—๊ฒŒ ์ „๋‹ฌ๋œ๋‹ค๋Š” ์ผ๋ฐ˜์ ์ธ ๋ณด์žฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ํ™•์žฅ์„ฑ(Scalable) : ์ƒ์‚ฐ์ž ์„œ๋น„์Šค ํ˜น์€ ์†Œ๋น„์ž ์„œ๋น„์Šค๋ฅผ ์›ํ•˜๋Š” ๋Œ€๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ™•์žฅ์„ฑ์ด ์ข‹๋‹ค.

 

๋ฉ”์‹œ์ง€ ํ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

์ผ๋ฐ˜์ ์ธ ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ตฌ์กฐ์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญ์„ ํ•˜๋ฉด ์„œ๋ฒ„๋Š” ๊ทธ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ ํ›„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต์„ ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„ ๊ตฌ์กฐ์—์„œ๋Š” ๊ตณ์ด ๋ฉ”์‹œ์ง€ ํ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” HTTP ์š”์ฒญ์„ ๋ฐ”๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  ์ค‘๊ฐ„์— ๋ฉ”์‹œ์ง€ ํ๋ฅผ ๋‘๋Š” ๊ฒฝ์šฐ๋Š” ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š๋‹ค.

 

๋ฉ”์‹œ์ง€ ํ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•˜๋‹ค.

 

๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์น˜ ์ž‘์—…์ด๋‚˜, ์ฑ„ํŒ… ์„œ๋น„์Šค, ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ํ™œ์šฉ๋œ๋‹ค.

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

  • ๋‹ค๋ฅธ ๊ณณ์˜ API๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹  ๊ฐ€๋Šฅ
  • ๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋น„๋™๊ธฐ ํ†ต์‹  ๊ฐ€๋Šฅ
  • ์ด๋ฉ”์ผ ๋ฐœ์†ก ๋ฐ ๋ฌธ์„œ ์—…๋กœ๋“œ ๊ฐ€๋Šฅ
  • ๋งŽ์€ ์–‘์˜ ํ”„๋กœ์„ธ์Šค๋“ค์„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

 

 

๋Œ€ํ‘œ์ ์ธ ๋ฉ”์‹œ์ง€ ํ

RabbitMQ, ActiveMQ, Kafka

 

RabbitMQ

  • AMQP(Advanced Message Queuing Protocol) ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•ด ๋†“์€ ์˜คํ”ˆ์†Œ์Šค ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค
    • AMQP : ๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์œ„ํ•œ ๊ฐœ๋ฐฉํ˜• ํ‘œ์ค€ ์‘์šฉ ๊ณ„์ธต ํ”„๋กœํ† ์ฝœ
  • ์‹ ๋ขฐ์„ฑ, ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณต
  • ๋ฉ”์‹œ์ง€ ํ๊ฐ€ ๋„์ฐฉํ•˜๊ธฐ ์ „์— ๋ผ์šฐํŒ… ๋˜๋ฉฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด ๋” ๋ณต์žกํ•œ ๋ผ์šฐํŒ…๋„ ๊ฐ€๋Šฅ
  • ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ์— ์žˆ๋Š” ์—ฌ๋Ÿฌ RabbitMQ ์„œ๋ฒ„๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๊ณ  ๋…ผ๋ฆฌ์ ์ธ ๋ธŒ๋กœ์ปค๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ด€๋ฆฌ UI๊ฐ€ ์žˆ์–ด์„œ ํŽธํ•˜๊ฒŒ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ฑฐ์˜ ๋ชจ๋“  ์–ธ์–ด์™€ ์šด์˜์ฒด์ œ๋ฅผ ์ง€์›ํ•œ๋‹ค.

์‚ฌ์šฉํ•˜๋Š” ์ผ€์ด์Šค

  • ์š”์ฒญ์„ ๋งŽ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌํ•  ๋•Œ
  • ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ์‹œ๊ฐ„์ด ๊ธธ ๋•Œ
  • ๋งŽ์€ ์ž‘์—…์ด ์š”์ฒญ๋˜์–ด ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•  ๋•Œ

ํ•ด๋‹นํ•˜๋Š” ์š”์ฒญ์„ ๋‹ค๋ฅธ API์—๊ฒŒ ์œ„์ž„ํ•˜๊ณ  ๋น ๋ฅธ ์‘๋‹ต์„ ํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. MQ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ฐ„์— ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ๋„ ๊ฐ€์ง„๋‹ค.

 

ActiveMQ

  • Java๋กœ ๋งŒ๋“  ์˜คํ”ˆ์†Œ์Šค ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค
  • JMS๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ์–ธ์–ด์™€ ํ”„๋กœํ† ์ฝœ ์ง€์›(Java, C, C++, C#, Ruby, Perl, Python, PHP ํด๋ผ์ด์–ธํŠธ ์ง€์›)
  • Message Groups, Virtual Destinations, Wildcards์™€ Composite Destinations ์ง€์›
  • JMS 1.1๊ณผ J2EE 1.4๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•˜๋ฉฐ, transient, persistent, transactional, ๊ทธ๋ฆฌ๊ณ  XA ๋ฉ”์‹œ์ง• ์ง€์›
  • Spring ์ง€์›์œผ๋กœ ActiveMQ๋Š” Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋งค์šฐ ์‰ฝ๊ฒŒ ์ž„๋ฒ ๋”ฉ ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Spring์˜ XML ์„ค์ • ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์˜ํ•ด ์‰ฝ๊ฒŒ ์„ค์ • ๊ฐ€๋Šฅ
  • ๊ณ ์„ฑ๋Šฅ์˜ ํด๋Ÿฌ์Šคํ„ฐ๋ง, ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„, Peer ๊ธฐ๋ฐ˜ ํ†ต์‹ ์„ ์ง€์›์„ ์œ„ํ•œ ์„ค๊ณ„๊ฐ€ ๋˜์–ด ์žˆ์Œ
  • REST API๋ฅผ ํ†ตํ•ด ์›น ๊ธฐ๋ฐ˜ ๋ฉ”์‹œ์ง• API๋ฅผ ์ง€์›

 

AMQP vs JMS

  • AMQP๋Š” ISO ์‘์šฉ ๊ณ„์ธต์˜ MOM ํ‘œ์ค€์ด๋ฉฐ, JMS๋Š” MOM์„ Java์—์„œ ์ง€์›ํ•˜๋Š” ํ‘œ์ค€ API์ด๋‹ค.
  • JMS๋Š” ๋‹ค๋ฅธ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ผ๋ฆฌ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ MOM์˜ ํ†ต์‹ ์€ ๋ถˆ๊ฐ€๋Šฅ(AMQP, SMTP ๋“ฑ)
  • AMQP๋Š” ํ”„๋กœํ† ์ฝœ๋งŒ ๋งž๋‹ค๋ฉด ๋‹ค๋ฅธ AMQP๋ฅผ ์‚ฌ์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ผ๋ฆฌ ํ†ต์‹ ์ด ๊ฐ€๋Šฅ
  • JMS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—” AMQP๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

Kafka

  • ๋Œ€์šฉ๋Ÿ‰์˜ ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ์ฒ˜๋ฆฌ์— ํŠนํ™”๋˜์–ด ์„ค๊ณ„๋œ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ
  • ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ๊ธฐ๋ณธ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์— ๋น„ํ•ด ๋ถ„์‚ฐ ๋ฐ ๋ณต์ œ ๊ตฌ์„ฑ์„ ์†์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • AMQP ํ”„๋กœํ† ์ฝœ์ด๋‚˜ JMS API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํ•œ ๋ฉ”์‹œ์ง€ ํ—ค๋”๋ฅผ ์ง€๋‹Œ TCP๊ธฐ๋ฐ˜์˜ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœํ† ์ฝœ์— ์˜ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๊ฐ์†Œ์‹œํ‚จ๋‹ค.
  • ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ์„ค์ •์„ ํ•˜์ง€ ์•Š์•„๋„ ๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ(durability)์ด ๋ณด์žฅ๋œ๋‹ค..
  • ๋ฉ”์‹œ์ง€๋ฅผ pull ๋ฐฉ์‹์œผ๋กœ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ, ๋ฉ”์‹œ์ง€๋ฅผ ์Œ“์•„๋‘์—ˆ๋‹ค๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” batch consumer์˜ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋‹ค์ˆ˜์˜ ๋ฉ”์‹œ์ง€๋ฅผ batchํ˜•ํƒœ๋กœ broker์—๊ฒŒ ํ•œ ๋ฒˆ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์–ด TCP/IP ๋ผ์šด๋“œํŠธ๋ฆฝ ํšŸ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

RabbitMQ vs ActiveMQ vs Kafka ?

์ผ๋ฐ˜์ ์œผ๋กœ RabbitMQ, ActiveMQ๋Š” ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๊ณ ,

Kafka๋Š” ์ฒ˜๋ฆฌ๋Ÿ‰์ด ๋งŽ์€ ๋ถ„์‚ฐ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์— ์‚ฌ์šฉ๋œ๋‹ค.

 

RabbitMQ : ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ง๊ด€์ .

  • AMQT ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•ด๋†“์€ ํ”„๋กœ๊ทธ๋žจ, ์‹ ๋ขฐ์„ฑ, ์œ ์—ฐํ•œ ๋ผ์šฐํŒ…, UI์˜ ํŽธ๋ฆฌ์„ฑ

ActiveMQ : ํšจ์œจ์ ์ด๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ์˜คํ”ˆ ์†Œ์Šค.

  • ์ž๋ฐ”๋กœ ๋งŒ๋“  ์˜คํ”ˆ์†Œ์Šค ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค
  • ๋‹ค์–‘ํ•œ ์–ธ์–ด์™€ ํ”„๋กœํ† ์ฝœ์„ ์ง€์›

Kafka : ํ™•์žฅ์„ฑ, ๊ณ ์„ฑ๋Šฅ ๋ฐ ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰.

  • ๋Œ€์šฉ๋Ÿ‰ ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ์ฒ˜๋ฆฌ์— ํŠนํ™”, ๋‹จ์ˆœํ•œ ๋ฉ”์‹œ์ง€ ํ—ค๋”๋ฅผ ์ง€๋‹Œ TCP ๊ธฐ๋ฐ˜์˜ ํ”„๋กœํ† ์ฝœ ์‚ฌ์šฉ์œผ๋กœ ์˜ค๋ฒ„ํ—ค๋“œ ๊ฐ์†Œ