What is Apache Kafka?
๐ก Intro
Kafka๋ ๋ง์ ์๋น์ค์์ ๋ฐฑ์๋๋ก ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ ๋ Kafka์ โKโ ์ ๋๋ง ์๊ณ ์๊ธฐ ๋๋ฌธ์, ์ค๋์ Kafka์ ๊ฐ๋ ๊ณผ ๊ธฐ๋ณธ ๊ตฌ์กฐ์ ๋ํด์ ์์๋ณด๋ ค๊ณ ํฉ๋๋ค.
๐ Kafka์ ํ์
๋งํฌ๋์ธ์ ์ฌ์ดํธ๊ฐ ๊ธ์๋๋ก ์ฑ์ฅํ๋ฉด์ ๊ธฐ์กด์ End to End ์ฐ๊ฒฐ ๋ฐฉ์์ด์๋ ์ํคํ ์ฒ๋ก๋ ๋ณต์ก๋, ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ๊ด๋ฆฌ ๋ฑ์ ์ด๋ ค์ ๋๋ฌธ์ ์๋ก์ด ์ํคํ ์ฒ๊ฐ ํ์๋ก ํด์ก์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋งํฌ๋์ธ์ Kafka๋ผ๋ ๋ฉ์์ง ๋ถ์ฐ ์คํธ๋ฆฌ๋ฐ ํ๋ซํผ์ ๊ฐ๋ฐํ๊ฒ ๋์์ต๋๋ค.
๋น์ ๋งํฌ๋์ธ์ ์๊ตฌ์ฌํญ์ 1.๋์ ์ฒ๋ฆฌ๋์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ ํด์ผ ํ๋ฉฐ, 2.๋ฉ์์ง์ ์์์ฑ์ ๋ณด์ฅํด ์ฃผ๊ณ , 3.Scale out์ด ์ฉ์ด ํด์ผ ํ๋ค ๋ฑ์ด ์์์ต๋๋ค. ํ์ง๋ง ๋น์์ ์ ํ๋ค์ ๋์ ์ฒ๋ฆฌ๋์ด ์ฐ์ ์์์๋ ๋งํฌ๋์ธ์ ์๊ตฌ์ฌํญ๋ณด๋ค ํธ๋์ ์ ์ ๊ด๋ฆฌ๊ฐ ๋๋ฌด ์ค๋ฒ์คํ์ด๊ฑฐ๋, ๋ฉ์์ง ํ๋ก ๋ฐ์ดํฐ๋ฅผ ์๊ธด ํ์ง๋ง ์ฅ์๊ฐ ์์ด๋ ๊ฒ์ ๊ณ ๋ คํ์ง ์๋ ๋ฑ์ ๋ฌธ์ ๋ก ์ถฉ์กฑ์ํค์ง ๋ชปํ์ต๋๋ค. ๋น์ ๋งํฌ๋์ธ์ ์์ธํ ์๊ตฌ์ฌํญ์ ๐ํ๋น๋ฏธ๋์ด-๋งํฌ๋์ธ์ ์ ์นดํ์นด๋ฅผ ๋ง๋ค์๋์ ํตํด ํ์ธ ํ์ค ์ ์์ต๋๋ค.
What is Apache Kafka?
Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines,
streaming analytics, data integration, and mission-critical applications.
- ์ถ์ฒ: Apache Kafka
Apache Kafka์ ๊ณต์์ฌ์ดํธ์์๋ Apache Kafka๋ ์์ฒ ๊ฐ์ ๊ธฐ์ ์ด ๊ณ ์ฑ๋ฅ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ, ์คํธ๋ฆฌ๋ฐ ๋ถ์, ๋ฐ์ดํฐ ํตํฉ, ๋ฏธ์ ํฌ๋ฆฌํฐ์ปฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด ์ฌ์ฉํ๋ ์คํ ์์ค ๋ถ์ฐ ์ด๋ฒคํธ ์คํธ๋ฆฌ๋ฐ ํ๋ซํผ์ด๋ผ๊ณ ์ค๋ช ํฉ๋๋ค. ์ฆ, Kafka๋ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์๋นํ๋ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ์ ์ค์ฌ์ ์ญํ ์ ํจ์ผ๋ก์จ ๋ฐ์ดํฐ์ ์ ์ก ์ ์ด, ์ฒ๋ฆฌ, ๊ด๋ฆฌ ์ญํ ์ ํ๋ฉฐ Publish-Subscribe ๋ชจ๋ธ์ ๊ตฌํํ ๋ถ์ฐ ๋ฉ์์ง ์์คํ ์ ๋๋ค.
Message Queue๋? ํ๋ก๊ทธ๋จ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ๋ ์ฌ์ฉํ๋ ํต์ ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ฉฐ ๐Message-Oriented Middleware์ ๊ตฌํ์ ์๋ฏธํฉ๋๋ค.
Apache Kafka์ ํน์ง
- Kafka์ topic์ ์ฌ๋ฌ ํ๋ก๋์๊ฐ ๋์์ ๋ฉ์์ง๋ฅผ ์ ์กํ ์ ์์ผ๋ฉฐ, Kafka topic์ ๋ฉ์์ง๋ฅผ ์ฌ๋ฌ ์ปจ์๋จธ๋ค์ด ๋์์ ์ฝ์ด ๊ฐ ์ ์์ต๋๋ค. ๋๋ฌธ์, ๋ค์ค ํ๋ก๋์/์ปจ์๋จธ์ ์ง์์ผ๋ก ํ๋์ Kafka ์์คํ ์ ํตํด ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์ต๋๋ค.
- Kafka๋ ํ๋ก๋์๊ฐ ์์ฑํ ๋ฉ์์ง๋ฅผ ๋ธ๋ก์ปค๊ฐ ์์นํ ์๋ฒ์ ํ์ผ ์์คํ ์ ์ ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ์ ์์์ฑ์ ๋ณด์ฅํด ์ค๋๋ค.
- Scale out ์ฆ, ํ์ฅ์ฑ์ด ์ฉ์ดํฉ๋๋ค. ํ๋ก๋์, ์ปจ์๋จธ, ๋ธ๋ก์ปค๋ฑ์ ์ด์์ค์ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ ์๋ฅผ ๋ค์ด ์ด์ฐฝ๊ธฐ์ ์ ์ ์์ ๋ธ๋ก์ปค๋ค๋ก ํด๋ฌ์คํฐ๋ฅผ ์ด์ํ๋ค๊ฐ ์์คํ ํธ๋ํฝ์ด ๋์์ง๋ฉด ๋ธ๋ก์ปค๋ฅผ ์ถ๊ฐํด์ ํด๋ฌ์คํฐ๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค.
- Kafka๋ Push๊ฐ ์๋ ์ปจ์๋จธ๊ฐ ๋ธ๋ก์ปค์๊ฒ์ ๋ฉ์์ง๋ฅผ ๊ฐ์ ธ์ค๋ Pull๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ์ปจ์๋จธ์ ์ฒ๋ฆฌ๋์ ๋ธ๋ก์ปค๊ฐ ๊ณ ๋ฏผํ ํ์๊ฐ ์์ต๋๋ค. ์ฆ, ์ปจ์๋จธ๋ ์์ ์ด ์ฒ๋ฆฌํ ์ ์๋ ๋งํผ์ ๋ฉ์์ง๋ง ๋ธ๋ก์ปค์๊ฒ์ ๊ฐ์ ธ๊ฐ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ต์ ์ ๋ฉ์์ง์ฒ๋ฆฌ ์ฑ๋ฅ์ ๊ฐ์ง ์ ์์ต๋๋ค.
Apache Kafka์ ์ํคํ ์ฒ
์ด๋ฏธ์ง 1. Kafka ์ํคํ ์ฒ(์ถ์ฒ: Developer.holee Blog)
Kafka๋ Publish-Subscribe ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฉฐ, ์ ์ด๋ฏธ์ ๊ฐ์ด ํฌ๊ฒ producer, consumer, broker, Zookeeper๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. Producer๋ ํน์ topic์ ๋ฉ์์ง๋ฅผ ์์ฑํ ๋ค ํด๋น ๋ฉ์์ง๋ฅผ broker์ ์ ๋ฌํฉ๋๋ค. Broker๊ฐ ์ ๋ฌ๋ฐ์ ๋ฉ์์ง๋ฅผ topic๋ณ๋ก(Foo, bar) ๋ถ๋ฅํ์ฌ ์์๋์ผ๋ฉด, ํด๋น topic์ ๊ตฌ๋ ํ๋ consumer๋ค์ด ๋ฉ์์ง๋ฅผ ๊ฐ์ ธ๊ฐ์ ์ฒ๋ฆฌํฉ๋๋ค. ํด๋ฌ์คํฐ ๋ด์ broker์ ๋ํ ๋ถ์ฐ ์ฒ๋ฆฌ๋ ์ด๋ฏธ์ง 1. Kafka ์ํคํ ์ฒ์ ๊ฐ์ด ๐Apache ZooKeeper๊ฐ ๋ด๋นํฉ๋๋ค.
์ฌ๋ด์ผ๋ก, Apache Kafka์ ๋ํ ์๋ฃ๋ฅผ ์ฐพ๋ค๊ฐ Apache Kafka์์ Zookeeper์ ์ ๊ฑฐํ๋ค๋ ์์์ด ์๋ค๋ ๊ฒ์ ์๊ฒ๋์์ต๋๋ค. ๐์ํ์น ์นดํ์นด์์ โ์ฃผํคํผโ ๋น ์ง๋คโฆโ๋ด๋ถ ๋ฉํ๋ฐ์ดํฐ ํ๋กํ ์ฝ๋ก ๋์ฒดโ
์กฐ๊ธ ๋ ๊น์ด ๋ค์ด ๊ฐ๊ธฐ ์ , Apache Kafka์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์๋์ ๊ฐ์ต๋๋ค.
- ํ๋ก๋์(Producer) : ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ํค๊ณ Kafka ํด๋ฌ์คํฐ์ ์ ์ฌํ๋ ํ๋ก์ธ์ค์ ๋๋ค.
- ์นดํ์นด ํด๋ฌ์คํฐ(Kafka Cluster) : ์นดํ์นด ํด๋ฌ์คํฐ๋ ์นดํ์นด ์๋ฒ๋ก ์ด๋ฃจ์ด์ง ํด๋ฌ์คํฐ๋ฅผ ๋งํ๋ฉฐ, ์นดํ์นด ํด๋ฌ์คํฐ๋ฅผ ์ด๋ฃจ๋ ๊ฐ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํ ํฝ(Topic) : Kafka ํด๋ฌ์คํฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์ ๊ทธ ๊ธฐ์ค์ด ๋๋ ๊ฐ๋ ์ ๋๋ค. ํ ํฝ์ Kafka ํด๋ฌ์คํฐ์์ ์ฌ๋ฌ๊ฐ ๋ง๋ค ์ ์์ผ๋ฉฐ ํ๋์ ํ ํฝ์ 1๊ฐ ์ด์์ ํํฐ์ ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
- ๋ธ๋ก์ปค(Broker) : Broker๋ ์คํ ๋ Kafka serve ์ค 1๋๋ฅผ ๋ปํฉ๋๋ค.
- ํํฐ์ (Partition) : ๊ฐ ํ ํฝ ๋น ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ ์ฒ๋ฆฌํ๋ ๋จ์์ ๋๋ค. Kafka์์๋ ํ ํฝ ์์ ํํฐ์ ์ ๋๋์ด ๊ทธ ์ ๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ์ฒ๋ฆฌํฉ๋๋ค.
- Offset : ํํฐ์ ๋ด์ ๊ฐ ๋ ์ฝ๋๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณํ๋ ์์ฐจ์ ์ธ ID๋ฅผ ๋ปํฉ๋๋ค.
- ์ฃผํคํผ(Zookeeper) : ์ฃผํคํผ๋ ๋ถ์ฐ ์ฝ๋๋ค์ด์ ์์คํ ์ ๋๋ค. Kafka ๋ธ๋ก์ปค๋ฅผ ํ๋์ ํด๋ฌ์คํฐ๋ก ์ฝ๋๋ค์ดํ ํ๋ ์ญํ ์ ํฉ๋๋ค.
- ์ปจ์๋จธ ๊ทธ๋ฃน(Consumer Group) : ์ปจ์๋จธ์ ์งํฉ์ ๊ตฌ์ฑํ๋ ๋จ์์ ๋๋ค. ์นดํ์นด์์๋ ์ปจ์๋จธ ๊ทธ๋ฃน์ผ๋ก์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ ์ปจ์๋จธ ๊ทธ๋ฃน ์์ ์ปจ์๋จธ ์๋งํผ ํํฐ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
- Broker Partition Replication : Replication์ ๊ฐ Topic์ Partition๋ค์ Kafka Cluster๋ด์ ๋ค๋ฅธ Broker๋ค๋ก ๋ณต์ ํ๋ ๊ฒ์ ๋งํ๋ฉฐ Topic์์ฑ ์ Replication์ ์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์์ฑ๋ Replication์ Leader์ Follower๋ก ๋๋์ด ISR(In Sync Replica)์ด๋ผ๋ ์ผ์ข ์ Replication Group์ ํ์ฑํ์ฌ ๊ด๋ฆฌ๋ฉ๋๋ค.
- ISR(In Sync Replica) : Reader, Follower ํํฐ์ ์ด ๋ชจ๋ ๋๊ธฐํ๋ ์ํ๋ฅผ ๋งํฉ๋๋ค.
Kafka ์ํคํ ์ฒ์ ๊ตฌ์ฑ์์
1. Topic๊ณผ Partition
์ด๋ฏธ์ง 2. Kafka Topic(์ถ์ฒ: Apache Kafka)
ํ๋์ topic์ด 3๊ฐ์ partition์ ๋ถ์ฐ๋์ด ์์ฐจ์ ์ผ๋ก ์ ์ฅ๋์ด์ง๋๋ฐ, ์ด ๋ ๊ฐ partition์ 0๋ถํฐ 1์ฉ ์ฆ๊ฐํ๋ offset ๊ฐ(๊ณ ์ ID)์ ๋ฉ์์ง์ ๋ถ์ฌํฉ๋๋ค. offset ๊ฐ์ partition๋ง๋ค ๋ณ๋๋ก ๊ด๋ฆฌ๋๊ธฐ ๋๋ฌธ์ topic๋ด์์ ๋ฉ์์ง๋ฅผ ์๋ณํ ๋๋ partition ๋ฒํธ์ offset ๊ฐ์ ํจ๊ป ์ฌ์ฉํฉ๋๋ค.
2. Broker
Kafka Cluster๋ ์ฌ๋ฌ๋์ broker(server)๋ก ๊ตฌ์ฑ๋์ด์ ธ ์์ต๋๋ค. ๋ณดํต 3๊ฐ ์ด์์ broker๋ก ํด๋ฌ์คํฐ๋ฅผ ์ด์ํ๋ฉฐ, ๊ฐ๊ฐ์ broker๋ ๊ณ ์ ํ id ๊ฐ์ผ๋ก ๊ตฌ๋ถ๋์ด์ง๋๋ค.
์ด๋ฏธ์ง 3. Replication(ํ๋์์ด ๋ฆฌ๋)
Replication์ ํด๋ฌ์คํฐ๋ก ๋ฌถ์ธ ๋ธ๋ก์ปค ์ค ์ผ๋ถ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์คํ์ง ์๊ณ ์์ ํ๊ฒ ํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. Kafka์ ๋ฐ์ดํฐ ๋ณต์ ๋ ํํฐ์ ๋จ์๋ก ์ด๋ฃจ์ด์ง๋๋ค. ์์ ๊ฐ์ด 3๊ฐ์ broker๊ฐ ์์ ๋, ๋ณต์ ๋ ํํฐ์ ์ 1๊ฐ์ ๋ฆฌ๋(leader)์ N-1๊ฐ์ ํ๋ก์(follower)๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ฐ๊ฐ์ ํ๋ก์๋ ๋ฆฌ๋์ ์คํ์ ์ ํ์ธํ๊ณ , ํ์ฌ ์์ ์ด ๊ฐ์ง๊ณ ์๋ ์คํ์ ๊ณผ ์ฐจ์ด๊ฐ ๋๋ ๊ฒฝ์ฐ ๋ฆฌ๋๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ์์ ์ ํํฐ์ ์ ์ ์ฅํฉ๋๋ค. ํํฐ์ ์ ๋ฐ์ดํฐ๊ฐ ๋ณต์ ๋๋ฏ๋ก ๋ณต์ ๊ฐ์๋งํผ์ ๋น์ฉ์ด ๋ฐ์ํ๊ฒ ๋์ง๋ง ๋ฐ์ดํฐ์ ์์ ์ด ๋ณด์ฅ๋๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๋น์ฉ์ ๊ฐ์ํ๊ณ ๋ณต์ ๋ฅผ ์ํํ๋ค๊ณ ํฉ๋๋ค.
์ด๋ฏธ์ง 4. Replication-error
์ฌ๊ธฐ์ ๊ฐ์๊ธฐ ๋ฆฌ๋์ broker์ error๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค๋ฉด, ํ๋ก์ ํํฐ์ ์ค ํ๋๊ฐ ๋ฆฌ๋ ํํฐ์ ์ ์ง์๋ฅผ ๋๊ฒจ๋ฐ๊ฒ ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์ง ์๊ณ ๋ฐ์ดํฐ์ ์์ ์ฑ์ ๋ณด์ฅํ ์ ์๊ฒ ๋ฉ๋๋ค.
3. Consumers์ Consumer Groups
์ด๋ฏธ์ง 5. Consumer Groups
Kafka์ ํํฐ์ ์ consumer group๋น ์ค๋ก์ง ํ๋์ ์ปจ์๋จธ์ ์ ๊ทผ๋ง์ ํ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ๋์ผํ consumer group์ ์ํ๋ ์ปจ์๋จธ๋ผ๋ฆฌ๋ ๋์ผํ ํํฐ์ ์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๋ง์ผ, ์ปจ์๋จธ๊ฐ ์ถ๊ฐ/์ ๊ฑฐ๋๋ฉด ์ถ๊ฐ/์ ๊ฑฐ๋ ์ปจ์๋จธ๊ฐ ์ํ consumer group ๋ด์ ์ปจ์๋จธ๋ค์ ํํฐ์ ์ฌ๋ถ๋ฐฐ๊ฐ ๋ฐ์ํ๊ณ , broker๊ฐ ์ถ๊ฐ/์ ๊ฑฐ๋๋ฉด ์ ์ฒด consumer group์์ ํํฐ์ ์ฌ๋ถ๋ฐฐ๊ฐ ๋ฐ์ํฉ๋๋ค.
์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด consumer group์ ๊ตฌ์ฑํ๋ ์ปจ์๋จธ์ ์๊ฐ ํํฐ์ ์ ์๋ณด๋ค ์์ผ๋ฉด ํ๋์ ์ปจ์๋จธ๊ฐ ์ฌ๋ฌ ๊ฐ์ ํํฐ์ ์ ์์ ํ ์ ์์ต๋๋ค. ํ์ง๋ง, ๋ฐ๋๋ก ์ปจ์๋จธ์ ์๊ฐ ํํฐ์ ์ ์๋ณด๋ค ๋ง๋ค๋ฉด ๋ช๋ช ์ปจ์๋จธ๋ ์ํ ํ๋ ๊ฒ์ด ์์ด ๋๊ณ ์์ ์ ์์ต๋๋ค. ๋๋ฌธ์ ํํฐ์ ๊ฐ์์ ์ปจ์๋จธ ์์ ์ ์ ํ ์ค์ ์ด ํ์ํฉ๋๋ค.
๋๋งบ์
Apache Kafka๋ ๊ทผ๋์ ๊ฐ์ก๋ ๊ฐ์ฅ ์ต๊ณ ์ ๊ด์ฌ์ฌ ์๋๋ฐ, ์ค๋ ๊ณต๋ถ๋ฅผ ํด๋ณด๋ฉด์ ์ด๋ก ๋ง์ผ๋ก๋ ๋ถ์กฑํ๋ค๋ ๋๋์ ์ ์คํ ๊ฒฝํํ์ต๋๋ค. ๋ค์ ํฌ์คํ ์๋ ์ด๋ก ์ด ์๋ ์ค์ ํธ์ Kafka๋ฅผ ํฌ์คํ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค! ๊ณต๋ถํ๋ฉด์ ํฌ์คํ ์ ํ๋ค๋ณด๋ ๋ง์ ๋ถ์กฑํ ์ ์ด ์์ ์ ์์ต๋๋ค. ํน์ฌ๋ ๋ด์ฉ์ ์ด์์ด ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌ๋๋ฆฝ๋๋ค! ๐๐
[์ฐธ๊ณ ์๋ฃ]