07. In-Sync Replicas

In-Sync Replicas(ISR)

  • Leader ์žฅ์• ์‹œ Leader๋ฅผ ์„ ์ถœํ•˜๋Š”๋ฐ ์‚ฌ์šฉ

  • In-Sync Replicas(ISR)๋Š” High Water Mark๋ผ๊ณ  ํ•˜๋Š” ์ง€์ ๊นŒ์ง€ ๋™์ผํ•œ Replicas (Leader์™€ Follower ๋ชจ๋‘)์˜ ๋ชฉ๋ก

  • Leader์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ISR ์ค‘์—์„œ ์ƒˆ Leader๋ฅผ ์„ ์ถœ

replica.lag.max.messages ์‚ฌ์šฉ์‹œ ๋ฌธ์ œ์ 

  • ๋ฉ”์‹œ์ง€ ์œ ์ž…๋Ÿ‰์ด ๊ฐ‘์ž๊ธฐ ๋Š˜์–ด๋‚  ๊ฒฝ์šฐ

  • replica.lag.max.messages ๋กœ ISR ํŒ๋‹จ์‹œ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ 

    • ๋ฉ”์‹œ์ง€ ์œ ์ž…๋Ÿ‰์ด ๊ฐ‘์ž๊ธฐ ๋Š˜์–ด๋‚  ๊ฒฝ์šฐ(์˜ˆ, ์ดˆ๋‹น 10 msg/sec), ์ง€์—ฐ์œผ๋กœ ํŒ๋‹จํ•˜๊ณ  OSR(Outof-Sync Replica)๋กœ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ด

    • ๋ฉ”์‹œ์ง€๊ฐ€ ํ•ญ์ƒ ์ผ์ •ํ•œ ๋น„์œจ(์ดˆ๋‹น ์œ ์ž…๋˜๋Š” ๋ฉ”์‹œ์ง€, 3 msg/sec ์ดํ•˜ )๋กœ Kafka๋กœ ๋“ค์–ด์˜ฌ ๋•Œ, replica.lag.max.messages=5๋กœ ํ•˜๋ฉด 5 ๊ฐœ ์ด์ƒ์œผ๋กœ ์ง€์—ฐ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ISR๋“ค์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘

    • ์‹ค์ œ Follower๋Š” ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ณ  ๋‹จ์ง€ ์ž ๊น ์ง€์—ฐ๋งŒ ๋ฐœ์ƒํ–ˆ์„ ๋ฟ์ธ๋ฐ, replica.lag.max.messages ์˜ต์…˜์„ ์ด์šฉํ•˜๋ฉด OSR๋กœ ํŒ๋‹จํ•˜๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ (์šด์˜์ค‘์— ๋ถˆํ•„์š”ํ•œ error ๋ฐœ์ƒ ๋ฐ ๊ทธ๋กœ ์ธํ•œ ๋ถˆํ•„์š”ํ•œ retry ์œ ๋ฐœ)

    • confluent ์†”๋ฃจ์…˜์—์„œ๋Š” ์ œ๊ณต๋˜์ง€ ์•Š๋Š”๋‹ค.

  • replica.lag.time.max.ms์œผ๋กœ ํŒ๋‹จํ•ด์•ผ ํ•จ

    • Follower๊ฐ€ Leader๋กœ Fetch ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” Interval์„ ์ฒดํฌ

    • ์˜ˆ) replica.lag.time.max.ms = 10000 ์ด๋ผ๋ฉด Follower๊ฐ€ Leader๋กœ Fetch ์š”์ฒญ์„ 10000 ms ๋‚ด์—๋งŒ ์š”์ฒญํ•˜๋ฉด ์ •์ƒ์œผ๋กœ ํŒ๋‹จ

    • Confluent ์—์„œ๋Š” replica.lag.time.max.ms ์˜ต์…˜๋งŒ ์ œ๊ณต(๋ณต์žก์„ฑ ์ œ๊ฑฐ)

ISR์€ Leader๊ฐ€ ๊ด€๋ฆฌ

  • Zookeeper์— ISR ์—…๋ฐ์ดํŠธ, Controller๊ฐ€ Zookeeper๋กœ๋ถ€ํ„ฐ ์ˆ˜์‹ 

  1. Follower๊ฐ€ ๋„ˆ๋ฌด ๋Š๋ฆฌ๋ฉด Leader๋Š” ISR์—์„œ Follower๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ZooKeeper์— ISR์„ ์œ ์ง€

  2. Controller๋Š” Partition Metadata์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด์„œ Zookeeper๋กœ๋ถ€ํ„ฐ ์ˆ˜์‹ 

Controller

  • Kafka Cluster ๋‚ด์˜ Broker์ค‘ ํ•˜๋‚˜๊ฐ€ Controller๊ฐ€ ๋จ

  • Controller๋Š” ZooKeeper๋ฅผ ํ†ตํ•ด Broker Liveness๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง

  • Controller๋Š” Leader์™€ Replica ์ •๋ณด๋ฅผ Cluster๋‚ด์˜ ๋‹ค๋ฅธ Broker๋“ค์—๊ฒŒ ์ „๋‹ฌ

  • Controller๋Š” ZooKeeper์— Replicas ์ •๋ณด์˜ ๋ณต์‚ฌ๋ณธ์„ ์œ ์ง€ํ•œ ๋‹ค์Œ ๋” ๋น ๋ฅธ ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•ด ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  Broker๋“ค์—๊ฒŒ ๋™์ผํ•œ ์ •๋ณด๋ฅผ ์บ์‹œํ•จ

  • Controller๊ฐ€ Leader ์žฅ์• ์‹œ Leader Election์„ ์ˆ˜ํ–‰

  • Controller๊ฐ€ ์žฅ์• ๊ฐ€ ๋‚˜๋ฉด ๋‹ค๋ฅธ Active Broker๋“ค ์ค‘์—์„œ ์žฌ์„ ์ถœ๋จ

