์„œ๋น„์Šค

[๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค] 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๋ฅผ ์„ ํƒํ•ด์•ผ ํ•  ๋•Œ:
    • ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ๋˜๋Š” ๋ถ„์„์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ.
    • ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ์ €์žฅ์ด ํ•„์š”ํ•œ ์‹œ์Šคํ…œ.
    • ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰๊ณผ ํ™•์žฅ์„ฑ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ.