Contents

[Kafka] Replication/ Controller/ Log

1. Kafka Replication

Kafka ๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ •์ค‘์•™์— ์œ„์น˜ํ•˜๋Š” ๋ฉ”์ธ ํ—ˆ๋ธŒ ์—ญํ• ์„ ํ•œ๋‹ค. ๋งŒ์•ฝ ์ด ๋ฉ”์ธ ํ—ˆ๋ธŒ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ ์ „์ฒด ์‹œ์Šคํ…œ์„ ์šด์šฉํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ๊ทธ๋Ÿฌํ•œ ๋ฌธ์ œ์— ์ฐฉ์•ˆํ•˜์—ฌ ์•ˆ์ •์„ฑ์„ ๋„๋ชจํ•˜๊ธฐ ์œ„ํ•ด Kafka ๋‚ด๋ถ€์—์„œ replication ์„ ๊ตฌ์ถ•ํ•˜์—ฌ ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

3๋Œ€์˜ ๋ธŒ๋กœ์ปค๊ฐ€ ์šด์˜์ค‘์ธ kafka ์— A ๋ผ๋Š” ํ† ํ”ฝ์„ ์ƒ์„ฑํ•œ ํ›„, X ๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๊ฒŒ ๋˜๋ฉด ๋ชจ๋“  ์„œ๋ฒ„๋Š” X๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ๊ฐ์˜ ๋ธŒ๋กœ์ปค๋“ค์ด ๊ฐ–๊ฒŒ ๋œ๋‹ค. replication ์„ ์ด์šฉํ•ด์„œ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ์—ฌ๋Ÿฌ ๋ธŒ๋กœ์ปค๊ฐ€ ๊ฐ™์ด ๊ฐ–๊ฒŒ ๋˜์–ด ์•ˆ์ •์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. (replication ์ด ๋  ๋•Œ topic ์„ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํŒŒํ‹ฐ์…˜์„ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์ž„์— ์ฃผ์˜ํ•˜์ž.)

leader์™€ follower์˜ ์—ญํ• 

  • leader์˜ ์—ญํ•  1 : ๋ฉ”์‹œ์ง€ ์ฝ๊ณ ์“ฐ๊ธฐ ๋ชจ๋“  ๋ฉ”์‹œ์ง€๋Š” leader๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ฝ๊ณ  ์“ฐ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. producer๋Š” leader๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๋ฉ”์‹œ์ง€๋ฅผ producingํ•˜๊ณ , consumer ๋Š” leader ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๋ฉ”์‹œ์ง€๋ฅผ consume ํ•œ๋‹ค.

  • leader์˜ ์—ญํ•  2 : follower ๊ฐ์‹œํ•˜๊ธฐ

    leader ๋Š” ๋˜ํ•œ, follower ๋“ค์ด ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๋Œ€๋กœ replication ํ•˜๊ณ  ์žˆ๋Š”์ง€ ๊ฐ์‹œํ•œ๋‹ค. leader ์™€ follower ๋Š” ISR(InSyncReplica)๋ผ๋Š” ๊ทธ๋ฃน์— ๋ฌถ์—ฌ ์žˆ์œผ๋ฉฐ, follower ๊ฐ€ ํŠน์ • ์ฃผ๊ธฐ์•ˆ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณต์ œํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด leader๋Š” ํ•ด๋‹น follower ๋ฅผ ๊ทธ๋ฃน์—์„œ ๋ฐฉ์ถœ์‹œํ‚จ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ํ•˜๋Š” ์ด์œ ๋Š” follower๋“ค์€ ์–ธ์ œ๋“ ์ง€ leader ๋กœ ์Šน๊ฒฉ๋  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์—ฌ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • leader์˜ ์—ญํ•  3 : ๋ฉ”์‹œ์ง€ commit ํ•˜๊ธฐ

    ๋ชจ๋“  follower ๋“ค์ด message ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ๋ณต์ œํ–ˆ๋‹ค๋ฉด, leader ๋Š” ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ commit ํ•œ๋‹ค. ๋งˆ์ง€๋ง‰ commit offset ์œ„์น˜๋ฅผ high watermark ๋ผ๊ณ  ํ•œ๋‹ค. consumer๋Š” commit ๋œ ๋ฉ”์‹œ์ง€๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค. ( ๋งŒ์•ฝ leader์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ follower ๋“ค ์ค‘ ํ•˜๋‚˜๊ฐ€ leader ๋กœ ์Šน๊ฒฉ๋˜๋Š” ์ผ€์ด์Šค๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. leader ๋กœ ๋ถ€ํ„ฐ ์ตœ์‹ ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณต์ œํ•˜์ง€ ๋ชปํ•œ ์ƒํƒœ์—์„œ leader ๋กœ ์Šน๊ฒฉ๋œ๋‹ค๋ฉด ๋ฉ”์‹œ์ง€๊ฐ€ ์œ ์‹ค ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. )

