๐Ÿ›ณ DevOps/๐Ÿš Kafka

Kafka์˜ ์ดํ•ด1 - ๋ฐฐ๊ฒฝ๋ถ€ํ„ฐ ๊ธฐ๋ณธ ์šฉ์–ด ์„ค๋ช…

DevPoong 2023. 5. 31. 16:27

๋‚˜๋Š” ์ด๋ฒˆ์— ์ฐธ์—ฌํ•˜๋Š” ํ”„๋กœ์ ํŠธ์—์„œ Micro Service Architecture๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๊ธฐ์—
๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Kafka๋ฅผ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

Kafka์˜ ํƒ„์ƒ ๋ฐฐ๊ฒฝ 

๋งํฌ๋“œ์ธ์ด๋ผ๋Š” ์‚ฌ์ดํŠธ๊ฐ€ ๊ธ‰์†๋„๋กœ ์„ฑ์žฅํ•˜๊ฒŒ ๋˜๋ฉด์„œ ์‹œ์Šคํ…œ ์œ ์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๊ณ 
   ์†Œ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ๊ฐ€ ์ตœ์ข… ์ ์žฌ๋˜๋Š” Target ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ณต์žก์„ฑ์ด ์žˆ์—ˆ๋‹ค.

์œ„์™€ ๊ฐ™์ด ์‹œ์Šคํ…œ์ด ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ์•„๋ž˜์™€ ๊ฐ™์€ End-to-End ์‹œ์Šคํ…œ์˜ ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•œ๋‹ค.

  • ๋ฐ์ดํ„ฐ ์ „์†ก ํŒŒ์ดํ”„๋ผ์ธ์ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋ณต์žกํ•ด์ง
  • Src-to-Target ํŒŒ์ดํ”„๋ผ์ธ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด์„œ ์†Œ์Šค์ฝ”๋“œ ๋ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ด์Šˆ ๋ฐœ์ƒ
  • target app์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, Source app์—๋„ ์˜ํ–ฅ์„ ์คŒ (๋†’์€ ๊ฒฐํ•ฉ๋„)
  • ๋‹ค์–‘ํ•œ ETL(Extract Transform Load) ํˆด์„ ์ ์šฉํ•˜์—ฌ ๊ฐœ์„ ์˜ ๋…ธ๋ ฅ์„ ํ–ˆ์œผ๋‚˜ ์™„๋ฒฝํ•œ ํ•ด๊ฒฐ์ฑ…์ด ๋˜์ง€ ๋ชปํ•จ

 

Kafka 

๊ณ ์„ฑ๋Šฅ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ, ์ŠคํŠธ๋ฆฌ๋ฐ ๋ถ„์„, ๋ฐ์ดํ„ฐ ํ†ตํ•ฉ ๋ฐ ๋ฏธ์…˜ ํฌ๋ฆฌํ‹ฐ์ปฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•ด ์„ค๊ณ„๋œ
๊ณ ์„ฑ๋Šฅ ๋ถ„์‚ฐ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ

๋ชฉํ‘œ

  • ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š”(Producer) ๊ณณ๊ณผ ์†Œ๋น„ํ•˜๋Š”(Consumer) ๊ณณ์˜ ๋ถ„๋ฆฌ
  • ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ๊ณผ ๊ฐ™์ด ์˜๊ตฌ ๋ฉ”์‹œ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ Consumer์—๊ฒŒ ํ—ˆ์šฉ
  • ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์œ„ํ•œ ๋ฉ”์‹œ์ง€ ์ตœ์ ํ™”
  • ๋ฐ์ดํ„ฐ๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์Šค์ผ€์ผ์•„์›ƒ์ด ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ

