λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Kafka

리더에포크 & 볡ꡬ

by Soono991 2023. 5. 1.
πŸ’‘ 이번 ν¬μŠ€νŒ…μ—μ„œλŠ” λ¦¬λ”에포크와 볡ꡬ에 λŒ€ν•΄ 정리해 보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

리더에포크(LeaderEpoch)λŠ” μΉ΄ν”„μΉ΄μ˜ νŒŒν‹°μ…˜λ“€μ΄ 볡ꡬ λ™μž‘μ„ ν•  λ•Œ λ©”μ‹œμ§€μ˜ 일관성을 μœ μ§€ν•˜κΈ° μœ„ν•œ μš©λ„λ‘œ μ΄μš©λ©λ‹ˆλ‹€.

λ¦¬λ”μ—ν¬ν¬λŠ” μ»¨νŠΈλ‘€λŸ¬μ— μ˜ν•΄ κ΄€λ¦¬λ˜λŠ” 32λΉ„νŠΈμ˜ 숫자둜 ν‘œν˜„λ©λ‹ˆλ‹€.

ν•΄λ‹Ή 리더에포크 μ •λ³΄λŠ” Replication ν”„λ‘œν† μ½œμ— μ˜ν•΄ μ „νŒŒλ˜κ³ , μƒˆλ‘œμš΄ 리더가 λ³€κ²½λœ ν›„ λ³€κ²½λœ 리더에 λŒ€ν•œ μ •λ³΄λŠ” νŒ”λ‘œμ›Œμ—κ²Œ μ „λ‹¬λ©λ‹ˆλ‹€.

λ¦¬λ”μ—ν¬ν¬λŠ” 볡ꡬ λ™μž‘ μ‹œ ν•˜μ΄μ›Œν„°λ§ˆν¬λ₯Ό λŒ€μ²΄ν•˜λŠ” μˆ˜λ‹¨μœΌλ‘œλ„ ν™œμš©λ©λ‹ˆλ‹€.

 

 

리더에포크 X

peter-test01 ν† ν”½μ˜ 리더 νŒŒν‹°μ…˜κ³Ό νŒ”λ‘œμ›Œ λͺ¨λ‘ message1 λ©”μ‹œμ§€ Replication에 μ„±κ³΅ν–ˆμŠ΅λ‹ˆλ‹€.

그리고 ν•˜μ΄μ›Œν„°λ§ˆν¬λ₯Ό 1둜 올린 ν›„ 리더 νŒŒν‹°μ…˜μ΄ message2λ₯Ό μ €μž₯ν•œ ν›„ νŒ”λ‘œμ›Œ νŒŒν‹°μ…˜μ΄ message2에 λŒ€ν•΄ Replication μš”μ²­μ„ λ³΄λƒ…λ‹ˆλ‹€.

리더 νŒŒν‹°μ…˜μ€ νŒ”λ‘œμ›Œ νŒŒν‹°μ…˜μ΄ message2에 λŒ€ν•œ Replication μš”μ²­μ„ λ³΄λƒˆκΈ° λ•Œλ¬Έμ— μžμ‹ μ˜ ν•˜μ΄μ›Œν„°λ§ˆν¬λ₯Ό 2둜 μ˜¬λ¦½λ‹ˆλ‹€. 

μ—¬κΈ°μ„œ 리더 νŒŒν‹°μ…˜μ΄ 응닡을 ν•˜κΈ° 전에 νŒ”λ‘œμ–΄ νŒŒν‹°μ…˜μ΄ λ‹€μš΄λœλ‹€κ³  κ°€μ •ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

μž₯μ• μ—μ„œ 볡ꡬ된 νŒ”λ‘œμ›ŒλŠ” λ‚΄λΆ€μ μœΌλ‘œ λ©”μ‹œμ§€ 볡ꡬ λ™μž‘μ„ ν•˜κ²Œ λ©λ‹ˆλ‹€.

