Core Components
์ด๋ฒคํธ(Event)
์นดํ์นด์์ ๋ค๋ฃจ๋ ๋ฐ์ดํฐ์ ์ต์ ๋จ์๋ฅผ ์๋ฏธํ๋ฉฐ, ์ด๋ฒคํธ๋ ๋จ์ํ ๋ฐ์ดํฐ ๋ฉ์ด๋ฆฌ๊ฐ ์๋, ์ ํํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.(๋ ์ฝ๋ ๋๋ ๋ฉ์์ง๋ผ๊ณ ๋ ๋ถ๋ฆผ)
ํค(Key): ์ด๋ฒคํธ์ ๋ ผ๋ฆฌ์ ์ธ ์๋ณ์ ์ญํ ์ ํ๋ ๋ฐ์ดํฐ
ํค์ ์ฃผ๋ ๋ชฉ์ ์ ํํฐ์ ๋๊ณผ ๋ก๊ทธ ์์ถ
ํ๋ก๋์๊ฐ ๊ธฐ๋ณธ ํํฐ์ ๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ๋์ผํ ํค๋ฅผ ๊ฐ์ง ์ด๋ฒคํธ๋ค์ ํญ์ ๋์ผํ ํํฐ์ ์ผ๋ก ์ ์ก๋๋ ๊ฒ์ ๋ณด์ฅ
ํน์ ํค์ ๋ํ ์ด๋ฒคํธ ์ฒ๋ฆฌ ์์๋ฅผ ๋ณด์ฅํ๋ ํต์ฌ์ ์ธ ๋ฉ์ปค๋์ฆ
๋ก๊ทธ ์์ถ(Log Compaction) ์์๋ ์ด ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ์ฌ, ๋์ผ ํค์ ์ต์ ์ด๋ฒคํธ๋ง ๋จ๊ธฐ๊ณ ๊ณผ๊ฑฐ ์ด๋ฒคํธ๋ฅผ ์ ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ
๊ฐ(Value): ์ด๋ฒคํธ์ ์ค์ ๋ฐ์ดํฐ ๋ณธ๋ฌธ(Payload)
๋ณดํต JSON, Avro, Protobuf ๋ฑ ํน์ ํฌ๋งท์ผ๋ก ์ง๋ ฌํ๋ ๋ฐ์ดํธ ๋ฐฐ์ด ํํ
์นดํ์นด ์์ฒด๋ ๊ฐ์ ๋ด์ฉ์ ํด์ํ์ง ์์ผ๋ฉฐ, ๋จ์ง ๋ฐ์ดํธ ๋ฐฐ์ด๋ก ์ทจ๊ธ
ํ์์คํฌํ(Timestamp): ์ด๋ฒคํธ์ ์ฐ๊ฒฐ๋ ์๊ฐ ์ ๋ณด
์ด๋ฒคํธ๊ฐ ์์ฑ๋ ์๊ฐ์ ๋ํ๋ด๋
CreateTime๊ณผ, ์นดํ์นด ๋ธ๋ก์ปค์ ์ ์ฅ๋ ์๊ฐ์ ๋ํ๋ด๋LogAppendTime๋ ๊ฐ์ง ํ์ ์กด์ฌํ์์คํฌํ๋ก ์๊ฐ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ ๋ณด๊ด ์ ์ฑ (Retention)์ ์ฌ์ฉ
ํค๋(Headers): ์ ํ์ ์ธ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ๊ณต๊ฐ
์ด๋ฒคํธ์ ๊ฐ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์ ์ถ์ ID(Trace ID), ๋ฐ์ดํฐ ์ถ์ฒ ์ ๋ณด ๋ฑ ๋ถ๊ฐ์ ์ธ ์ปจํ ์คํธ๋ฅผ ์ ๋ฌํ๋ ๋ฐ ์ฌ์ฉ
ํ ํฝ ๋ด ๊ตฌ์ฑ ์์(Topic Components)
ํ ํฝ(Topic): ์ด๋ฒคํธ ์คํธ๋ฆผ์ ๊ตฌ๋ถํ๊ธฐ ์ํ ๋ ผ๋ฆฌ์ ์ธ ์ด๋ฆ
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ด๋ ํ์ผ ์์คํ ์ ํด๋์ ์ ์ฌํ ๊ฐ๋
ํ๋ก๋์๋ ํน์ ํ ํฝ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ๋ฐํํ๊ณ ์ปจ์๋จธ๋ ํน์ ํ ํฝ์ ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋
ํํฐ์ (Partition): ํ๋์ ํ ํฝ์ ๊ตฌ์ฑํ๋ ๋ฌผ๋ฆฌ์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ์
ํ ํฝ์ ํ๋ ์ด์์ ํํฐ์ ์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ ํํฐ์ ์ ์์๊ฐ ๋ณด์ฅ๋๋ ๋ถ๋ณ์ ๋ก๊ทธ(Immutable Log)
์ด ํํฐ์ ์ ํตํด ์นดํ์นด์ ๋ณ๋ ฌ์ฒ๋ฆฌ์ ํ์ฅ์ฑ ๊ตฌํ
ํ ํ ํฝ์ ์ฒ๋ฆฌ๋์ ๋๋ฆฌ๋ ค๋ฉด ํํฐ์ ์๋ฅผ ๋๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ์ํ ํ์ฅ ๊ฐ๋ฅ
๋จ, ์ด๋ฒคํธ ์ฒ๋ฆฌ ์์๋ ํ ํฝ ์ ์ฒด๊ฐ ์๋ ํํฐ์ ๋ด์์๋ง ๋ณด์ฅ(๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ์ํด ๊ธ๋ก๋ฒ ์์ ๋ณด์ฅ์ ํฌ๊ธฐํ ์ค์ํ ์ํคํ ์ฒ์ ํธ๋ ์ด๋ ์คํ)
์คํ์ (Offset): ํํฐ์ ๋ด์์ ๊ฐ ์ด๋ฒคํธ๊ฐ ๊ฐ์ง๋ ์ ์ผํ๊ณ ์์ฐจ์ ์ธ ์๋ณ ๋ฒํธ
longํ์ ์ ์ ์ ๊ฐ์ด๋ฉฐ, ํด๋น ํํฐ์ ๋ด์์๋ ์ ๋ ์ค๋ณต๋๊ฑฐ๋ ์ฌ์ฌ์ฉ๋์ง ์๊ณ ๋จ์กฐ ์ฆ๊ฐ(Monotonically Increasing)์ปจ์๋จธ๋ ์ด ์คํ์ ์ ๊ธฐ์ค์ผ๋ก ์์ ์ด ์ด๋๊น์ง ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋์ง ์์น๋ฅผ ๊ธฐ๋ก
๋ธ๋ก์ปค & ํด๋ฌ์คํฐ(Broker & Cluster)
๋ธ๋ก์ปค(Broker): ์นดํ์นด ์๋ฒ ํ ๋๋ฅผ ์๋ฏธํ๋ ๋จ์
๋ธ๋ก์ปค๋ ํํฐ์ ๋ก๊ทธ์ ๋ฌผ๋ฆฌ์ ์ ์ฅ, ๋ฐ์ดํฐ์ ๋ณต์ , ๊ทธ๋ฆฌ๊ณ ํด๋ผ์ด์ธํธ์ ์ฝ๊ธฐ/์ฐ๊ธฐ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ๋ด๋น
ํด๋ฌ์คํฐ (Cluster): ์ฌ๋ฌ ๋์ ๋ธ๋ก์ปค๊ฐ ํจ๊ป ๋์ํ๋ ๊ทธ๋ฃน
ํด๋ฌ์คํฐ ๊ตฌ์ฑ์ ํตํด ๋จ์ผ ๋ธ๋ก์ปค์ ์ฅ์ ์ ๋์ํ๋ ๊ณ ๊ฐ์ฉ์ฑ์ ํ๋ณดํ๊ณ , ๋ถํ๋ฅผ ์ฌ๋ฌ ๋ธ๋ก์ปค์ ๋ถ์ฐํ์ฌ ์ ์ฒด ์์คํ ์ ์ฒ๋ฆฌ ์ฉ๋์ ์ํ์ ์ผ๋ก ํ์ฅ
ํด๋ฌ์คํฐ ๋ด ๋ธ๋ก์ปค ์ค ํ ๋๋ ์ปจํธ๋กค๋ฌ(Controller) ์ญํ ์ ์ํํ๋ฉฐ, ํํฐ์ ์ ๋ฆฌ๋ ์ ์ถ์ด๋ ๋ธ๋ก์ปค์ ์ํ ๋ณํ ๊ฐ์ง ๋ฑ ํด๋ฌ์คํฐ ์ ์ฒด์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌ
ํ๋ก๋์ & ํํฐ์
๋(Producer & Partitioner)
ํ๋ก๋์๋ ์ด๋ฒคํธ๋ฅผ ์์ฑํ์ฌ ์นดํ์นด ํ ํฝ์ผ๋ก ์ ์กํ๋ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก, ์ด๋ ํํฐ์ ๋๋ ํ๋ก๋์๊ฐ ๋ณด๋ผ ์ด๋ฒคํธ๊ฐ ํ ํฝ์ ์ด๋ ํํฐ์ ์ผ๋ก ๊ฐ์ผ ํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ค.
ํํฐ์ ๋: ์ด๋ฒคํธ์ ํฌํจ๋ ํค(Key) ์ ๋ฌด์ ๋ฐ๋ผ ํน์ ํํฐ์ ์ ์์๋ฅผ ๋ณด์ฅํ๊ฑฐ๋, ์ฌ๋ฌ ํํฐ์ ์ ์์ ์ ๋ถ์ฐ
์ ์ก ๋ณด์ฅ:
acks์ค์ ์ ํตํด ๋ฐ์ดํฐ ์ ์ก ๋ณด์ฅ ์์ค์ ์กฐ์ ํ๋ฉฐ, ์ฌ์๋(retries) ๋ฉ์ปค๋์ฆ์ ํตํด ์ผ์์ ์ธ ์ค๋ฅ์ ๋์๊ณ ์ฑ๋ฅ ์ฒ๋ฆฌ: ๋ด๋ถ์ ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ๋ฐฐ์น(Batch)๋ก ๋ฌถ๊ณ ์์ถํ์ฌ ๋คํธ์ํฌ ํจ์จ์ฑ์ ๊ทน๋ํ
์ค๋ณต ๋ฐฉ์ง: ๋ฉฑ๋ฑ์ฑ(Idempotence) ์ต์ ์ ํตํด ์ฌ์๋ ์ ๋ฐ์ํ ์ ์๋ ๋ฉ์์ง ์ค๋ณต ์ ์ก์ ๋ฐฉ์ง ๊ฐ๋ฅ
์ปจ์๋จธ์ ์ปจ์๋จธ ๊ทธ๋ฃน(Consumer & Consumer Group)
์ปจ์๋จธ๋ ์นดํ์นด ํ ํฝ์์ ์ด๋ฒคํธ๋ฅผ ์ฝ์ด๊ฐ๋ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฉฐ, ์ปจ์๋จธ ๊ทธ๋ฃน์ ๋์ผํ ๋ชฉ์ ์ ์ํด ํน์ ํ ํฝ์ ๊ตฌ๋ ํ๋ ์ปจ์๋จธ๋ค์ ์งํฉ์ด๋ค.
๋ณ๋ ฌ ์ฒ๋ฆฌ: ํ๋์ ํ ํฝ์ ์ฌ๋ฌ ์ปจ์๋จธ๊ฐ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ์ฌ ๋์ ์ฒ๋ฆฌ๋์ ๋ฌ์ฑํ๋ ํ์ฅ์ฑ์ ํต์ฌ ๋จ์
ํํฐ์ ์์ ๊ถ: ํ ํฝ์ ๊ฐ ํํฐ์ ์ ๊ทธ๋ฃน ๋ด ๋จ ํ๋์ ์ปจ์๋จธ์๊ฒ๋ง ํ ๋น๋์ด, ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ค๋ณต์ ๋ฐฉ์ง
๊ณ ๊ฐ์ฉ์ฑ: ๊ทธ๋ฃน ๋ด ์ปจ์๋จธ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ฆฌ๋ฐธ๋ฐ์ฑ(Rebalancing)์ ํตํด ๋ค๋ฅธ ์ปจ์๋จธ๊ฐ ์๋์ผ๋ก ํด๋น ํํฐ์ ์ ์ธ๊ณ๋ฐ์ ์ง์์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋ณด์ฅ
์ํ ๊ด๋ฆฌ: ์ปจ์๋จธ๋ ์คํ์ (Offset)์ ์ปค๋ฐ(Commit)ํ์ฌ ์์ ์ด ์ด๋๊น์ง ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋์ง ์์น๋ฅผ ๊ธฐ๋กํ๊ณ ๊ด๋ฆฌ
Last updated
Was this helpful?