[Kafka] ์นดํ”„์นด์˜ ์ฝ”๋””๋„ค์ดํ„ฐ Zookeeper

๋ฐ˜์‘ํ˜•

์šฐ๋ฆฌ๊ฐ€ ์ปดํ“จํ„ฐ์— ์นดํ”„์นด๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ๋”ฐ๋ผ์„œ ์„ค์น˜ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ฃผํ‚คํผ(Zookeeper)์ธ๋ฐ์š”. 

๋‹ค๋ฅธ ๋ฉ”์‹œ์ง€ ํ์™€ ๋‹ค๋ฅด๊ฒŒ ์นดํ”„์นด๋Š” ์™œ ์ฃผํ‚คํผ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ์š”?

 

 

 

์ฝ”๋””๋„ค์ด์…˜ ์„œ๋น„์Šค ์‹œ์Šคํ…œ (Coordination System)

๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์„ ๋‹ค๋ฃจ๋‹ค๋ณด๋ฉด ๊ฐ€์žฅ ํฐ ๋‚œ์ œ๊ฐ€ ๋ฐ”๋กœ ๋ถ„์‚ฐ๋œ ์‹œ์Šคํ…œ๋ผ๋ฆฌ ์–ด๋–ป๊ฒŒ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•  ๊ฒƒ์ธ๊ฐ€? ์ž…๋‹ˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค, ์นดํ”„์นด ๋“ฑ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ์ž์ฒด๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ•˜์œ„ ๋…ธ๋“œ๋“ค์ด ์ง‘๊ฒฐ ๋˜์–ด ์žˆ๋Š” ํ˜•ํƒœ๊ฐ€ ๋ณดํ†ต์ธ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํ•˜์œ„ ๋…ธ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ•ด์•ผํ•  ์ผ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

  • ๊ฐ ํ•˜์œ„ ๋…ธ๋“œ๋“ค์˜ Healthcheck
  • Lock Processing

 

๋ถ„์‚ฐ๋œ ์„œ๋ฒ„๋“ค๋ผ๋ฆฌ ํ†ต์‹ ํ•  ๋•Œ ์„œ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•˜๋ ค๋‹ค ๋ณด๋ฉด ์ž์› ์ ์œ  ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€ํ‘œ์ ์ธ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ๋Š” ๋ฐ”๋กœ ๋ฆฌ์†Œ์Šค ๋ฝ(Lock)์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฆฌ์†Œ์Šค๋ฅผ Lock, Unlockํ•˜๋Š”๋ฐ๋„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์‹œ์Šคํ…œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์‹œ์Šคํ…œ์„ ์ฝ”๋””๋„ค์ด์…˜ ์„œ๋น„์Šค ์‹œ์Šคํ…œ์ด๋ผ๊ณ  ํ•˜๋ฉฐ ์ด์— ๋Œ€ํ‘œ์ ์ธ ์˜คํ”ˆ ์†Œ์Šค ์†”๋ฃจ์…˜์—๋Š” ๋ฐ”๋กœ Zookeeper๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

์ฝ”๋””๋„ค์ด์…˜ ์„œ๋น„์Šค๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๋‚ด์—์„œ ์ค‘์š”ํ•œ ์ƒํƒœ ์ •๋ณด๋‚˜ ์„ค์ • ์ •๋ณด ๋“ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋””๋„ค์ด์…˜ ์‹œ์Šคํ…œ์˜ ์žฅ์• ๋Š” ์ „์ฒด ์‹œ์Šคํ…œ ์žฅ์• ๋กœ ์ด์–ด์ง€๋Š” ์žฅ์•  ์ „ํŒŒ ํŠน์„ฑ์„ ์ง€๋‹ˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์น˜ Docker์™€ ๊ฐ™์ฃ .

 

๋”ฐ๋ผ์„œ ์ด์ค‘ํ™” ๋“ฑ์„ ์ด์šฉํ•˜์—ฌ ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. 

 

 

 

Zookeeper

