์นดํ์นด Kafka
Apache Kafka๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋ถ์ฐ ์์คํ ์ผ๋ก, ๊ณ ์ฑ๋ฅ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ, ์คํธ๋ฆฌ๋ฐ ๋ถ์, ๋ฐ์ดํฐ ํตํฉ์ ์ํด ์ฌ์ฉํ๋ ์คํ ์์ค ์คํธ๋ฆฌ๋ฐ ํ๋ซํผ์ด๋ค.
์นดํ์นด๋ ์ฌ๋ฌ ๋ฉ์ธ์ง ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก๋ ๋ถ์ฐ ์์คํ ์ด๋ฏ๋ก, ์ํ ํ์ฅ์ด ๊ฐ๋ฅํ ๊ตฌ์กฐ์ด๋ค.
์๋ฒ์ ๊ท๋ชจ์ ๋ฐ๋ผ ๋ธ๋ก์ปค, ํํฐ์ , ์ปจ์๋จธ๋ฅผ ๋๋ ค๊ฐ๋ฉฐ ์ ์ฐํ๊ฒ ํ์ฅํ ์ ์๋ค.
๋ํ, ๋ฐฐ์นBatch์ ์ก์ด ๊ฐ๋ฅํ๋ฐ, ์ฌ๊ธฐ์ ๋ฐฐ์น ์ ์ก์ ์ํ๋ ์ผ์ ํฌ๊ธฐ๋ฅผ ๋ฌถ์ด์ ๋ณด๋ด๊ณ , ๋ฌถ์ด์ ๋ฐ๋ ๊ตฌ์กฐ์ด๋ค.
์ ์กํ ์๋ฃ๊ฐ 10๊ฐ๊ฐ ์๋ค๋ฉด, 10๊ฐ๋ฅผ ๋ชจ๋ ์ผ์ผ์ด ๋ณด๋ด๋ 10๊ฐ์ ์ ์ก์ด ์ด๋ฃจ์ด์ง๋ ๋ฐฉ์๋ณด๋ค, ํ ๋ฒ์ ๋ฐ๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ๋์ด ํจ์ฌ ์ข๋ค.
๊ตฌ์กฐ
1. ํ๋ก๋์ Producer
Kafka์๊ฒ ๋ฉ์ธ์ง๋ฅผ ๋ง๋ค์ด์ ์ ์กํ๋ค.
2. ์ปจ์๋จธ Consumer
Kafka๋ก๋ถํฐ ๋ฉ์ธ์ง๋ฅผ ๋ฐ์์ ์ด์ฉํ๋ค.
3. ์นดํ์นด ํด๋ฌ์คํฐ Kafka Cluster
ํ๋ก๋์์ ์ปจ์๋จธ ์ฌ์ด์์ ๋ฉ์ธ์ง ๋ธ๋ก์ปค ์ญํ ์ ํ๋ค. ํด๋ฌ์คํฐ ๋ด์ ์๋ ๋ธ๋ก์ปค๋ค์ ๊ฐ๊ฐ ํ๋์ ์๋ฒ์ด๋ค.
4. ์ฃผํคํผ ํด๋ฌ์คํฐ Zookeper Cluster (์์๋ธ)
์นดํ์นด ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ๋ค. ์นดํ์นด์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณ ์๋ค.
5. ํ ํฝ Topic
๋ฉ์ธ์ง๋ฅผ ๊ตฌ๋ถํ๋ ๋จ์์ด๋ค. ์ด๋ค ์ข ๋ฅ์ ๋ฉ์ธ์ง์ธ์ง ํ์ ํ๋ ์ฉ๋์ด๋ค. ํ์ผ ์์คํ ์ ํด๋๋ผ๊ณ ์๊ฐํ๋ฉด ๋๊ฒ ๋ค.
ํ ํฝ ๋ด์๋ 1๊ฐ ์ด์์ ํํฐ์ ์ด ์กด์ฌํ๋ค.
6. ํํฐ์ Partition
ํ ํฝ ๋ด์ ์กด์ฌํ๋ฉฐ, ํ ํฝ ๋ด์ ์ฌ๋ฌ ํํฐ์ ์ด ์กด์ฌํ ์ ์๋ค. ๋ฉ์ธ์ง๋ฅผ ์ ์ฅํ๋ ๋ฌผ๋ฆฌ์ ์ธ ํ์ผ์ ์๋ฏธํ๋ค. ํ์ผ ์์คํ ์ ํ์ผ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๊ฒ ๋ค.
๊ฐ๋จํ ๋งํด์, ํ๋ก๋์๊ฐ ๋ฉ์ธ์ง๋ฅผ ์ด๋ ํ ํฝ์ ์ ์ฅํด๋๊ณ , ์ปจ์๋จธ๊ฐ ์ฝ์ํด๋์ ํด๋น ํ ํฝ์์ ๋ฉ์ธ์ง๋ฅผ ๊บผ๋ด๊ฐ๋ค๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
ํํฐ์ Partition
ํ ํฝ ๋ด์ ์กด์ฌํ๋ ํํฐ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก append-only, ์ฆ ์ถ๊ฐ๋ง ๊ฐ๋ฅํ๋ค. ๊ฐ ๋ฉ์ธ์ง์ ์ ์ฅ ์์น๋ ์คํ์ offset์ ๊ธฐ์ค์ผ๋ก ์ ์ฅ๋๋ค.
๋ง์ฝ ์ ์ฌ์ง์์ ์๋ก์ด ๋ฉ์ธ์ง๊ฐ ์ถ๊ฐ๋๋ฉด, offset 6์ด ๋๊ฒ ๋ค.
์ปจ์๋จธ๋ ๋ฉ์ธ์ง๋ฅผ ์คํ์ ์ ๊ธฐ์ค์ผ๋ก ์ฝ๊ธฐ ์์ํ๋ค. ์๋ฅผ ๋ค์ด, ์ปจ์๋จธ๊ฐ ์คํ์ 2๋ฒ๋ถํฐ ์ฝ๋๋ค๊ณ ํ๋ฉด, 2, 3, 4 ... ์์ผ๋ก ์ฝ๊ฒ ๋๊ฒ ๋ค.
๊ทธ๋ ๋ค๋ฉด ํ๋ก๋์๋ ํ ํฝ์ ์ง์ ํด์ ๋ฉ์ธ์ง๋ฅผ ์ ์ฅํ๋ค๊ณ ์์ ์ธ๊ธํ๋๋ฐ, ์ด๋ ํํฐ์ ์ ์ ์ฅํ๊ฒ ๋ ๊น?
์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด Topic 0 ์ Parition 0, 1, 2, 3 ์ด ์ฌ๋ฌ ๋ธ๋ก์ปค์ ๋๋์ด์ ๋ค์ด๊ฐ ์๋ค.
ํ๋ก๋์๊ฐ ๋ง์ฝ Topic 0์ ๋ฉ์ธ์ง๋ฅผ ๋ฃ์ผ๋ ค๊ณ ์๋ํ ๋, ๋ผ์ด๋ ๋ก๋นRound Robin ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํํฐ์ ์ ์ ํํ๊ฑฐ๋, ํํฐ์ ์ ํคKey(์ด๋ ํ๋ก๋์๊ฐ ๋ฉ์ธ์ง๋ฅผ ์ ์ฅํ ๋ ํ ํฝ๊ณผ ๊ฐ์ด ์ ๋ฌํด์ผ ํ๋ค.)๋ฅผ ํตํด ์ ์ฅํ Partition์ ์ ํํ๊ฒ ๋๋ค.
์ปจ์๋จธ Consumer
์ปจ์๋จธ๋ ์ปจ์๋จธ ๊ทธ๋ฃน ๋ด์ ์ํ๊ฒ ๋๋ค. ์ฌ๊ธฐ์ ์ค์ํ ์ ์ ํ ๊ฐ์ ํํฐ์ ์ ์ปจ์๋จธ ๊ทธ๋ฃน ๋ด์ ํ ๊ฐ์ ์ปจ์๋จธ์์ ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ๋ค.
ํ ํํฐ์ ์ ๊ทธ๋ฃน ๋ด ์ปจ์๋จธ๋ค๊ณผ ๊ณต์ ํ ์ ์๋ค. ์ ๊ทธ๋ฆผ์์ ๋ณด๋ค์ํผ, ์ปจ์๋จธ ๊ทธ๋ฃน A์์ ์ปจ์๋จธ 1๊ณผ ์ปจ์๋จธ 2๋ Partition 0์ ์๋ก ๊ณต์ ํ ์ ์๊ณ , ํ ์ปจ์๋จธ๋ง ๊ณต์ ํ๊ณ ์๋ค.
์๋ ์ปจ์๋จธ๊ทธ๋ฃน B์ ์ปจ์๋จธ๋ Partition0, 1์ ๋ชจ๋ ๊ณต์ ํ๊ณ ์๋ค. ๊ทธ๋ฃน ๋ด ๋ค๋ฅธ ์ปจ์๋จธ๊ฐ ๊ณต์ ํ๊ณ ์์ง ์์ ์ํฉ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค.
๋ฐ๋ผ์, ์ปจ์๋จธ ๊ทธ๋ฃน์ ๊ธฐ์ค์ผ๋ก, ํ ๊ฐ์ ์ปจ์๋จธ๊ฐ ํ ๊ฐ์ ํํฐ์ ์ ๊ณต์ ํ๊ณ ์์ผ๋ฏ๋ก ํํฐ์ ์ ๋ฉ์ธ์ง๊ฐ ์์๋๋ก ์ฒ๋ฆฌ๋๋ ๊ฒ์ ๋ณด์ฅํ ์ ์๋ค. (ํ ์ปจ์๋จธ๋ง ๊ณต์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์.)
๋ธ๋ก์ปค Broker
์นดํ์นด์ ๋ถ์ฐ์ฒ๋ฆฌ์ ์ฑ๊ฒฉ๊ณผ ํ์ฅ์ฑ์ด ์ฌ๊ธฐ์ ๋๋ฌ๋๋ค. ์ฌ๋ฌ Topic์ ๊ฐ์ง๊ณ ์๋ ๋ธ๋ก์ปค๋ ๊ฐ๊ฐ์ ๋ ธ๋(์๋ฒ)์ด๋ฉฐ, ์ด์ ์ค์๋ ํ์ฅ์ด ๊ฐ๋ฅํ๋ค. ์นดํ์นด ํด๋ฌ์คํฐ์ ๋ฆฌ์์ค๊ฐ ํ๊ณ์ ๋ค๋ฅด๋ฉด, ๋ธ๋ก์ปค๋ฅผ ์ถ๊ฐํ์ฌ ํ์ฅํ ์ ์๋ค.
๋ณต์ Replication
์นดํ์นด๋ ํํฐ์ ์ ๋ณต์ ๋ฅผ ์ง์ํ๋ค. ์ฌ๊ธฐ์ ๋ณต์ ๋ ํํฐ์ ์ ๋ฆฌํ๋ฆฌ์นดReplica๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ฌ๊ธฐ์ ๋ณต์ ํ ํํฐ์ ์ ์๋ฅผ Replication Factor๋ผ๊ณ ํ๋ค. ์ด๋ ํ ํฝ์ ๋ง๋ค๋ฉด์ ์ง์ ํ ์ ์์ผ๋ฉฐ, ์ด์ ์ 1~3๊ฐ๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ผ๊ณ ํ๋ค. ์ฌ๊ธฐ์ ๋ณต์ ๋ ํํฐ์ ์ ๋ค๋ฅธ ๋ธ๋ก์ปค์ ์ ์ฅ๋๋ค.
Replication Factor ์
1 ~ 2๊ฐ : ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์ด๋ ๋ฌด๊ด, ์ฒ๋ฆฌ์๋ ๋์
3๊ฐ : ๋ฐ์ดํฐ ์ ์ค์ด ์ผ์ด๋๋ฉด ์ ๋๋ ๊ฒฝ์ฐ.
์ด ๋ณต์ ๋ ์๋ฒ์ ์ฅ์ ๊ฐ ์๊ฒผ์ ๋, ์ฅ์ ๋์์ ์ํด ์ฌ์ฉ๋๋ค.
์ฌ๊ธฐ์ ๋ฆฌ๋Leader ์ญํ ์ ํ๋ ํ ํฝ์ด ์ฝ๊ธฐ, ์ฐ๊ธฐ๋ฅผ ๋ชจ๋ ๋ด๋นํ๊ณ ์๋ค๊ฐ, ์๋ฒ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ฉด ํ๋ก์Follower๊ฐ ๋ฆฌ๋๊ฐ ๋๋ฉฐ ํ๋ก๋์์ ์ปจ์๋จธ๋ ์๋ก์ด ๋ฆฌ๋๋ฅผ ํตํด ๋ค์ ๋ฉ์ธ์ง๋ฅผ ํ์ฉํ ์ ์๊ฒ ๋๋ค.
์ด ๊ธฐ๋ฅ์ ํตํด ์นดํ์นด๋ ์์ ์ฑ์ ๋์ฑ ํ๋ณดํ๊ณ ์๋ค.
์นดํ์นด์ ์ฑ๋ฅ
๊ทธ๋ ๋ค๋ฉด, ์ด ์นดํ์นด๋ ์ ์ฌ๋ฌ ํ์ฌ์์ ์ฐ๊ณ ์๋์ง ์์๋ณด๊ฒ ๋ค.
1. ํ์ฅ์ฑ Scalability, ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
์นดํ์นด๋ฅผ ์ด์ฉํ๋ ์ด์ ์ค ๊ฐ์ฅ ํฐ ์ด์ ๋ผ๊ณ ์๊ฐํ๋ค.
ํ ์ฅ๋น์ ์ฉ๋์ ํ๊ณ๊ฐ ์์ ๋, ๋ธ๋ก์ปค๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ํํฐ์ ์ ์ถ๊ฐํจ์ผ๋ก์จ ์๋ฒ๋ฅผ ํ์ฅํ ์ ์๊ณ ,
์ปจ์๋จธ๊ฐ ๋๋ฆฌ๋ค๋ฉด, ์ปจ์๋จธ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ํํฐ์ ์ ์ถ๊ฐํจ์ผ๋ก์จ ํ์ฅํ ์ ์๋ค.
์ฌ๊ธฐ์ ํ์ฅ๋๋ ๋ฐฉํฅ์ ์ํ์ ์ผ๋ก ํ์ฅ๋์ด ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์, ์ผ์ ์ฒ๋ฆฌ๋์ ์ฑ๋ฅ์ ์ป์ ์ ์๋ค.
2. ์ด๋ฒคํธ ๊ธฐ๋ฐ (EDA)
์ต๊ทผ ์ฌ๋ฌ ์๋น์ค๋ค์ด ํ์ฅ๋๊ณ , ํด๋ผ์ด์ธํธ๊ฐ ๋ง์์ง๊ฒ ๋๋ฉด์ ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๋ง์ด ์๊ตฌ๋๊ณ ์๋ค. ๋ฐ๋ผ์, ๋ง์ ๊ธฐ์ ์์ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ๋ฉ์ธ์ง๋ฅผ ์ ๋ฌํ๋ ํจํด์ด ํ์ํ์ ๊ฒ์ด๋ค.
3. ๊ฐ์ฉ์ฑ, ๋ด๊ตฌ์ฑ
์นดํ์นด๋ ๋๊ท๋ชจ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ฉด์ ๋์์ ๋ณต์ ๊ธฐ๋ฅ์ ํตํด ๋์ ๊ฐ์ฉ์ฑ์ ๊ฐ์ง๊ณ ์๋ค. ๋ํ, ํ๋ก๋์์ acks์ต์ ์ ํตํด ๋ชจ๋ ๋ฉ์์ง๋ฅผ ๋ก์ปฌ ๋์คํฌ์ ์ ์ฅํ ์ ์๊ฒ ๋๋ค.(์ธ๊ทธ๋จผํธSegement ๋ผ๊ณ ํ๋ค.)
๋ฐ๋ผ์, ์๋ฒ๊ฐ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋จ๋ logํ์ผ์ ํตํด ์๋ฒ๋ฅผ ์ฌ๊ฐ๋ํ๊ฑฐ๋ ๋ณต๊ตฌํ ์ ์๋ ๊ฒ์ด๋ค.
์ค๋์ ์นดํ์นด์ ๋ํด์ ์์๋ดค๋ค. ์ถํ์๋ ์นดํ์นด๋ฅผ ์ง์ ๊ตฌํํ๊ณ , ์ด์ฉํด ๋ณด๋ฉด์ ํฌ์คํ ํ๊ฒ ๋ค.
์ฐธ๊ณ
https://teki.tistory.com/65
https://www.youtube.com/watch?v=0Ssx7jJJADI&ab_channel=%EC%B5%9C%EB%B2%94%EA%B7%A0
https://www.redhat.com/ko/topics/integration/what-is-apache-kafka
https://www.devkuma.com/docs/apache-kafka/intro/
https://www.slideshare.net/PaoloCastagna1/introduction-to-apache-kafka-confluent-and-why-they-matteR
'DevOps > Kafka' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kafka] Spring-Kafka API ์ ์ฉ & ํ ์คํธ (0) | 2023.09.19 |
---|