[๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค] RabbitMQ vs Apache KafKa

2024. 12. 16. 01:19ยท์„œ๋น„์Šค & ํˆด

 

 

๋“ค์–ด๊ฐ€๋ฉฐ

๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ด๋Š” ์ชฝ๊ณผ ๋ฐ›๋Š” ์ชฝ ์‚ฌ์ด์—์„œ ์ ์ ˆํ•œ ๋ถ„๋ฐฐ๋ฅผ ๋„์™€์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Publisher์™€ Subscriber๋Š” ์„œ๋น„์Šค์˜ ๋ณธ์งˆ์— ๋”ฐ๋ผ ์ž์‹ ์˜ ์—ญํ• ์— ์ข€๋” ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์ฃ . ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค์˜ ์ข…๋ฅ˜๋Š” ๋งค์šฐ ๋‹ค์–‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค์ธ RabbitMQ์™€ Apache KafKa ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

RabbitMQ์™€ Kafka๋Š” ๋‘˜ ๋‹ค ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์ด์ง€๋งŒ, ์„ค๊ณ„ ์ฒ ํ•™๊ณผ ์ฃผ์š” ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” RabbitMQ์™€ Kafka์˜ ์ฃผ์š” ์ฐจ์ด์ ์ž…๋‹ˆ๋‹ค.


1. ์„ค๊ณ„ ์ฒ ํ•™

  • RabbitMQ:
    • AMQP(Advanced Message Queuing Protocol)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„๋œ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค.
    • ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ, ๋ผ์šฐํŒ…, ํ์ž‰, ์ˆ˜์‹  ํ™•์ธ(Acknowledgment) ๋“ฑ์— ์ดˆ์ ์„ ๋งž์ถ˜ ๋ฒ”์šฉ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค.
    • ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„์ž๊ฐ€ ์†Œ๋น„ํ•˜๋ฉด ํ์—์„œ ์‚ญ์ œ(๊ธฐ๋ณธ ์„ค์ •).
    • ์ „ํ†ต์ ์ธ In-Memory Message Queuing ๋ฐฉ์‹
  • Kafka:
    • ๋ถ„์‚ฐ ๋กœ๊ทธ ์ €์žฅ์†Œ ๋˜๋Š” ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ์œผ๋กœ ์„ค๊ณ„๋จ.
    • ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ์‹ค์‹œ๊ฐ„ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ์— ์ ํ•ฉ.
    • ๋ฉ”์‹œ์ง€๋Š” ๋กœ๊ทธ(ํ† ํ”ฝ)์— ๊ธฐ๋ก๋˜๋ฉฐ, ์†Œ๋น„์ž๊ฐ€ ์ฒ˜๋ฆฌํ•œ ์ดํ›„์—๋„ ์‚ญ์ œ๋˜์ง€ ์•Š๊ณ  ์œ ์ง€ ๊ธฐ๊ฐ„ ์„ค์ •์— ๋”ฐ๋ผ ์ €์žฅ.
    • Log Based Message Streaming ๋ฐฉ์‹

 

2. ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ๋ชจ๋ธ

  • RabbitMQ:
    • Producer → Exchange → Queue → Consumer
    • Exchange๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹(Direct, Topic, Fanout)์œผ๋กœ ๋ผ์šฐํŒ… ๊ฐ€๋Šฅ.
    • ๋ฉ”์‹œ์ง€ ์†Œ๋น„๊ฐ€ ๋น ๋ฅด๊ณ , ํ ๊ธฐ๋ฐ˜ ์›Œํฌ๋กœ๋“œ ๋ถ„์‚ฐ์— ์ ํ•ฉ.
  • Kafka:
    • Producer → Topic → Partition → Consumer Group
    • Partition์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, Consumer Group์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€ ์†Œ๋น„ ๊ด€๋ฆฌ.
    • ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ๊ณผ ๋กœ๊ทธ ๊ธฐ๋ก์— ๋” ์ ํ•ฉ.

 