νŒ”λ‘œμ›ŒλŠ” μžμ‹ μ΄ κ°–κ³  μžˆλŠ” λ©”μ‹œμ§€ μ€‘μ—μ„œ μžμ‹ μ˜ μ›Œν„°λ§ˆν¬λ³΄λ‹€ 높은 λ©”μ‹œμ§€λ“€μ€ μ‹ λ’°ν•  수 μ—†λŠ” λ©”μ‹œμ§€λ‘œ νŒλ‹¨ν•˜κ³  μ‚­μ œν•©λ‹ˆλ‹€.

λ”°λΌμ„œ 1번 μ˜€ν”„μ…‹μ˜ message2λŠ” μ‚­μ œλ©λ‹ˆλ‹€.

그리고 νŒ”λ‘œμ›ŒλŠ” λ‹€μ‹œ 리더 νŒŒν‹°μ…˜μ—κ²Œ 1번 μ˜€ν”„μ…‹μ˜ λ©”μ‹œμ§€μ— λŒ€ν•œ κ°€μ Έμ˜€κΈ°(fetch) μš”μ²­μ„ λ³΄λƒ…λ‹ˆλ‹€.

이 μˆœκ°„ λ¦¬λ”μ˜€λ˜ λΈŒλ‘œμ»€κ°€ μž₯μ• λ‘œ λ‹€μš΄λ˜λ©΄μ„œ, νŒ”λ‘œμ›Œ νŒŒν‹°μ…˜μ΄ μƒˆλ‘œμš΄ λ¦¬λ”λ‘œ μŠΉκ²©λ©λ‹ˆλ‹€.

 

 

λ¦¬λ”λ‘œ μ„ μΆœλœ νŒ”λ‘œμ›Œ νŒŒν‹°μ…˜μ€ message2 λ©”μ‹œμ§€λ₯Ό 가지고 μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ΅œμ’…μ μœΌλ‘œ message2 λ©”μ‹œμ§€κ°€ μ†μ‹€λ©λ‹ˆλ‹€.

 

 

리더에포크 O

 

 

μ•„κΉŒμ˜ μƒν™©μ—μ„œ νŒ”λ‘œμ›Œκ°€ 볡ꡬ된 μƒνƒœ μ΄ν›„μž…λ‹ˆλ‹€.

리더에포크가 μ—†λŠ” μƒν™©μ—μ„œλŠ” μžμ‹ μ˜ ν•˜μ΄μ›Œν„°λ§ˆν¬λ³΄λ‹€ 높은 λ©”μ‹œμ§€λ₯Ό μ¦‰μ‹œ μ‚­μ œν–ˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 리더에포크λ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λŠ” ν•˜μ΄μ›Œν„°λ§ˆν¬λ³΄λ‹€ μ•žμ— μžˆλŠ” λ©”μ‹œμ§€λ₯Ό 무쑰건 μ‚­μ œν•˜λŠ” 것이 μ•„λ‹ˆλΌ 리더 νŒŒν‹°μ…˜μ—κ²Œ 리더에포크 μš”μ²­μ„ λ³΄λƒ…λ‹ˆλ‹€.

 

  1. νŒ”λ‘œμ›ŒλŠ” 볡ꡬ λ™μž‘μ„ ν•˜λ©΄μ„œ 리더 νŒŒν‹°μ…˜μ—κ²Œ 리더에포크 μš”μ²­μ„ λ³΄λƒ…λ‹ˆλ‹€.
  2. μš”μ²­μ„ 받은 리더 νŒŒν‹°μ…˜μ€ λ¦¬λ”μ—ν¬ν¬μ˜ μ‘λ‹΅μœΌλ‘œ '1번 μ˜€ν”„μ…‹μ˜ message2κΉŒμ§€'라고 νŒ”λ‘œμ›Œ νŒŒν‹°μ…˜μ—κ²Œ λ³΄λƒ…λ‹ˆλ‹€.
  3. νŒ”λ‘œμ›ŒλŠ” μžμ‹ μ˜ ν•˜μ΄μ›Œν„°λ§ˆν¬λ³΄λ‹€ 높은 1번 μ˜€ν”„μ…‹μ˜ message2λ₯Ό μ‚­μ œν•˜μ§€ μ•Šκ³  λ¦¬λ”μ˜ 응닡을 ν™•μΈν•œ ν›„ message2κΉŒμ§€ μžμ‹ μ˜ ν•˜μ΄μ›Œν„°λ§ˆν¬λ₯Ό 상ν–₯ μ‘°μ •ν•©λ‹ˆλ‹€.

 

 