ํ™œ์šฉ

  • ๋กœ๊ทธ๊ธฐ๋ก
    • ํ˜„๋Œ€์˜ IT ์„œ๋น„์Šค๋Š” ๋””์ง€ํ„ธ ์ •๋ณด๋กœ ๊ธฐ๋ก๋˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์ €์žฅ
    • ์‡ผํ•‘๋ชฐ์˜ ๊ฒฐ์ œ ๋‚ด์—ญ, ๋ฐฉ๋ฌธํ•œ ์œ„์น˜ ์ •๋ณด, ๋Œ“๊ธ€ ๋“ฑ ๋ชจ๋“  ๋ฐœ์ž์ทจ๋ฅผ ๊ธฐ๋ก
  • ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
    • ์Šคํ‚ค๋งˆ ๊ธฐ๋ฐ˜์˜ ์ •ํ˜• ๋ฐ์ดํ„ฐ
    • ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ(๊ทธ๋ฆผ, ์˜์ƒ, ์Œ์„ฑ)
    • ๋น…๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์„ ํ–‰ ์ž‘์—…(ํ•œ ๊ณณ์— ๋ฐ์ดํ„ฐ ๋ชจ์œผ๊ธฐ - Data Lake)
  • Extract, Transforming, Load(ETL) ํ•˜๋Š” ๊ณผ์ •์„ ๋ฌถ์€ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•
    • ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์€ ํŒŒํŽธํ™” ๋จ

๊ตฌ์กฐ

๋‚ด๋ถ€ ๊ตฌ์กฐ

  • Producer: ๋ฉ”์‹œ์ง€ ์ƒ์‚ฐ
  • Consumer: ๋ฉ”์‹œ์ง€ ์†Œ๋น„
  • Broker(Server): ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ
  • Zookeeper: ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌ

 

Kafka ๊ธฐ๋ณธ ์šฉ์–ด

1. Topic

  • ๋ฐ์ดํ„ฐ์˜ ์ฃผ์ œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋…ผ๋ฆฌ์ ์ธ ๊ฐœ๋… (ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ ๊ฐ™์€ ๋ฌผ๋ฆฌ์  ๋Œ€์ƒ์ด ์•„๋‹˜)
  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”๊ณผ ์œ ์‚ฌ
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ Partition์œผ๋กœ ์ชผ๊ฐœ์งˆ ์ˆ˜ ์žˆ์Œ
  • Key-Value ๊ธฐ๋ฐ˜์˜ ๋ฉ”์‹œ์ง€ ๊ตฌ์กฐ

1-1. Topic์˜ ์ด๋ฆ„ ์ œ์•ฝ ์กฐ๊ฑด

  • ๋นˆ ๋ฌธ์ž์—ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์˜๋ฌธ, ์ˆซ์ž, '.', '_', '-' ๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•จ
  • ๋งˆ์นจํ‘œ์™€ ์–ธ๋”๋ฐ”๊ฐ€ ๋™์‹œ์— ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ๋จ
  • ex.topic์ด ์กด์žฌํ•  ๋•Œ ex_topic์€ ์ƒ์„ฑ ๋ถˆ๊ฐ€๋Šฅํ•จ.

1-2. Topic ์ด๋ฆ„ ๊ถŒ์žฅ ์‚ฌํ•ญ (ํ† ํ”ฝ๋งŒ์œผ๋กœ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ถ” ๊ฐ€๋Šฅํ•˜๋„๋ก)

  • <ํ™˜๊ฒฝ>.<ํŒ€-๋ช…>.<์• ํ”Œ๋ฆฌ์ผ€์ด์…˜-๋ช…>.<๋ฉ”์‹œ์ง€-ํƒ€์ž…>
  • <ํ”„๋กœ์ ํŠธ-๋ช…>.<์„œ๋น„์Šค-๋ช…>.<ํ™˜๊ฒฝ>.<์ด๋ฒคํŠธ-๋ช…>
  • <์นดํ”„์นด-ํด๋Ÿฌ์Šคํ„ฐ-๋ช…>.<ํ™˜๊ฒฝ>.<์„œ๋น„์Šค-๋ช…>.<๋ฉ”์‹œ์ง€-ํƒ€์ž…>