์ฃผํ‚คํผ๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ์„ค๊ณ„๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•œ ์ฝ”๋””๋„ค์ด์…˜ ์„œ๋น„์Šค ์‹œ์Šคํ…œ์ด ์ž˜ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ์˜คํ”ˆ ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด๋กœ์จ ์ฝ”๋””๋„ค์ด์…˜ ์„œ๋น„์Šค ์‹œ์Šคํ…œ์„ ๊ณ ๊ฐ€์šฉ์„ฑ(HA)์ด ์šฉ์ดํ•˜๋„๋ก ๊ตฌํ˜„๋˜์–ด ์žˆ์–ด ์œ ๋ช…ํ•œ ๋ถ„์‚ฐ ์†”๋ฃจ์…˜์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

  • Apache HBase (NoSQL)
  • Apache Kafka

 

๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ์ฝ”๋””๋„ค์ด์…˜ ํ•˜๋Š” ์šฉ๋„๋กœ ๋””์ž์ธ ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

  • Data Access ์†๋„๊ฐ€ ๋นจ๋ผ์•ผ ํ•จ.
  • ์ž์ฒด์ ์ธ ์žฅ์•  ๋Œ€์‘ ์†”๋ฃจ์…˜ ํ•„์š” (์˜ˆ: ํด๋Ÿฌ์Šคํ„ฐ๋ง)

 

Zookeeper๋Š” ์ž์ฒด์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ง ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๊ณ  ์žˆ์–ด, ์ด๋Ÿฌํ•œ ์ฝ”๋””๋„ค์ด์…˜ ์„œ๋น„์Šค ์‹œ์Šคํ…œ ๋””์ž์ธ์— ์žˆ์–ด ์•„์ฃผ ์‰ฝ๊ฒŒ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์„ ์ง€๋‹ˆ๊ณ  ์žˆ์œผ๋ฉฐ ๊ธฐ๋Šฅ์€ ์•„์ฃผ ์‹ฌํ”Œํ•ฉ๋‹ˆ๋‹ค.

 

  • ์„ค์ •๊ด€๋ฆฌ (Configuration Management)
    ํด๋Ÿฌ์Šคํ„ฐ์˜ ์„ค์ • ์ •๋ณด๋ฅผ ์ตœ์‹ ์œผ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์Šคํ…œ

  • ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ (Cluster Management)
    ํด๋Ÿฌ์Šคํ„ฐ์˜ ์„œ๋ฒ„(๋ธŒ๋กœ์ปค)๊ฐ€ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์ œ์™ธ๋  ๋•Œ ๊ทธ ์ •๋ณด๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์„œ๋ฒ„(๋ธŒ๋กœ์ปค)๋“ค์ด ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์Šคํ…œ

  • ๋ฆฌ๋” ์ฑ„ํƒ (Leader selection)
    ๋‹ค์ค‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ค‘ ์–ด๋–ค ๋…ธ๋“œ๋ฅผ ๋ฆฌ๋”๋กœ ์‚ฐ์ถœํ•  ์ง€ ์ •ํ•˜๋Š” ๋กœ์ง์„ ๋งŒ๋“œ๋Š” ์‹œ์Šคํ…œ

  • ๋ฝ, ๋™๊ธฐํ™” (Locking and syncronization Service)
    ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์“ฐ๊ธฐ ์—ฐ์‚ฐ์ด ๋นˆ๋ฒˆํ•  ๊ฒฝ์šฐ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด๋ฅผ ๋™๊ธฐํ™”๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ์‹œ์Šคํ…œ

 

๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์–ด๋–ค ๋…ธ๋“œ์—๊ฒŒ ์—ฐ์‚ฐ์„ ์‹œํ‚ฌ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ๋„ ํ•˜๋‚˜์˜ ์—ญํ• ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋“ค ์ค‘ ์œ ํœด ์ƒํƒœ์ธ ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š” ๋กœ์ง์„ ์–ด๋–ค์‹์œผ๋กœ ํ• ์ง€ ์ •ํ•˜๋Š” ๋ฆฌ๋” ์ฑ„ํƒ์ด ๊ทธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

Zookeeper Architecture

๊ทธ๋ ‡๋‹ค๋ฉด Zookeeper๋Š” ์–ด๋–ค ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ์„๊นŒ์š”?

 

์ฝ”๋””๋„ค์ด์…˜ ์„œ๋น„์Šค ์‹œ์Šคํ…œ์€ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ์ผ๋ถ€๋ถ„์ด ๋˜์–ด ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ž์„œ ๋งํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ฝ”๋””๋„ค์ด์…˜ ์‹œ์Šคํ…œ์ด ์ค‘๋‹จ๋˜๋ฉด ๋ถ„์‚ฐ ์‹œ์Šคํ…œ๋„ ์ค‘๋‹จ๋˜๋Š” ์žฅ์•  ์ „ํŒŒ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