replication ์€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๊ฐ€

์ „ํ†ต์ ์ธ ๋ฉ”์‹œ์ง€ ํ ์‹œ์Šคํ…œ์ธ RabbitMQ ์—์„œ๋Š” follower ๋“ค์ด ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ๊ฐˆ ๋•Œ, ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ์ •์ƒ์ ์œผ๋กœ ๋ณต์ œํ–ˆ๋‹ค๋Š” ACK ์„ leader ๋กœ ์ „์†กํ•จ์œผ๋กœ์จ leader ๊ฐ€ ๋ณต์ œ๊ฐ€ ๋˜์—ˆ์Œ์„ ์ธ์ง€ํ–ˆ๋‹ค. Kafka์—์„œ๋Š” ACK ์š”์ฒญ์„ ์ œ๊ฑฐํ•จ์œผ๋กœ์จ ์„ฑ๋Šฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ถ”๊ฐ€๋กœ, follower ๋“ค์€ leader๋กœ ๋ฉ”์‹œ์ง€๋ฅผ pull ์š”์ฒญํ•˜๋Š” ๋ฐฉ์‹์„ ์ฑ„ํƒํ•˜์—ฌ leader์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. leader ๊ฐ€ push ํ•˜๋Š” ๋ฐฉ์‹์„ ํ†ตํ•ด์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๊ฒŒ ๋˜๋ฉด, ์•„์ง ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ์ค€๋น„๊ฐ€ ๋˜์ง€ ์•Š์€ follower ๋“ค์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋„คํŠธ์›Œํฌ ํ• ๋‹น์ด ์ƒ๊ธฐ๊ฒŒ ๋˜๋ฏ€๋กœ ๋ฉ”์‹œ์ง€๋ฅผ replication ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ณ‘๋ชฉ์ด ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด, ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ์ค€๋น„๊ฐ€ ๋œ follower ๋“ค์ด leader ๋ฐ์ดํ„ฐ๋ฅผ fetch ํ•จ์œผ๋กœ์จ ์œ„์— ์„ค๋ช…ํ•œ ๋ณ‘๋ชฉ์„ ์ค„์ด๊ณ  leader์˜ ๋ถ€ํ•˜๊ฐ€ ์ ์–ด์ ธ ์„ฑ๋Šฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

leader epoch