2. Partitions

  • Topic์€ ์—ฌ๋Ÿฌ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋‚˜๋ˆ ์งˆ ์ˆ˜ ์žˆ์Œ
  • ๊ฐœ๋ณ„ ํŒŒํ‹ฐ์…˜์€ ์„œ๋กœ ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์Œ
  • ์นดํ”„์นด์—์„œ ํ† ํ”ฝ์€ ๋…ผ๋ฆฌ์ ์ธ ๊ฐœ๋…์ด๊ณ , ํŒŒํ‹ฐ์…˜์€ ํ† ํ”ฝ์— ์†ํ•œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์‹ค์ œ ์ €์žฅ์†Œ์— ์ €์žฅํ•˜๋Š” ๋‹จ์œ„
  • ๊ฐ๊ฐ์˜ ํŒŒํ‹ฐ์…˜์€ Append-Only(์ฐจ๋ก€๋Œ€๋กœ ์Œ“์ด๋Š”) ๋ฐฉ์‹์œผ๋กœ ๊ธฐ๋ก๋˜๋Š” ํ•˜๋‚˜์˜ ๋กœ๊ทธ ํŒŒ์ผ
  • ์ˆ˜์ •, ์ค‘๊ฐ„ ์š”์†Œ ์‚ญ์ œ ๋“ฑ์ด ์—†์œผ๋ฏ€๋กœ(immutable) ๊ตฌ์กฐ๊ฐ€ ๊ฐ„๋‹จํ•˜๋ฉฐ ์„ฑ๋Šฅ์ด ๋†’๋‹ค.

3. Offset

ํŒŒํ‹ฐ์…˜ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์œ ๋‹ˆํฌํ•œ ์ •์ˆ˜ํ˜• ์ˆซ์ž

  • ์นดํ”„์นด์˜ consumer๊ฐ€ poll()์„ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค, ์นดํ”„์นด์— ์ €์žฅ๋˜์–ด ์žˆ์ง€๋งŒ ์•„์ง ์ฝ์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€๋“ค์„ ๊ฐ€์ ธ์˜ด
    • ํ•˜๋‚˜์˜ ๋ฉ”์‹œ์ง€ ๋‹จ์œ„๋ฅผ Record๋ผ๊ณ  ํ•จ.
  • ์นดํ”„์นด๋Š” consumer group ๋‹จ์œ„๋กœ offset์„ ๊ด€๋ฆฌ
  • Producer๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์˜คํ”„์…‹ ์ˆซ์ž๋Š” ํ•˜๋‚˜์”ฉ ์ฆ๊ฐ€
  • ๊ฐœ๋ณ„ ํŒŒํ‹ฐ์…˜๋‚ด์—์„œ ์ •๋ ฌ๋˜๊ณ  offset์ด ํ• ๋‹น๋จ
  • Consumer๋Š” ํ† ํ”ฝ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ์€ ํ›„ ์ฝ์—ˆ๋‹ค๋Š” ์ปค๋ฐ‹์„ ํ‘œ์‹œํ•จ

4. Partition Replication

  • ํ† ํ”ฝ์˜ ํŒŒํ‹ฐ์…˜๋“ค์ด ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ถ„์‚ฐ ๋ธŒ๋กœ์ปค์— ์ €์žฅ๋จ ( ๋ณต์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํŒŒํ‹ฐ์…˜์€ Leader์™€ Follower๋กœ ๊ตฌ๋ถ„)
  • Producer๋Š” ๋ฉ”์‹œ์ง€๋ฅผ Leader๋กœ๋งŒ ์ „๋‹ฌ