Consumer ๊ด€๋ จ Position๋“ค

Offset ์ •๋ฆฌ

  • Last Committed Offset(Current Offset) : Consumer๊ฐ€ ์ตœ์ข… Commitํ•œ Offset

  • Current Position : Consumer๊ฐ€ ์ฝ์–ด๊ฐ„ ์œ„์น˜(์ฒ˜๋ฆฌ ์ค‘, Commit ์ „)

  • High Water Mark(Committed) : ISR(Leader-Follower)๊ฐ„์— ๋ณต์ œ๋œ Offset

  • Log End Offset : Producer๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด์„œ ์ €์žฅ๋œ, ๋กœ๊ทธ์˜ ๋งจ ๋ Offset

Committed์˜ ์˜๋ฏธ

  • ISR ๋ชฉ๋ก์˜ ๋ชจ๋“  Replicas๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์œผ๋ฉด โ€œCommittedโ€

  • Consumer๋Š” Committed ๋ฉ”์‹œ์ง€๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ์Œ

  • Leader๋Š” ๋ฉ”์‹œ์ง€๋ฅผ Commitํ•  ์‹œ๊ธฐ๋ฅผ ๊ฒฐ์ •

  • Committed ๋ฉ”์‹œ์ง€๋Š” ๋ชจ๋“  Follower์—์„œ ๋™์ผํ•œ Offset์„ ๊ฐ–๋„๋ก ๋ณด์žฅ

  • ์ฆ‰, ์–ด๋–ค Replica๊ฐ€ Leader์ธ์ง€์— ๊ด€๊ณ„์—†์ด (์žฅ์•  ๋ฐœ์ƒ์ด๋ผ๋„) ๋ชจ๋“  Consumer๋Š” ํ•ด๋‹น Offset์—์„œ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Œ

  • Broker๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ๋•Œ Committed ๋ฉ”์‹œ์ง€ ๋ชฉ๋ก์„ ์œ ์ง€ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด, Broker์˜ ๋ชจ๋“ Partition์— ๋Œ€ํ•œ ๋งˆ์ง€๋ง‰ Committed Offset์€ replicationoffset-checkpoint๋ผ๋Š” ํŒŒ์ผ์— ๊ธฐ๋ก๋จ

Replicas ๋™๊ธฐํ™”

  • High Water Mark, Leader Epoch

  • High Water Mark

    • ๊ฐ€์žฅ ์ตœ๊ทผ์— Committed ๋ฉ”์‹œ์ง€์˜ Offset ์ถ”์ 

    • replication-offset-checkpoint ํŒŒ์ผ์— ์ฒดํฌํฌ์ธํŠธ๋ฅผ ๊ธฐ๋ก

  • Leader Epoch

    • ์ƒˆ Leader๊ฐ€ ์„ ์ถœ๋œ ์‹œ์ ์„ Offset์œผ๋กœ ํ‘œ์‹œ

    • Broker ๋ณต๊ตฌ ์ค‘์— ๋ฉ”์‹œ์ง€๋ฅผ ์ฒดํฌํฌ์ธํŠธ๋กœ ์ž๋ฅธ ๋‹ค์Œ ํ˜„์žฌ Leader๋ฅผ ๋”ฐ๋ฅด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋จ

    • Controller๊ฐ€ ์ƒˆ Leader๋ฅผ ์„ ํƒํ•˜๋ฉด Leader Epoch๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ํ•ด๋‹น ์ •๋ณด๋ฅผ ISR ๋ชฉ๋ก์˜ ๋ชจ๋“  ๊ตฌ์„ฑ์›์—๊ฒŒ ๋ณด๋ƒ„

    • leader-epoch-checkpoint ํŒŒ์ผ์— ์ฒดํฌํฌ์ธํŠธ๋ฅผ ๊ธฐ๋ก

Message Commit ๊ณผ์ •

  • Follower์—์„œ Leader๋กœ Fetch๋งŒ ์ˆ˜ํ–‰

  1. Offset 5 ๊นŒ์ง€ ๋ณต์ œ๊ฐ€ ์™„๋ฃŒ๋˜์–ด ์žˆ๋Š” ์ƒํ™ฉ์—์„œ, Producer๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋ฉด Leader๊ฐ€ offset 6 ์— ์ƒˆ ๋ฉ”์‹œ์ง€๋ฅผ ์ถ”๊ฐ€

  2. ๊ฐ Follower๋“ค์˜ Fetcher Thread๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ fetch๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ฐ€์ ธ์˜จ ๋ฉ”์‹œ์ง€๋ฅผ offset 6 ์— ๋ฉ”์‹œ์ง€๋ฅผ Write

  3. Follower๋“ค์˜ Fetcher Thread๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋‹ค์‹œ fetch๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  null ์„ ๋ฐ›์Œ Leader๋Š” High Water Mark ์ด๋™

  4. ๊ฐ Follower๋“ค์˜ Fetcher Thread๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋‹ค์‹œ fetch๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  High Water Mark๋ฅผ ๋ฐ›์Œ

Last updated