Zookeeper๋Š” ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์ˆ˜์˜ Server๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ฒ„ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” k8s์™€ ์œ ์‚ฌํ•œ ๊ตฌ์กฐ๋กœ ์„œ๋ฒ„ ํด๋Ÿฌ์Šคํ„ฐ๋Š” 1๊ฐœ์˜ Leader์™€ N๊ฐœ์˜ Follower๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ , ์ด๋ฅผ ์ฃผํ‚คํผ ์•™์ƒ๋ธ”(Zookeeper Ensemble)์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 

์ˆœ์„œ๋Š” Client(์—ฌ๊ธฐ์„œ๋Š” Kafka)๊ฐ€ ์ฃผํ‚คํผ ์„œ๋ฒ„๋“ค๋กœ ์ด๋ค„์ง„ ์•™์ƒ๋ธ”(Ensemble)์— ์ ‘๊ทผํ•˜์—ฌ Znode์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์•™์ƒ๋ธ” ๋‚ด ์ฃผํ‚คํผ ์„œ๋ฒ„๋“ค์€ ์กฐ์œจ๋œ ์ƒํƒœ์ด๊ณ , ํ•ญ์ƒ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์–ด๋Š ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๋„ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

Client(Kafka)๊ฐ€ ์–ด๋–ค ์„ค์ •๊ฐ’ ํ˜น์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ฃผํ‚คํผ์— ์“ธ ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

 

  • ํŠน์ • ์„œ๋ฒ„์— ์ ‘์†ํ•˜์—ฌ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ
  • ํ•ด๋‹น ์„œ๋ฒ„๋Š” Leader ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜์—ˆ์Œ์„ ์ „์†ก
  • Leader ์„œ๋ฒ„๋Š” ์—…๋ฐ์ดํŠธ ์‹ ํ˜ธ๋ฅผ ๋ฐ›๊ณ , ๋‹ค๋ฅธ Follower ์„œ๋ฒ„๋“ค์—๊ฒŒ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ(Broadcast) ํ˜•์‹์œผ๋กœ ์ „์†ก
  • ๋‚˜๋จธ์ง€ Follower ์„œ๋ฒ„๋“ค๋„ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ

 

์œ„ 4๊ฐ€์ง€ ๊ณผ์ •์„ ํ†ตํ•ด ์ฃผํ‚คํผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•ญ์ƒ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์œ ์ง€ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

Znode (Zookeeper Data Model)

Znode๋Š” ์ฃผํ‚คํผ์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ์ฃผํ‚คํผ์˜ ๋ชจ๋“  ๊ตฌํ˜„์€ ๊ฑฐ์˜ ์ด ๋…€์„์ด๋ผ๊ณ  ๋ด๋„ ๋ฌด๋ฐฉํ•  ์ •๋„์ธ๋ฐ์š”. Znode๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

 

Znode๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ ๊ธฐ๋ฐ˜์œผ๋กœ ๋œ Key-value ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค์ƒ ์ฃผํ‚คํผ๋Š” ์—ฌ๊ธฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋นผ๋Š” ๊ธฐ๋Šฅ์ด ๊ฐ€์žฅ ํฐ ํ•ต์‹ฌ์ด๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ๋ฌธ์ œ๋ฅผ ์ด๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

 

 

์ด Znode๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋ƒ์— ๋”ฐ๋ผ์„œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๊ฐ„ ์ •๋ณด ๊ณต์œ , ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ, ๋ฝ ๊ด€๋ฆฌ ๋“ฑ์„ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ํ™œ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

  • Persistent Node (์˜์† ๋…ธ๋“œ)
    z๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ˆœ๊ฐ„ ์˜๊ตฌ ์ €์žฅ๋˜๋Š” ๋…ธ๋“œ (๋‹จ, ๊ฐ•์ œ ์‚ญ์ œ์‹œ์—” ์‚ญ์ œ๋จ)

  • Ephemeral Node (์ž„์‹œ ๋…ธ๋“œ)
    z๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•œ ํด๋ผ์ด์–ธํŠธ์˜ ์„ธ์…˜์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๋•Œ๋งŒ ์œ ํšจํ•œ ๋…ธ๋“œ (์—ฐ๊ฒฐ์ด ๋Š์–ด์งˆ ์‹œ ์ž๋™ ์‚ญ์ œ)


  • Sequence Node (์—ฐ์†ํ˜• ๋…ธ๋“œ)
    z๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ž๋™์œผ๋กœ sequence ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™๋Š” ๋…ธ๋“œ (๋ถ„์‚ฐ๋ฝ ๊ตฌํ˜„์— ์ด์šฉ)