leader epoch๋ž€ ๋ณต๊ตฌ ๊ณผ์ •์—์„œ ๋ฉ”์‹œ์ง€ ์ •ํ•ฉ์„ฑ์„ ์œ„ํ•ด ๊ฐ broker์—๊ฒŒ ์–ด๋””๊นŒ์ง€ ๋ฉ”์‹œ์ง€๊ฐ€ ์ •์ƒ์ ์œผ๋กœ commit ๋˜์—ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•ด๋ณด์ž

  • High water mark ์ง€์—ฐ์ด ๋ฐœ์ƒ๋œ ๋ธŒ๋กœ์ปค๊ฐ€ leader ๋กœ ์Šน๊ฒฉ๋˜๋Š” ๊ฒฝ์šฐ

  1. 1๋ฒˆ offset ๊นŒ์ง€ ๋ณต์ œ๋ฅผ ๋งˆ์นœ follower A ๊ฐ€ leader B ์—๊ฒŒ fetchRequest(offset=2)
  2. leader๋Š” follower ๊ฐ€ 1๋ฒˆ offset ๊นŒ์ง€ ๋ณต์ œ๋ฅผ ๋งˆ์ณค๋‹ค๊ณ  ํŒ๋‹จ ํ›„, high water mark ๋ฅผ ์ƒํ–ฅ์กฐ์ •ํ•œ ํ›„ fetchResponse ๋ฅผ A์—๊ฒŒ ์ „์†ก
  3. A๊ฐ€ response ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ ์ฑ„ ์žฌ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜๋ฉด, high water mark ์œ„ ๋ฉ”์‹œ์ง€๋“ค์€ ์‹ ๋ขฐํ•˜์ง€ ๋ชปํ•œ๋‹ค๊ณ  ํŒ๋‹จ ํ›„ ํŒŒ๊ธฐ
  4. leader broker ๊ฐ€ ๋‹ค์šด๋˜๋ฉด, follower broker๋Š” ๋ฉ”์„ธ์ง€2๋ฅผ ํŒŒ๊ธฐํ•œ ์ƒํƒœ์—์„œ leader ๋กœ promotion -> ๋ฉ”์‹œ์ง€ 2 ์˜ ์†Œ์‹ค์ด ๋ฐœ์ƒ
  • ๋ชจ๋“  broker ๊ฐ€ ๋‹ค์šด๋˜๊ณ , ๋ถˆ์™„์ „ํ•œ ๋ธŒ๋กœ์ปค๊ฐ€ leader ๋กœ ์Šน๊ฒฉ๋˜๋Š” ๊ฒฝ์šฐ

  1. follower, leader broker ๋ชจ๋‘ ๋‹ค์šด
  2. follower ๊ฐ€ ๋จผ์ € ๋ณต๊ตฌ๋˜์–ด, leader ๋กœ promotion
  3. leader ๊ฐ€ ๋œ A ๊ฐ€ ์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€ m3๋ฅผ ๋ฐ›์Œ
  4. leader,follower ๋Š” ๊ฐ™์€ high water mark๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ, ๋‘˜์˜ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค๋ฅธ ์ƒํ™ฉ์ด ๋ฐœ์ƒ

์œ„ ๋‘๊ฐ€์ง€ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด, high water mark ๋งŒ์„ ๊ฐ€์ง€๊ณ  ์žฅ์• ์ƒํ™ฉ์— ๋Œ€ํ•œ ๋ณต๊ตฌ๋ฅผ ํ–ˆ์„๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ์˜จ์ „ํ•˜๊ฒŒ ๋งž์ถœ ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, leader epoch ๋ผ๋Š” ๊ฐœ๋…์ด ์ƒ๊ฒผ๊ณ , leader epoch ๋Š” ์ƒˆ๋กœ์šด leader ๊ฐ€ ์„ ์ถœ๋  ๋•Œ ๋งˆ๋‹ค 1์”ฉ ์ฆ๊ฐ€ํ•œ๋‹ค.