3. ๋ฐ์ดํ„ฐ ๋ณด์กด

  • RabbitMQ:
    • ๋ฉ”์‹œ์ง€๊ฐ€ ์†Œ๋น„๋˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ญ์ œ.
    • ๋ฉ”์‹œ์ง€ ๋ณด์กด์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ๋ณ„๋„๋กœ ์„ค์ •ํ•˜๊ฑฐ๋‚˜, ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜๋™์œผ๋กœ Ack ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ.
  • Kafka:
    • ๋ฉ”์‹œ์ง€๋Š” ์„ค์ •๋œ ๋ณด์กด ๊ธฐ๊ฐ„ ๋™์•ˆ(์˜ˆ: 7์ผ, ๋ฌด์ œํ•œ ๋“ฑ) ์ €์žฅ.
    • ์†Œ๋น„์ž๊ฐ€ ๋™์ผํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ฝ์„ ์ˆ˜ ์žˆ์Œ.

 

4. ์„ฑ๋Šฅ

  • RabbitMQ:
    • ๋‚ฎ์€ ๋ ˆ์ดํ„ด์‹œ(์ดˆ๋‹น ์ˆ˜๋ฐฑ ~ ์ˆ˜์ฒœ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ)์— ์ ํ•ฉ.
    • ์ „ํ˜•์ ์œผ๋กœ ์›Œํฌ๋กœ๋“œ ๋ถ„์‚ฐ๊ณผ ์ผ๊ด„ ์ฒ˜๋ฆฌ์— ๊ฐ•์ .
    • ๋น„๊ต์  ์ ์€ ์ˆ˜์˜ ํด๋Ÿฌ์Šคํ„ฐ
  • Kafka:
    • ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰(์ดˆ๋‹น ์ˆ˜๋ฐฑ๋งŒ ๊ฑด์˜ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ)์— ์ ํ•ฉ.
    • ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ ์‹ค์‹œ๊ฐ„ ๋ถ„์„๊ณผ ๊ฐ™์€ ๋Œ€๊ทœ๋ชจ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ์— ์ตœ์ .
    • ๋Œ€๊ทœ๋ชจ ํด๋Ÿฌ์Šคํ„ฐ ์šด์˜

 

RabbitMQ ๊ตฌ์กฐ(https://www.cloudamqp.com/blog/rabbitmq-streams-and-replay-features-part-1-when-to-use-rabbitmq-streams.html)

 

์นดํ”„์นด ์ž‘๋™ ๋ฐฉ์‹(https://www.scaler.com/topics/kafka-tutorial/configuring-zookeeper-for-a-kafka-cluster/)

 

5. ํ™•์žฅ์„ฑ

  • RabbitMQ:
    • ์ˆ˜์ง์  ํ™•์žฅ์ด ์ฃผ์š” ๋ฐฉ์‹(์„œ๋ฒ„ ์„ฑ๋Šฅ ๊ฐ•ํ™”).
    • ํด๋Ÿฌ์Šคํ„ฐ๋ง ๊ฐ€๋Šฅํ•˜์ง€๋งŒ Kafka์— ๋น„ํ•ด ํ™•์žฅ์„ฑ์ด ์ œํ•œ์ .
  • Kafka:
    • ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์œผ๋กœ ์„ค๊ณ„๋˜์–ด ์žˆ์–ด ์ˆ˜ํ‰์  ํ™•์žฅ์ด ์šฉ์ด.
    • ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ ์œ ๋ฆฌ.

 

6. ์‚ฌ์šฉ ์‚ฌ๋ก€

  • RabbitMQ:
    • ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ.
    • ์ž‘์—… ๋Œ€๊ธฐ์—ด(Worker Queue) ๊ธฐ๋ฐ˜์˜ ๋น„๋™๊ธฐ ์ž‘์—… ์ฒ˜๋ฆฌ.
    • ์‹ ์†ํ•œ ์‘๋‹ต์ด ํ•„์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(์˜ˆ: ์ฑ„ํŒ…, ์•Œ๋ฆผ).
  • Kafka:
    • ๋กœ๊ทธ ๋ฐ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ.
    • ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ถ„์„(์˜ˆ: IoT ๋ฐ์ดํ„ฐ, ์‹ค์‹œ๊ฐ„ ์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ).
    • ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ํ†ตํ•ฉ ๋ฐ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•.

 

7. ์–ธ์–ด ์ง€์› ๋ฐ ์ปค๋ฎค๋‹ˆํ‹ฐ

  • RabbitMQ:
    • AMQP ๊ธฐ๋ฐ˜์œผ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด์—์„œ ์ง€์›.
    • ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ , ์„ค์ • ๋ฐ ๋ฐฐํฌ๊ฐ€ ๊ฐ„๋‹จ.
    • ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ์ƒํƒœ๊ณ„๊ฐ€ ํ’๋ถ€.
  • Kafka:
    • Java/Scala ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฉฐ, ๋‹ค์–‘ํ•œ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Java, Python, Go ๋“ฑ) ์ง€์›.
    • ๋Œ€๊ทœ๋ชจ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ์„ค๊ณ„์— ์ต์ˆ™ํ•œ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์ ํ•ฉ.

 

8. ์šด์˜ ๋ฐ ์œ ์ง€ ๋ณด์ˆ˜

  • RabbitMQ:
    • ๊ด€๋ฆฌ UI์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ด.
    • ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ„๋‹จํ•œ ์„ค์ •๊ณผ ์šด์˜.
  • Kafka:
    • Zookeeper(๋˜๋Š” Kafka Raft)์™€ ๊ฐ™์€ ์ถ”๊ฐ€ ์ปดํฌ๋„ŒํŠธ ํ•„์š”.
    • ์ดˆ๊ธฐ ์„ค์ •๊ณผ ์šด์˜์ด ๋” ๋ณต์žกํ•˜์ง€๋งŒ, ๋Œ€๊ทœ๋ชจ ์ฒ˜๋ฆฌ์— ์ ํ•ฉ.

 

์š”์•ฝ


 

์„ ํƒ ๊ธฐ์ค€

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

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'์„œ๋น„์Šค & ํˆด' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Docker] 2. ๋„์ปค ๋„คํŠธ์›Œํฌ์™€ ๋„์ปค ์Šคํ† ๋ฆฌ์ง€  (0) 2025.01.02
[Docker] 1. ๋„์ปค, ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ, ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ  (0) 2024.12.24
[Metric] ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค + ๊ทธ๋ผํŒŒ๋‚˜  (1) 2024.12.23
[git] Git rebase(๋ฆฌ๋ฒ ์ด์Šค)๋ž€?  (0) 2023.08.10
[git] .gitignore ์ ์šฉ ์•ˆ๋  ๋•Œ  (1) 2023.08.10
'์„œ๋น„์Šค & ํˆด' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Docker] 1. ๋„์ปค, ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ, ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ
  • [Metric] ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค + ๊ทธ๋ผํŒŒ๋‚˜
  • [git] Git rebase(๋ฆฌ๋ฒ ์ด์Šค)๋ž€?
  • [git] .gitignore ์ ์šฉ ์•ˆ๋  ๋•Œ