리더에포크λ₯Ό ν™œμš©ν•˜λŠ” κ²½μš°μ—λŠ” μ‚­μ œ λ™μž‘μ„ ν•˜κΈ°μ— μ•žμ„œ 리더에포크 μš”μ²­κ³Ό 응닡 과정을 톡해 νŒ”λ‘œμ›Œμ˜ ν•˜μ΄μ›Œν„°λ§ˆν¬λ₯Ό 올릴 수 μžˆμ—ˆκ³ , λ©”μ‹œμ§€ 손싀은 λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

 

 

 

리더에포크 X

λ¦¬λ”λ§Œ μ˜€ν”„μ…‹ 1κΉŒμ§€ μ €μž₯ν–ˆκ³ , νŒ”λ‘œμ›ŒλŠ” 아직 1번 μ˜€ν”„μ…‹ λ©”μ‹œμ§€μ— λŒ€ν•΄ Replication λ™μž‘μ„ μ™„λ£Œν•˜μ§€ λͺ»ν•œ μƒνƒœμ—μ„œ 리더 νŒŒν‹°μ…˜μ΄ λ‹€μš΄λλ‹€κ³  κ°€μ •ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

이 경우 νŒ”λ‘œμ›Œ νŒŒν‹°μ…˜μ΄ μƒˆλ‘œ 리더 νŒŒν‹°μ…˜μœΌλ‘œ μ„ μΆœλ˜κ³  μƒˆλ‘œμš΄ 리더가 ν”„λ‘œλ“€μ„œλ‘œλΆ€ν„° λ‹€μŒ λ©”μ‹œμ§€ message3을 전달받고 1번 μ˜€ν”„μ…‹μ— μ €μž₯ν•œ ν›„, μžμ‹ μ˜ ν•˜μ΄μ›Œν„°λ§ˆν¬λ₯Ό 상ν–₯ μ‘°μ •ν•©λ‹ˆλ‹€.

 

 

그리고 μž₯μ• κ°€ λ°œμƒν–ˆλ˜ (ꡬ) 리더 νŒŒν‹°μ…˜μ˜ 볡ꡬ 과정은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. (ꡬ) λ¦¬λ”μ˜€λ˜ 브둜컀(νŒŒν‹°μ…˜)κ°€ μž₯μ• μ—μ„œ λ³΅κ΅¬λ©λ‹ˆλ‹€.
  2. peter-test01 ν† ν”½μ˜ 0번 νŒŒν‹°μ…˜μ— 이미 리더가 μžˆμœΌλ―€λ‘œ, 볡ꡬ된 λΈŒλ‘œμ»€λŠ” νŒ”λ‘œμ›Œκ°€ λ©λ‹ˆλ‹€.
  3. 리더와 λ©”μ‹œμ§€ μ •ν•©μ„± 확인을 μœ„ν•΄ μžμ‹ μ΄ κ°–κ³  있던 λ©”μ‹œμ§€λ₯Ό μ‚­μ œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  4. λ¦¬λ”λŠ” ν”„λ‘œλ“€μ„œλ‘œλΆ€ν„° message4 λ©”μ‹œμ§€λ₯Ό 받은 ν›„ μ˜€ν”„μ…‹ 2의 μœ„μΉ˜μ— μ €μž₯ν•©λ‹ˆλ‹€.
  5. νŒ”λ‘œμ›ŒλŠ” μ˜€ν”„μ…‹ 2인 message4λ₯Ό Replication ν•˜κΈ° μœ„ν•΄ μ€€λΉ„ν•©λ‹ˆλ‹€. 

