[MSA] kafka ๊ฐ์
Categories: MSA
Tags: kafka, MSA, SpringCloud
๐ ๊ฐ์ธ์ ์ธ ๊ณต๊ฐ์ผ๋ก ๊ณต๋ถ๋ฅผ ๊ธฐ๋กํ๊ณ ๋ณต์ตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ธ๋ก๊ทธ์
๋๋ค.
์ ํํ์ง ์์ ์ ๋ณด๊ฐ ์์ ์ ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค :๐ธ
[ํ๋ฆฐ ๋ด์ฉ์ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๋ณต๋ฐ์ผ์ค๊ฑฐ์์]
์ธํ๋ฐ 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 ๋ฑ์ฅ ์ด์ ๊ณผ ์ดํ
-
๋ฑ์ฅ ์ด์ : ๊ธฐ์กด ์์คํ ์ ๋ฌธ์ ์
Kafka ์ด์ ์๋ ๊ฐ ์์คํ ์ด ์ง์ ์ฐ๊ฒฐ๋์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์๋ ํฌ ์๋(End-to-End) ๋ฐฉ์์ด ์ผ๋ฐ์ ์ด์๋ค. ์ด ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ ๊ฐ์ง๊ณ ์๋ค
- ๋ณต์กํ ๋ฐ์ดํฐ ์ฐ๋ ๊ตฌ์กฐ: ๊ฐ ์์คํ ๋ง๋ค ๋ค๋ฅธ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ๊ณผ ํฌ๋งท์ ์ ์งํด์ผ ํ๋ฏ๋ก ๊ฐ๋ฐ๊ณผ ์ ์ง ๋ณด์๊ฐ ์ด๋ ต๋ค.
- ํ์ฅ์ฑ์ ํ๊ณ: ์์คํ ์ด ๋ณต์กํด์ง์๋ก ํ์ฅ์ด ์ด๋ ต๋ค.
- ์ฅ์ ๋ฏผ๊ฐ์ฑ: ํ๋์จ์ด๋ ์ด์์ฒด์ ์ ํน์ฑ์ ๋ฐ๋ผ ์ฅ์ ์ ๋ฏผ๊ฐํ๊ฒ ๋ฐ์ํ ์ ์๋ค.
-
๋ฑ์ฅ ์ดํ
์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด 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๋ ๋น
๋ฐ์ดํฐ์ ์ค์๊ฐ ์ฒ๋ฆฌ์ ํต์ฌ ๊ธฐ์ ๋ก์ ๊ทธ ์ค์์ฑ์ด ๋์ฑ ๋ถ๊ฐ๋ ๊ฒ ๊ฐ๋ค.
Leave a comment