replication factor๊ฐ€ 2์ผ ๋•Œ

  • ํŒŒํ‹ฐ์…˜๋“ค์€ ์–ด๋–ค ๋ธŒ๋กœ์ปค์— ์กด์žฌํ•˜๋Š” ํŒŒํ‹ฐ์…˜์ด ๋ฆฌ๋”๊ฐ€ ๋ ์ง€ ๋ชจ๋ฅด๋ฉฐ ๋ฆฌ๋” ์„ ์ถœ์€ Zookeeper๊ฐ€ ์ง„ํ–‰
  • ์นดํ”„์นด์˜ ๋ฐ์ดํ„ฐ ๋ณต์ œ๋Š” ํŒŒํ‹ฐ์…˜ ๋‹จ์œ„๋กœ ์ด๋ฃจ์–ด์ง
  • ํ† ํ”ฝ์„ ์ƒ์„ฑํ•  ๋•Œ ํŒŒํ‹ฐ์…˜์˜ ๋ณต์ œ ๊ฐœ์ˆ˜ ์„ค์ •
  • ๋ณต์ œ ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์€ 1 (๋ณต์ œ ์—†์Œ), ์ตœ๋Œ€๊ฐ’์€ ๋ธŒ๋กœ์ปค ๊ฐœ์ˆ˜๋งŒํผ
  • ๋ณต์ œ๋œ ํŒŒํ‹ฐ์…˜์€ Leader์™€ Follower๋กœ ๊ตฌ์„ฑ
    • Leader: Producer ๋˜๋Š” Consumer์™€ ์ง์ ‘ ํ†ต์‹ ํ•˜๋Š” ํŒŒํ‹ฐ์…˜
    • Follower: ๋ณต์ œ๋ณธ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŒŒํ‹ฐ์…˜
  • Follower๋“ค์€ Leader์˜ Offset์„ ํ™•์ธํ•˜์—ฌ ํ˜„์žฌ ์ž์‹ ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Offset๊ณผ ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ๋ณต์ œ๋ฅผ ์‹œ๋„
  • ๋‹น์—ฐํ•˜์ง€๋งŒ, ๋ณต์ œ ๊ฐœ์ˆ˜๋งŒํผ ์ €์žฅ ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€
  • ํ•˜๋‚˜์˜ Leader๊ฐ€ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ISR ์ค‘์—์„œ ์ƒˆ Leader๊ฐ€ ์„ ์ถœ๋จ

5. Controller

  • ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋‹ค์ˆ˜ ๋ธŒ๋กœ์ปค ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰
  • ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋‹ค๋ฅธ ๋ธŒ๋กœ์ปค๋“ค์˜ ์ƒํƒœ๋ฅผ ์ฒดํฌํ•˜๊ณ  ๋ธŒ๋กœ์ปค๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋น ์ง€๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋ธŒ๋กœ์ปค์— ์กด์žฌํ•˜๋Š” ๋ฆฌ๋” ํŒŒํ‹ฐ์…˜์„ ์žฌ๋ถ„๋ฐฐ
  • ์ปจํŠธ๋กค๋Ÿฌ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒฝ์šฐ์—๋Š” Zookeeper๊ฐ€ ๋‹ค๋ฅธ ๋ธŒ๋กœ์ปค๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์„ ์ถœํ•จ

6. ๋ฐ์ดํ„ฐ ์‚ญ์ œ

  • Consumer๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๊ฐ€๋”๋ผ๋„ ํ† ํ”ฝ์˜ ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œ ์•ˆ๋จ
  • Consumer๋‚˜ Producer๊ฐ€ ๋ฐ์ดํ„ฐ ์‚ญ์ œ๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์—†์Œ ( ๋ธŒ๋กœ์ปค๋งŒ ์‚ญ์ œ ๊ถŒํ•œ์„ ๊ฐ€์ง )
  • ๋ฐ์ดํ„ฐ ์‚ญ์ œ๋Š” ํŒŒ์ผ ๋‹จ์œ„๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ ์ด ๋‹จ์œ„๋ฅผ Log Segment๋ผ๊ณ  ๋ถ€๋ฆ„

