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?