[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๋ฒ offset ๊น์ง ๋ณต์ ๋ฅผ ๋ง์น follower A ๊ฐ leader B ์๊ฒ fetchRequest(offset=2)
- leader๋ follower ๊ฐ 1๋ฒ offset ๊น์ง ๋ณต์ ๋ฅผ ๋ง์ณค๋ค๊ณ ํ๋จ ํ, high water mark ๋ฅผ ์ํฅ์กฐ์ ํ ํ fetchResponse ๋ฅผ A์๊ฒ ์ ์ก
- A๊ฐ response ๋ฅผ ๋ฐ์ง ๋ชปํ ์ฑ ์ฌ์์ํ๊ฒ ๋๋ฉด, high water mark ์ ๋ฉ์์ง๋ค์ ์ ๋ขฐํ์ง ๋ชปํ๋ค๊ณ ํ๋จ ํ ํ๊ธฐ
- leader broker ๊ฐ ๋ค์ด๋๋ฉด, follower broker๋ ๋ฉ์ธ์ง2๋ฅผ ํ๊ธฐํ ์ํ์์ leader ๋ก promotion -> ๋ฉ์์ง 2 ์ ์์ค์ด ๋ฐ์
- ๋ชจ๋ broker ๊ฐ ๋ค์ด๋๊ณ , ๋ถ์์ ํ ๋ธ๋ก์ปค๊ฐ leader ๋ก ์น๊ฒฉ๋๋ ๊ฒฝ์ฐ
- follower, leader broker ๋ชจ๋ ๋ค์ด
- follower ๊ฐ ๋จผ์ ๋ณต๊ตฌ๋์ด, leader ๋ก promotion
- leader ๊ฐ ๋ A ๊ฐ ์๋ก์ด ๋ฉ์์ง m3๋ฅผ ๋ฐ์
- 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๋ฅผ ์ฌ์ฉํ๋ค.
- ๋ถ์์ ํ๊ฒ ๋ณต์ ๋ ์ํ๋ก ๋ฆฌ๋ ๋ธ๋ก์ปค A์ ํ๋ก์ ๋ธ๋ก์ปค B๊ฐ ๋์์ ์ข ๋ฃ๋๋ค.
- ํ๋ก์ ๋ธ๋ก์ปค B๊ฐ ๋จผ์ ์ฌ์์๋์ด ์๋ก์ด ๋ฆฌ๋๋ก ์ ์ถ๋ฉ๋๋ค.
- ๋ธ๋ก์ปค B๋ ๋ฆฌ๋์ด๋ฏ๋ก, LeaderEpoch ๊ตํ ๊ณผ์ ์ ๊ฑฐ์น์ง ์์ต๋๋ค.
- ๋ฆฌ๋๊ฐ ๋ ๋ธ๋ก์ปค B๊ฐ ํ๋ก๋์๋ก๋ถํฐ ์๋ก์ด ๋ฉ์์ง m3๋ฅผ ์ ์ก๋ฐ์ต๋๋ค.
- ๋ธ๋ก์ปค A๊ฐ ํ๋ก์๊ฐ ๋์ด ์ฌ์์๋ฉ๋๋ค.
- ๋ฆฌ๋ ๋ธ๋ก์ปค B์๊ฒ LeaderEpochRequest๋ฅผ ์ ์กํ๊ณ 1์ ๋ฐํ๋ฐ์ต๋๋ค.
- ํ์ฌ ๋ก์ปฌ์ ๊ฐ์ง๊ณ ์๋ ๋ฉ์์ง ์คํ์ ์ 2์ด๋ฏ๋ก, ํ์ฌ ๋ฆฌ๋์ start offset์ ํด๋นํ๋ 1 8. ์ดํ์ ๋ฐ์ดํฐ๋ ๋ชจ๋ ์ญ์ ํฉ๋๋ค. ๋ฐ๋ผ์, m2 ๋ฉ์์ง๊ฐ ์ญ์ ๋ฉ๋๋ค.
์ปจํธ๋กค๋ฌ
์นดํ์นด์ ์ปจํธ๋กค๋ฌ๋ ๋ฆฌ๋ ์ ์ถ์ ์ฑ ์์ ๊ฐ์ง๊ณ ์๋ค. ์๋๋ ์ข ๋ฃ์ ์๋๋์ง ์์ ์ข ๋ฃ์์ ์๋๋ ์ข ๋ฃ๊ฐ ๋ค์ดํ์์ ์ต์ํ ์ํฌ ์ ์๋ค. ๊ทธ ์ด์ ๋, ์๋๋ ์ข ๋ฃ๋ ๋ธ๋ก์ปค๊ฐ ์ข ๋ฃ๋๊ธฐ ์ ์ปจํธ๋กค๋ฌ๊ฐ ๊ทธ๋ฃน๋ด์์ ๋ฆฌ๋๋ฅผ ์ ์ถํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ก๊ทธ
๋ก๊ทธ๋ segmentํ์ผ์ ์ ์ฅ๋๋ค. ๋ก๊ทธ๋ 1GB ๊ฐ ๋๊ฒ ๋๋ฉด, ๋กค๋ง๋์ด ์๋ก์ด ํ์ผ์ ์ ์ฅํ๋ค. ๋ก๊ทธ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ก๊ทธ ์ญ์ , ์ปดํฉ์ ์ด ์๋ค.