7. Segment

  • ํŒŒํ‹ฐ์…˜์€ ์„ธ๊ทธ๋จผํŠธ๋กœ ๊ตฌ์„ฑ๋จ (ํŒŒํ‹ฐ์…˜(์„ธ๊ทธ๋จผํŠธ1, ์„ธ๊ทธ๋จผํŠธ2))
  •  ๋‹ค์ˆ˜์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ์œผ๋ฏ€๋กœ ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ฒ˜๋Ÿผ ํŠน์ •๋ฐ์ดํ„ฐ๋ฅผ ์„ ๋ณ„ํ•ด์„œ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Œ
  • ์„ธ๊ทธ๋จผํŠธ๋Š” ํฌ๊ธฐ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ 1GB์ด๋ฉฐ ์กฐ์ ˆ ๊ฐ€๋Šฅํ•จ
  • ๋„ˆ๋ฌด ์ž‘์€ ์šฉ๋Ÿ‰์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋“ค์„ ์ €์žฅํ•˜๋Š” ๋™์•ˆ ์„ธ๊ทธ๋จผํŠธ ํŒŒ์ผ์„ ์ž์ฃผ ์—ฌ๋‹ซ์Œ์œผ๋กœ์จ ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผ ํ•จ.
  • ํŒŒํ‹ฐ์…˜๋‹น ํ•˜๋‚˜์˜ Segment๊ฐ€ ํ™œ์„ฑํ™”๋จ

8. ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ์„œ๋ฒ„

  • ํด๋Ÿฌ์Šคํ„ฐ์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๋ธŒ๋กœ์ปค๋Š” BootStrap Server๋ผ๊ณ  ๋ถ€๋ฆ„
  • Client๊ฐ€ ํŠน์ • ํ•˜๋‚˜์˜ Broker์—๋งŒ ์—ฐ๊ฒฐํ•˜๋ฉด ์ž๋™์œผ๋กœ Broker๊ฐ€ Broker ์ „์ฒด List๋ฅผ ์ „๋‹ฌ
  • Client๋Š” ์ด ์ •๋ณด๋ฅผ ํ†ตํ•ด์„œ ๋‚ด๊ฐ€ ์ ‘์†ํ•ด์•ผ(Read/Write) ํ•˜๋Š” Topic ๊ทธ๋ฆฌ๊ณ  ๊ทธ Topic์„ ๊ตฌ์„ฑํ•˜๋Š” Partition์ด ์–ด๋””์— ์žˆ๋Š”์ง€ ์•Œ๊ฒŒ๋˜๊ณ  Client๋Š” ์ž๋™์œผ๋กœ ์ž๊ธฐ๊ฐ€ ํ•„์š”ํ•œ Broker๋“ค๋กœ ์—ฐ๊ฒฐ

9. Zookeeper

  • Zookeeper๋Š” Broker๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด
  • ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ Broker๋“ค์˜ ๋ชฉ๋ก/์„ค์ • ๊ด€๋ฆฌ, ํ† ํ”ฝ ๋ชฉ๋ก ๊ด€๋ฆฌ, ํŒŒํ‹ฐ์…˜ ๊ด€๋ฆฌ
  • ์ฃผํ‚คํผ ์—†์ด๋Š” ์นดํ”„์นด๊ฐ€ ๋™์ž‘ํ•  ์ˆ˜ ์—†์Œ

9-1. Zookeeper Failover

  • Zookeeper๊ฐ€ ํ™€์ˆ˜ ์„œ๋ฒ„๋กœ ์ž‘๋™ํ•˜๊ฒŒ ์„ค๊ณ„๋˜๋Š” ์ด์œ ๋Š” Quorum(์ •์กฑ์ˆ˜) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ฐ˜ ๋•Œ๋ฌธ
  • Quorum์€ ํ•ฉ์˜์ฒด๊ฐ€ ์˜์‚ฌ๋ฅผ ์ง„ํ–‰์‹œํ‚ค๊ฑฐ๋‚˜ ์˜๊ฒฐ์„ ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ๋„์˜ ์ธ์›์ˆ˜
  • Distributed Coordination ํ™˜๊ฒฝ์—์„œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€

