์๋น์ค
[๋ฉ์ธ์ง ๋ธ๋ก์ปค] 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:
- ๋์ ์ฒ๋ฆฌ๋(์ด๋น ์๋ฐฑ๋ง ๊ฑด์ ๋ฉ์์ง ์ฒ๋ฆฌ)์ ์ ํฉ.
- ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ ๋ฐ ์ค์๊ฐ ๋ถ์๊ณผ ๊ฐ์ ๋๊ท๋ชจ ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ์ต์ .
- ๋๊ท๋ชจ ํด๋ฌ์คํฐ ์ด์
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)์ ๊ฐ์ ์ถ๊ฐ ์ปดํฌ๋ํธ ํ์.
- ์ด๊ธฐ ์ค์ ๊ณผ ์ด์์ด ๋ ๋ณต์กํ์ง๋ง, ๋๊ท๋ชจ ์ฒ๋ฆฌ์ ์ ํฉ.
์์ฝ
์ ํ ๊ธฐ์ค
- RabbitMQ๋ฅผ ์ ํํด์ผ ํ ๋:
- ๋ฉ์์ง ์ ๋ฌ๊ณผ ๋ผ์ฐํ ์ด ํ์ํ ์์ .
- ๋น ๋ฅธ ์์ ํ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋น์ฆ๋์ค ๋ก์ง.
- ์ฌ์ฉ์๊ฐ ์ค์ ๋ฐ ์ด์์ ์ต์ํ์ง ์์ ๊ฒฝ์ฐ.
- Kafka๋ฅผ ์ ํํด์ผ ํ ๋:
- ์ค์๊ฐ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ ๋๋ ๋ถ์์ด ํ์ํ ๊ฒฝ์ฐ.
- ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ์ ์ฅ์ด ํ์ํ ์์คํ .
- ๋์ ์ฒ๋ฆฌ๋๊ณผ ํ์ฅ์ฑ์ด ์ค์ํ ๊ฒฝ์ฐ.