์–ผํ• ๋ณด๋ฉด Linux File system๊ณผ๋„ ์œ ์‚ฌํ•œ ํ˜•ํƒœ๋ฅผ ๋„๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ตฌ์กฐ๋ฅผ ์ฃผํ‚คํผ์—์„œ๋Š” ์ฃผํ‚คํผ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ(Zookeeper Data Model)์ด๋ผ๊ณ ๋„ ํ•˜๊ณ , ๋ช…๋ช… ๊ตฌ์กฐ๋Š” Hierarhical namespace ๋ฃฐ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. 

 

๊ฐ z๋…ธ๋“œ๋Š” Stat ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ๊ณ , ์ด Stat์€ ์•„๋ž˜์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 

 

  • Version Number
    ๋ชจ๋“  znode๋Š” ๋ฒ„์ „ ๋„˜๋ฒ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ. ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ์‹œ ๊ณ„์† ๋ณ€๊ฒฝ๋จ.

  • ACL (Action Control List)
    znode์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๊ถŒํ•œ ํš๋“ ๋งค์ปค๋‹ˆ์ฆ˜ 

  • Timestamp
    znode ์ƒ์„ฑ ์‹œ๊ฐ„, ์ƒ์„ฑ ํ›„ ๊ฒฝ๊ณผ๋œ ์‹œ๊ฐ„, ์—…๋ฐ์ดํŠธ ์‹œ๊ฐ„์„ ms ๋‹จ์œ„๋กœ ์ €์žฅ.
    -> ์ฃผํ‚คํผ์—๋Š” znode๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ํŠธ๋žœ์žญ์…˜(Transaction)์ด ์กด์žฌํ•˜๋Š”๋ฐ, ์ด ํŠธ๋žœ์žญ์…˜ ์ •๋ณด๋Š” Zxid๋กœ ๊ตฌ๋ถ„ํ•˜๋ฉฐ timestamp๋ฅผ ๋ณด๊ณ  ํŠธ๋žœ์žญ์…˜ ๋ฐœ์ƒ ๋กœ๊ทธ๋ฅผ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ์Œ.

  • Data length
    ์ฃผํ‚คํผ์˜ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ (์ฃผํ‚คํผ์˜ ๋ฐ์ดํ„ฐ๋“ค์€ ์ตœ๋Œ€ 1MB๊นŒ์ง€ ์ €์žฅ ๊ฐ€๋Šฅ)

๊ฒฐ๊ตญ ์ฃผํ‚คํผ๋Š” ์นดํ”„์นด์˜ ์ฝ”๋””๋„ค์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ์ฝ”๋””๋„ค์ดํ„ฐ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ณ , ๋” ์ •ํ™•ํžˆ๋Š” ๋ถ„์‚ฐ ์ž‘์—… ์ œ์–ด๋ฅผ ์œ„ํ•œ ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค.

 

 

 

Watcher

์ฃผํ‚คํผ์—๋Š” Watcher ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ, Watcher๋Š” ํŠน์ • znode์˜ ๋ณ€๊ฒฝ ๋“ฑ์„ ๊ฐ์ง€ํ•˜๋Š” ์ฃผํ‚คํผ์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ํŠน์ • znode์— watcher๋ฅผ ๋„ฃ์œผ๋ฉด ํด๋ผ์ด์–ธํŠธ๋กœ ์ฝœ๋ฐฑ์„ ๋ฐœ์ƒํ•˜์—ฌ ํ•ด๋‹น znode๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์•Œ๋ ค์ฃผ๋ฉฐ ์ด์™€ ๋™์‹œ์— ํ•ด๋‹น watcher๋Š” ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

 

 

 

In Kafka

