Replication Internals
๋ฐ์ดํฐ์ ์ ์ค์ ๋ฐฉ์งํ๊ณ (Durability), ๋ธ๋ก์ปค ์ฅ์ ์์๋ ์๋น์ค ์ค๋จ ์์ด ์ด์๋ ์ ์๋๋ก(High Availability) ํ๋ ํต์ฌ์ ์ธ ๋ด๋ถ ๋์ ์๋ฆฌ์ด๋ค.
๋ฆฌ๋์ ํ๋ก์ ๋ชจ๋ธ
์นดํ์นด๋ ๊ฐ ํ ํฝ ํํฐ์ ์ ๋ํด ๋ฆฌ๋(Leader)์ ํ๋ก์(Follower) ์ญํ ์ ๋ถ์ฌํ๋ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ค.
ํํฐ์ ๋ณต์ ๋ณธ(Replica)
ํ ํฝ ์์ฑ ์ ์ง์ ํ
replication-factor๋งํผ ๊ฐ ํํฐ์ ์ ๋ณต์ ๋ณธ ์์ฑ๋ณต์ ๋ณธ๋ค์ ํด๋ฌ์คํฐ ๋ด ์ฌ๋ฌ ๋ธ๋ก์ปค์ ๋ถ์ฐ ์ ์ฅ๋์ด ํ๋์ ๋ธ๋ก์ปค์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ฐ์ดํฐ ์ ์ค ์์ด ์ด์ ๊ฐ๋ฅ
๋ฆฌ๋(Leader)
๊ฐ ํํฐ์ ์ ์ฌ๋ฌ ๋ณต์ ๋ณธ ์ค ๋จ ํ๋๋ง์ด ๋ฆฌ๋ ์ญํ ์ํ
ํ๋ก๋์์ ๋ชจ๋ ์ฐ๊ธฐ ์์ฒญ๊ณผ ์ปจ์๋จธ์ ๋ชจ๋ ์ฝ๊ธฐ ์์ฒญ์ ์ค์ง ๋ฆฌ๋๋ฅผ ํตํด์๋ง ์ฒ๋ฆฌ
ํ๋ก์(Follower)
๋ฆฌ๋๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ณต์ ๋ณธ๋ค์ ํ๋ก์ ์ญํ ์ํ
ํ๋ก์๋ ์ด๋ ํ ์ฝ๊ธฐ/์ฐ๊ธฐ ์์ฒญ์๋ ๊ด์ฌํ์ง ์์ผ๋ฉฐ, ์ค์ง ๋ฆฌ๋๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์๋๋ก ๊ฐ์ ธ์ ์์ ์ ๋ก๊ทธ์ ๊ธฐ๋กํ๋ ์ญํ ๋ง ์ํ
๋๊ธฐํ ๋ฉ์ปค๋์ฆ๊ณผ ISR(In-Sync Replicas)
๋ฆฌ๋์ ํ๋ก์๊ฐ ๋ฐ์ดํฐ ๋๊ธฐํ๋ฅผ ์ ์งํ๋ ๋ฐฉ์์ ์นดํ์นด ๋ณต์ ๋ฉ์ปค๋์ฆ์ ํต์ฌ์ด๋ค.
๋ก๊ทธ ๋ ์คํ์ (Log End Offset, LEO)
๊ฐ ๋ณต์ ๋ณธ(๋ฆฌ๋, ํ๋ก์)์ด ๊ฐ์ง๊ณ ์๋ ๋ก๊ทธ์ ๋ง์ง๋ง ์คํ์ ์ ์๋ฏธ
ํ๋ก์๋ ๋ฆฌ๋์๊ฒ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญ(
Fetch Request)ํ์ฌ ์์ ์ LEO๋ฅผ ๋ฆฌ๋์ LEO์ ์ผ์น์ํค๋ ค ๋ ธ๋ ฅ
ISR(In-Sync Replicas)
๋๊ธฐํ ์ํ๋ฅผ ์ ์งํ๊ณ ์๋ ๋ณต์ ๋ณธ๋ค์ ์งํฉ์ ์๋ฏธ(๋ฆฌ๋ ์์ ๋ ํฌํจ)
ํ๋ก์๊ฐ ISR์ ํฌํจ๋๊ธฐ ์ํ ์กฐ๊ฑด
ํ๋ก์์ LEO๊ฐ ๋ฆฌ๋์ LEO์ ๊ฑฐ์ ๋์ผํ ์์ค์ด์ด์ผ ํจ
replica.lag.time.max.ms์ค์ ์๊ฐ ๋ด์ ๋ฆฌ๋๋ก๋ถํฐ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ fetchํด์ผ ํจ
ISR๊ณผ ํ๋ก๋์
acks=all์ค์ ์ ๊ด๊ณํ๋ก๋์๊ฐ
acks=all์ต์ ์ผ๋ก ๋ฉ์์ง๋ฅผ ์ ์กํ๋ฉด, ISR์ ํฌํจ๋ ๋ชจ๋ ํ๋ก์๊ฐ ํด๋น ๋ฉ์์ง๋ฅผ ๋ณต์ ํ์์ ํ์ธ ํ ์๋ต(Ack) ์ ์ก์ด๋ฅผ ํตํด ISR ๋ด์์๋ ๋ฐ์ดํฐ ์ ์ค ์๋ ์ ์ก ๋ณด์ฅ ๊ฐ๋ฅ
๋ฆฌ๋ ์ ์ถ(Leader Election)
๋ฆฌ๋ ์ญํ ์ ํ๋ ๋ธ๋ก์ปค์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด, ํด๋ฌ์คํฐ๋ ์๋น์ค ์ค๋จ์ ๋ง๊ธฐ ์ํด ํ๋ก์ ์ค ํ๋๋ฅผ ์๋ก์ด ๋ฆฌ๋๋ก ์ ์ถํด์ผ ํ๋ค.
์ ์ถ ๊ณผ์
ํด๋ฌ์คํฐ์ ์ปจํธ๋กค๋ฌ(Controller) ๋ธ๋ก์ปค๊ฐ ํน์ ํํฐ์ ๋ฆฌ๋์ ์ฅ์ ๊ฐ์ง
์ปจํธ๋กค๋ฌ๋ ํด๋น ํํฐ์ ์ ISR ๋ชฉ๋ก์์ ์ด์์๋ ํ๋ก์ ์ค ํ๋๋ฅผ ์๋ก์ด ๋ฆฌ๋๋ก ์ง์
์๋ก์ด ๋ฆฌ๋๊ฐ ์ง์ ๋๋ฉด, ํด๋ฌ์คํฐ์ ๋ค๋ฅธ ๋ธ๋ก์ปค์ ํด๋ผ์ด์ธํธ๋ค์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ์ฌ ์๋ก์ด ๋ฆฌ๋์ ํต์ ์์
๋น์ ์ ๋ฆฌ๋ ์ ์ถ (Unclean Leader Election)
๋ง์ฝ ๋ธ๋ก์ปค ์ฅ์ ๋ก ์ธํด ISR์ ๋ฆฌ๋ ์์ ์ธ์ ์๋ฌด๋ ์๋ ์ํฉ์ด ๋ฐ์ํ๋ฉด, ์ต์ ์ ๋ฐ๋ผ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ
unclean.leader.election.enable=false: ์๋ก์ด ๋ฆฌ๋๋ฅผ ์ ์ถํ์ง ์๊ณ ํํฐ์ ์ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋ค์ด ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ์ฐ์ (Consistency)unclean.leader.election.enable=true: ISR์ ์๋ ํ๋ก์๋ผ๋ ๋ฆฌ๋๋ก ์ ์ถํ์ฌ ์๋น์ค๋ฅผ ๊ณ์ํ๋๋ก ํ์ฉํ๋ค. ๊ฐ์ฉ์ฑ์ ์ฐ์ (Availability)
๋ฐ์ดํฐ ์ ํฉ์ฑ๊ณผ High Watermark
๋ณต์ ๊ณผ์ ์์ ์์ง ๋ชจ๋ ๋ณต์ ๋ณธ์ ๋๊ธฐํ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ปจ์๋จธ๊ฐ ์ฝ์ด๊ฐ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด High Watermark๋ผ๋ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ค.
High Watermark
ISR์ ํฌํจ๋ ๋ชจ๋ ๋ณต์ ๋ณธ๋ค์ด ๊ณตํต์ ์ผ๋ก ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฅ ๋์ ์คํ์ ์ ์๋ฏธ(์์ ํ๊ฒ ๋ณต์ ๋์๋ค'๊ณ ๋ณด์ฅ๋๋ ๋ฉ์์ง์ ์์น)
HWM์ ISR ๋ด์์ LEO๊ฐ ๊ฐ์ฅ ๋ฎ์ ๋ณต์ ๋ณธ(๊ฐ์ฅ ๋๋ฆฐ ํ๋ก์)์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฒฐ์
HWM์ ์ญํ
์ปจ์๋จธ๋ ์ค์ง HWM ์ด์ ์ ์คํ์ ์ ํด๋นํ๋ ๋ฉ์์ง๋ง ์กฐํ ๊ฐ๋ฅ
๋ฆฌ๋์๋ง ๊ธฐ๋ก๋๊ณ ์์ง ํ๋ก์๋ค์๊ฒ ์์ ํ ๋ณต์ ๋์ง ์์ ๋ฐ์ดํฐ๊ฐ ์ธ๋ถ๋ก ๋ ธ์ถ๋๋ ๊ฒ์ ๋ง์ ๋ฐ์ดํฐ ์ ํฉ์ฑ ๋ณด์ฅ
Last updated
Was this helpful?