์ฒซ๋ฒˆ์งธ ์ผ€์ด์Šค์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด leader epoch๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์žฌ์‹œ์ž‘๋œ follower broker ๋Š” leader epoch ์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , offset 2๋ฅผ ์‘๋‹ต๋ฐ›๋Š”๋‹ค. ์ด ๋•Œ, follower ๋Š” high water mark ๋ณด๋‹ค ๋†’์€ ์œ„์น˜์— ์žˆ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ , leader epoch๋กœ ์‘๋‹ต๋ฐ›์€ offset ๊นŒ์ง€์˜ ๋ฉ”์‹œ์ง€๋Š” ์‚ด๋ ค๋‘๋Š” ๋ฐฉ์‹์œผ๋กœ ์žฅ์• ๋ฅผ ๋ณต๊ตฌํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด consumer๋Š” ์†Œ์‹ค์—†์ด ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๋‘๋ฒˆ์งธ ์ผ€์ด์Šค์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด leader epoch๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  1. ๋ถˆ์™„์ „ํ•˜๊ฒŒ ๋ณต์ œ๋œ ์ƒํƒœ๋กœ ๋ฆฌ๋” ๋ธŒ๋กœ์ปค A์™€ ํŒ”๋กœ์›Œ ๋ธŒ๋กœ์ปค B๊ฐ€ ๋™์‹œ์— ์ข…๋ฃŒ๋œ๋‹ค.
  2. ํŒ”๋กœ์›Œ ๋ธŒ๋กœ์ปค B๊ฐ€ ๋จผ์ € ์žฌ์‹œ์ž‘๋˜์–ด ์ƒˆ๋กœ์šด ๋ฆฌ๋”๋กœ ์„ ์ถœ๋ฉ๋‹ˆ๋‹ค.
  3. ๋ธŒ๋กœ์ปค B๋Š” ๋ฆฌ๋”์ด๋ฏ€๋กœ, LeaderEpoch ๊ตํ™˜ ๊ณผ์ •์„ ๊ฑฐ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  4. ๋ฆฌ๋”๊ฐ€ ๋œ ๋ธŒ๋กœ์ปค B๊ฐ€ ํ”„๋กœ๋“€์„œ๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€ m3๋ฅผ ์ „์†ก๋ฐ›์Šต๋‹ˆ๋‹ค.
  5. ๋ธŒ๋กœ์ปค A๊ฐ€ ํŒ”๋กœ์›Œ๊ฐ€ ๋˜์–ด ์žฌ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.
  6. ๋ฆฌ๋” ๋ธŒ๋กœ์ปค B์—๊ฒŒ LeaderEpochRequest๋ฅผ ์ „์†กํ•˜๊ณ  1์„ ๋ฐ˜ํ™˜๋ฐ›์Šต๋‹ˆ๋‹ค.
  7. ํ˜„์žฌ ๋กœ์ปฌ์— ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”์‹œ์ง€ ์˜คํ”„์…‹์€ 2์ด๋ฏ€๋กœ, ํ˜„์žฌ ๋ฆฌ๋”์˜ start offset์— ํ•ด๋‹นํ•˜๋Š” 1 8. ์ดํ›„์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋‘ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, m2 ๋ฉ”์‹œ์ง€๊ฐ€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

์ปจํŠธ๋กค๋Ÿฌ

์นดํ”„์นด์˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ฆฌ๋” ์„ ์ถœ์˜ ์ฑ…์ž„์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์˜๋„๋œ ์ข…๋ฃŒ์™€ ์˜๋„๋˜์ง€ ์•Š์€ ์ข…๋ฃŒ์—์„œ ์˜๋„๋œ ์ข…๋ฃŒ๊ฐ€ ๋‹ค์šดํƒ€์ž„์„ ์ตœ์†Œํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ์ด์œ ๋Š”, ์˜๋„๋œ ์ข…๋ฃŒ๋Š” ๋ธŒ๋กœ์ปค๊ฐ€ ์ข…๋ฃŒ๋˜๊ธฐ ์ „ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๊ทธ๋ฃน๋‚ด์—์„œ ๋ฆฌ๋”๋ฅผ ์„ ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋กœ๊ทธ

๋กœ๊ทธ๋Š” segmentํŒŒ์ผ์— ์ €์žฅ๋œ๋‹ค. ๋กœ๊ทธ๋Š” 1GB ๊ฐ€ ๋„˜๊ฒŒ ๋˜๋ฉด, ๋กค๋ง๋˜์–ด ์ƒˆ๋กœ์šด ํŒŒ์ผ์— ์ €์žฅํ•œ๋‹ค. ๋กœ๊ทธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋กœ๊ทธ ์‚ญ์ œ, ์ปดํŒฉ์…˜์ด ์žˆ๋‹ค.