10. Broker

  • ์นดํ”„์นด ํด๋ผ์ด์–ธํŠธ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์ฒด
  • Producer์™€ Consumer ์‚ฌ์ด์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅ, ์ „๋‹ฌํ•˜๋Š” ์—ญํ• 
  • ํ•œ ๋Œ€ ์ด์ƒ์˜ ๋…ธ๋“œ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Œ

์นดํ”„์นด ์žฅ์ 

1. ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰

  • ๋Œ€์šฉ๋Ÿ‰์˜ ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์ ํ•ฉ
  • ๋ฐฐ์น˜์ฒ˜๋ฆฌ: Producer -> broker, broker -> consumer ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌถ์–ด์„œ ์ „์†ก
  • ํŒŒํ‹ฐ์…˜์„ ํ†ตํ•œ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ: ํŒŒํ‹ฐ์…˜ ๊ฐœ์ˆ˜๋งŒํผ ํ”„๋กœ๋“€์„œ ์—ฐ๊ฒฐ
    • ํ•˜์ง€๋งŒ ํŒŒํ‹ฐ์…˜์˜ ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์žฅ์•  ๋ณต๊ตฌ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€
  • Append-Only ๊ธฐ๋ฐ˜ Simpleํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

2. ํ™•์žฅ์„ฑ

  • ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์„ ๋•Œ ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ฅผ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์šด๋ฐ
    ์นดํ”„์นด ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ ๋ธŒ๋กœ์ปค ๊ตฌ์„ฑ์„ ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์คŒ ( scale-in, scale-out)
  • scale-in, scale-out์€ ๋ฌด์ค‘๋‹จ ์šด์˜์„ ์ง€์›

3. ๊ณ ๊ฐ€์šฉ์„ฑ

  • 3๊ฐœ ์ด์ƒ์˜ ์„œ๋ฒ„๋“ค๋กœ ์šด์˜๋˜๋Š” ์นดํ”„์นด ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ผ๋ถ€ ์„œ๋ฒ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋ฌด์ค‘๋‹จ์œผ๋กœ ์•ˆ์ „ํ•˜๊ณ  ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ
  • Replication ์ง€์› ( ๋Œ€๋ถ€๋ถ„์˜ ์‹œ์Šคํ…œ์ด ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹)
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณต์ œ๋˜๋Š” ์‹œ๊ฐ„ ์ฐจ์ด๋กœ ์ธํ•ด ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ

4. ์˜์†์„ฑ

  • ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋”๋ผ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง€์ง€ ์•Š์Œ
  • ๋‹ค๋ฅธ ๋ฉ”์‹œ์ง• ํ”Œ๋žซํผ๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ „์†ก ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅ
  • Page Cache ์‚ฌ์šฉ
    • ์šด์˜์ฒด์ œ์—์„œ๋Š” ํŒŒ์ผ I/O ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ํŽ˜์ด์ง€ ์บ์‹œ ์˜์—ญ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑํ•จ
    • producer๊ฐ€ ์„œ๋ฒ„์ธ broker์—๊ฒŒ ๋„ฃ๋Š” ๋ฐ์ดํ„ฐ๋Š” consumer๊ฐ€ ์‚ฌ์šฉํ•˜๊ธฐ ์ „ ์ผ์ •์‹œ๊ฐ„๋™์•ˆ Page Cache์— ์˜ฌ๋ ค ๋‘์–ด, consumer๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๊ฐ€๋Š” ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•จ

ํ† ํ”ฝ์˜ ์ ์ ˆํ•œ ํŒŒํ‹ฐ์…˜ ์ˆ˜๋Š”?

ํŒŒํ‹ฐ์…˜ ๊ฐœ์ˆ˜์˜ ์ฆ๊ฐ€๋Š” ์–ธ์ œ๋“  ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ฐ์†Œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ดˆ๊ธฐ์— ํŒŒํ‹ฐ์…˜ ๊ฐœ์ˆ˜๋ฅผ ์ž‘๊ฒŒ ์žก๊ณ  ์ ์ฐจ ๋Š˜๋ ค์•ผ ํ•จ