์„œ์•„๋ž‘๐Ÿ˜ƒ
์„œ์•„๋ž‘๐Ÿ˜ƒ
Just Do It๐Ÿ’ช
  • ์„œ์•„๋ž‘๐Ÿ˜ƒ
    G-Stack
    ์„œ์•„๋ž‘๐Ÿ˜ƒ
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด๋ณด๊ธฐ (144)
      • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (78)
        • C++ ๊ธฐ์ดˆ (28)
        • C++ ์‘์šฉ (18)
        • Python (18)
        • JavaScript & NodeJS (0)
        • Go (12)
        • React & NextJS (2)
        • Java (0)
      • AI (2)
      • ์ปดํ“จํ„ฐ ๊ตฌ์กฐ & ์šด์˜์ฒด์ œ (31)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (12)
      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (5)
      • ๋„คํŠธ์›Œํฌ (3)
      • ๋””์ž์ธํŒจํ„ด (5)
      • ์„œ๋น„์Šค & ํˆด (7)
      • ํŠธ๋ Œ๋“œ&์ด์Šˆ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

    • G์Šคํƒ์˜ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์ปดํ“จํ„ฐ
    ํฌ์ธํ„ฐ
    ์ƒ์†
    ์กฐ๊ฑด๋ฌธ
    ์Šคํƒ
    ํ•˜๋“œ๋””์Šคํฌ
    component
    pointer
    c
    Thread
    ํ•จ์ˆ˜
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ํŒŒ์ผ์ž…์ถœ๋ ฅ
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    ์žฌ๊ท€
    init
    RAM
    ๋ณ€์ˆ˜
    go
    ๋””์ž์ธํŒจํ„ด
    c++
    STD
    ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ
    ํŒŒ์ด์ฌ
    ํŒจํ‚ค์ง€
    ๋ฐ˜๋ณต๋ฌธ
    cpu
    ๋ฉ”๋ชจ๋ฆฌ
    ๋ฐฐ์—ด
    fork
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
์„œ์•„๋ž‘๐Ÿ˜ƒ
[๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค] RabbitMQ vs Apache KafKa
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”