μƒˆλ‘œμš΄ 리더 νŒŒν‹°μ…˜μ€ 1번 μ˜€ν”„μ…‹ μœ„μΉ˜μ— message3을 κ°–κ³  있고, νŒ”λ‘œμ›ŒλŠ” 1번 μ˜€ν”„μ…‹ μœ„μΉ˜μ— message2λ₯Ό κ°–κ³  μžˆμŠ΅λ‹ˆλ‹€.

리더와 νŒ”λ‘œμ›Œ λ‘˜ λ‹€ λ™μΌν•œ ν•˜μ΄μ›Œν„°λ§ˆν¬λ₯Ό λ‚˜νƒ€λ‚΄κ³  μžˆμ§€λ§Œ μ„œλ‘œμ˜ λ©”μ‹œμ§€λŠ” λ‹€λ¦…λ‹ˆλ‹€. ν•˜μ§€λ§Œ 리더에포크λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ ν•˜μ΄μ›Œν„°λ§ˆν¬λ§Œμ„ 가지고 νŒλ‹¨ν•˜κΈ° λ•Œλ¬Έμ— μ„œλ‘œμ˜ λ©”μ‹œμ§€κ°€ λΆˆμΌμΉ˜ν•˜λŠ” κ²½μš°κ°€ λ°œμƒν•©λ‹ˆλ‹€.

 

 

 

리더 에포크 O

 

 

리더에포크λ₯Ό μ‚¬μš©ν•  경우 νŒ”λ‘œμ›ŒλŠ” λ©”μ‹œμ§€ 일관성을 μœ„ν•΄ 1번 μ˜€ν”„μ…‹μΈ message2λ₯Ό μ‚­μ œν•©λ‹ˆλ‹€.

(νŒ”λ‘œμ›ŒλŠ” μ“°κΈ° κΆŒν•œμ΄ μ—†μœΌλ―€λ‘œ, λ¦¬λ”μ—κ²Œ message2λ₯Ό μΆ”κ°€ν•  수 μ—†μŠ΅λ‹ˆλ‹€.)

 

 

 

리더 에포크 μƒνƒœ 확인

linux의 cat λͺ…λ Ήμ–΄λ₯Ό 톡해 리더에포크 μƒνƒœλ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

cat /data/kafka-logs/[partiton name]/leader-epoch-checkpoint

0
1 : ν˜„μž¬μ˜ 리더에포크 번호
0 0  : 첫 번째 0은 리더에포크 번호, 두 번째 0은 μ΅œμ’… 컀밋 ν›„ μƒˆλ‘œμš΄ λ©”μ‹œμ§€λ₯Ό μ „μ†‘λ°›κ²Œ 될 μ˜€ν”„μ…‹ 번호

 

broker 3을 μ’…λ£Œν•˜κ³  λ‹€μ‹œ 리더에포크λ₯Ό μ‘°νšŒν•΄ 보면 λ‹€μŒκ³Ό 같이 λ³€κ²½λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

 

0
2 : 리더가 변경될 λ•Œλ§ˆλ‹€ 리더에포크 λ²ˆν˜Έκ°€ ν•˜λ‚˜μ”© μ¦κ°€ν•©λ‹ˆλ‹€.
0 0
1 1

 

 

참고 자료

'Kafka' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

λ©”μ‹œμ§€ 둜그 μ„Έκ·Έλ¨ΌνŠΈ, 둜그 μ„Έκ·Έλ¨ΌνŠΈ  (0) 2023.05.07
컨트둀러  (0) 2023.05.01
ISR(In Sync Replica)  (0) 2023.05.01
Replication  (0) 2023.05.01
λ©€ν‹° λ…Έλ“œ μΉ΄ν”„μΉ΄ - 2  (0) 2023.05.01

λŒ“κΈ€