์šฐ๋ฆฌ๊ฐ€ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์— ๋ฐ˜๋“œ์‹œ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ์ด ์ฝ”๋””๋„ค์ดํ„ฐ ์„œ๋น„์Šค ์‹œ์Šคํ…œ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜๊ณ , ๊ทธ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ์ด ์ฃผํ‚คํผ๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์นดํ”„์นด์—์„œ ์ฃผํ‚คํผ๋Š” ์–ด๋–ค ์šฉ๋„๋กœ ์‚ฌ์šฉ๋ ๊นŒ์š”? 

 

์นดํ”„์นด์˜ ์ฃผํ‚คํผ ํด๋ผ์ด์–ธํŠธ๋Š” ์นดํ”„์นด์˜ ๋ธŒ๋กœ์ปค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์กฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 

 

์นดํ”„์นด๋„ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ํ”Œ๋žซํผ์ด์ง€๋งŒ ๊ณต๊ต๋กญ๊ฒŒ๋„ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” Pub/Sub ์™ธ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ธŒ๋กœ์ปค ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ฃผํ‚คํผ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์ด ๋•Œ Producer์™€ Consumer๋Š” ์นดํ”„์นด์˜ ๋ธŒ๋กœ์ปค ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋™์ ์œผ๋กœ ๋ธŒ๋กœ์ปค์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ(์Šค์ผ€์ผ ์•„์›ƒ ๋˜๋Š” ๋“ฑ)๋˜๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์ฃผํ‚คํผ๊ฐ€ Producer์™€ Consumer์—๊ฒŒ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

 

์ผ๋ฐ˜์ ์œผ๋กœ ์นดํ”„์นด ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค์™€ Zookeeper๋Š” 1:1๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ๋งŒ์•ฝ Producer๊ฐ€ ํŠน์ • ์นดํ”„์นด ๋ธŒ๋กœ์ปค๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์‚ฐํ–ˆ์„ ๋•Œ ์ด๋ฅผ ์‹คํŒจํ•˜๋ฉด ์ฃผํ‚คํผ๊ฐ€ ๋‹ค๋ฅธ ์ •์ƒ ์„œ๋ฒ„๋กœ Producer์™€ Consumer์—๊ฒŒ ๋ธŒ๋กœ์ปค๋ฅผ ์•Œ๋ฆฌ๋Š” ๋ฐฉ์‹์œผ๋กœ ์šด์˜๋ฉ๋‹ˆ๋‹ค.

 

 

 

๋งˆ์น˜๋ฉฐ...

์นดํ”„์นด๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ํ”Œ๋žซํผ์ด์ง€๋งŒ ์˜ค์ง ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ์—๋งŒ ๊ทธ ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ์„ค๊ณ„์‹œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ๊ณต์œ ๋‚˜ ๋ฝ ๋“ฑ์€ ์นดํ”„์นด๊ฐ€ ์•„๋‹Œ ์ฃผํ‚คํผ๋ฅผ ํ†ตํ•ด ๋ณ„๋„๋กœ ๊ด€๋ฆฌ๋˜์–ด์ง€๊ณ  ์žˆ๋‹ค ๋ผ๊ณ  ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์กฐ๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์•„์ฃผ ๊น”๋”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ํ•˜๋‚˜์˜ ์ฑ…์ž„์„ ์ง€๋‹ˆ๊ฒŒ ๋จ์œผ๋กœ์จ ์†Œํ”„ํŠธ์›จ์–ด ๊ด€๋ฆฌ๊ฐ€ ์œ ์—ฐํ•ด์ง€๊ณ  ์—ญํ• ์ด ๋ถ„๋ช…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ดํ•ดํ•˜๊ธฐ๋„ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

์ฃผํ‚คํผ์— ๋Œ€ํ•œ ๋” ์ž์„ธํ•œ ์ด์•ผ๊ธฐ๋Š” ๋งŽ์ง€๋งŒ ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ์นดํ”„์นด์—์„œ ์ฃผํ‚คํผ๊ฐ€ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ๊ฐœ๋…๊ณผ ๊ทธ ์‚ฌ๋ก€๋ฅผ ์ ์–ด๋ดค์Šต๋‹ˆ๋‹ค.

 

๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” Docker๋ฅผ ์ด์šฉํ•˜์—ฌ ์นดํ”„์นด๋ฅผ ๊ตฌ๋™ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments