μΉ΄νμΉ΄ νλ‘λμ
- μΉ΄νμΉ΄ νλ‘λμλ ν ν½μ λ°μ΄ν°λ₯Ό μ μ₯νλ 첫 λ¨κ³!
acks μ΅μ
- νλ‘λμμ μ΅μ μΌλ‘ acks μ΅μ
- νλ‘λμκ° μ μ‘ν λ°μ΄ν°λ₯Ό ν΄λ¬μ€ν°μ μΌλ§λ μ λ’°μ± μκ² μ μ₯ν μ§ μ§μ κ°λ₯
- μ΅μ μ λ°λΌ μ±λ₯μ΄ λ¬λΌμ§ μ μλ€.
acks = 0
- νλ‘λμκ° λ¦¬λ νν°μ
μΌλ‘ λ°μ΄ν°λ₯Ό μ μ‘νμ λ
리λ νν°μ μΌλ‘ λ°μ΄ν°κ° μ μ₯λμλμ§ νμΈ νμ§ μλλ€
- 리λ νν°μ μ λ°μ΄ν°κ° μ μ₯λ μ΄ν, λͺ λ²μ§Έ μ€νμ μ μ μ₯λμλμ§ return
- μ΄ κ²½μ°μλ λ°μ΄ν°κ° μ μ₯λ μ¬λΆμ λ°λ₯Έ μλ΅μ λ°μ§ μμ.
![](https://user-images.githubusercontent.com/89288109/230774867-d1fd9e6f-a8f9-43fb-9185-9c1d64b26f06.png)
- νλ‘λμλ λ°μ΄ν° μ μ‘ μ€ν¨μ, μ¬μλν μ μκ², retries μ΅μ μ€μ κ°λ₯
- νμ§λ§ acks = 0 μΌ κ²½μ°, λ°μ΄ν° μ μ‘μ 무쑰건 μ±κ³΅μΌλ‘ κ°μ£Ό, ν΄λΉ μ΅μ μ 무μλ―Ένλ€.
- νλ‘λμμ λΈλ‘컀 μ¬μ΄μ λ€νΈμν¬ μ€λ₯λ λΈλ‘컀μ μ΄μ λ±μ μΈνμ¬ λ°μ΄ν°κ° μ μ€ λλλΌλ, νλ‘λμλ 리λ νν°μ
μΌλ‘λΆν° μλ΅ κ°μ λ°μ§ μμ
- μ§μμ μΌλ‘ λ€μ λ°μ΄ν°λ₯Ό 보λΈλ€.
- 1, -1 μΌ κ²½μ°λ³΄λ€ λ°μ΄ν° μ μ‘ μλκ° ν¨μ¬ λΉ λ¦.
- λ°μ΄ν°κ° μΌλΆ μ μ€ λμ΄λ ok? => acks = 0
acks = 1
- νλ‘λμλ
λ³΄λΈ λ°μ΄ν°κ° 리λ νν°μ μ μ μμ μΌλ‘ μ μ¬λμλμ§ νμΈ
- μ μμ μΌλ‘ μ μ¬λμ§ μμμ κ²½μ°, μ μ¬λ λκΉμ§ μ¬μλ
- μ μ¬λμλλΌλ, λ°μ΄ν° μ μ€ λ°μ κ°λ₯μ±
- 볡μ κ°μλ₯Ό 2κ° μ΄μμΌλ‘ μ΄μ μ, νλ‘μ νν°μ μ΄ λ¦¬λ νν°μ μΌλ‘λΆν° 볡μ νκΈ° μ§μ , 리λ νν°μ μ μλ λΈλ‘컀μ μ₯μ λ°μ κ°λ₯
- λκΈ°νλμ§ λͺ»ν μΌλΆ λ°μ΄ν°κ° μ μ€λ κ°λ₯μ±μ΄ μλ€.
![](https://user-images.githubusercontent.com/89288109/230775111-91ca3709-66af-4600-be14-7f1452383af9.png)
- μ΄ κ²½μ°μλ, 리λ νν°μ μ λ°μ΄ν°κ° μ μ¬λ λκΉμ§ κΈ°λ€λ¦° λ€ μλ΅μ λ°μ
- acks = 0 μΌ κ²½μ°λ³΄λ€ μ μ‘ μλκ° λλ¦Ό.
acks = all || acks = -1
- νλ‘λμλ λ³΄λΈ λ°μ΄ν°κ° 리λ νν°μ κ³Ό νλ‘μ νν°μ μ λͺ¨λ μ μ μ μ¬λμλμ§ νμΈ
- λͺ¨λ νμΈνλ―λ‘, λ€λ₯Έ μ΅μ κ°λ€λ³΄λ€ λ°μ΄ν° μ μ‘ μλκ° λλ¦Ό.
- λͺ¨λ μ μ¬λμλμ§ νμΈνλ―λ‘, μΌλΆ λΈλ‘컀μ μ₯μ κ° λ°μν΄λ, μμ νκ² λ°μ΄ν°λ₯Ό μ μ‘νκ³ μ μ₯νλ κ²μ 보μ₯ κ°λ₯ν¨.
![](https://user-images.githubusercontent.com/89288109/230775260-9aca5044-d057-4003-81c8-095120f1a8c0.png)
- acks = all
- ν ν½ λ¨μλ‘ μ€μ κ°λ₯ν
min.insync.replicas
μ΅μ κ°μ λ°λΌ λ°μ΄ν°μ μμ μ±μ΄ λ¬λΌμ§ - μ΄ μ΅μ μ νλ‘λμκ° λ¦¬λ, νλ‘μ νν°μ μ λ°μ΄ν°κ° μ μ μ μ¬λμλμ§ νμΈνκΈ° μν μ΅μ ISR κ·Έλ£Ήμ νν°μ κ°μ
- μλ‘, 1 μ΄λΌλ©΄, ISR μ€ μ΅μ 1κ° μ΄μμ νν°μ μ λ°μ΄ν°κ° μ μ¬λμμμ νμΈ νλ κ².
![](https://user-images.githubusercontent.com/89288109/230775354-887b614b-5fa5-4bb1-962c-dc631024fa2f.png)
![](https://user-images.githubusercontent.com/89288109/230775371-76c5136a-305c-492a-85cc-e5d6b3ebcf64.png)
- μμ© νκ²½μμ μΌλ°μ μΌλ‘ λΈλ‘컀λ₯Ό 3λ μ΄μμΌλ‘ λ¬Άμ΄ ν΄λ¬μ€ν°λ₯Ό μ΄μ
- μ΄ μ μ κ³ λ €νμ¬ λ°μ΄ν°λ₯Ό μμ μ μΌλ‘ 보λ΄κ³ μΆμΌλ©΄, ν ν½μ μ΅λ κ°μ = 3, min.insync,replicas = 2 μ€μ
- acks = all λ‘ μ€μ ν΄λ³΄μ~
λ©±λ±μ± (idempotence) νλ‘λμ
- λ©±λ±μ± νλ‘λμ = λμΌ λ°μ΄ν°λ₯Ό μ¬λ¬ λ² μ μ‘ν΄λ, μΉ΄νμΉ΄ ν΄λ¬μ€ν°μ λ¨ νλ² μ μ₯
- κΈ°λ³Έ νλ‘λμμ λμ λ°©μμ
At Least Once
λ₯Ό μ§μ - μ΄ λ°©μμ, νλ‘λμκ° ν΄λ¬μ€ν°μ λ°μ΄ν°λ₯Ό μ μ‘νμ¬ μ μ₯ν λ, μ μ΄λ νλ² μ΄μ λ°μ΄ν°λ₯Ό μ μ¬ν μ μκ³ , λ°μ΄ν°κ° μ μ€λμ§ μμμ μΌμ»«λλ€.
- λλ² μ΄μ μ μ¬ κ°λ₯μ± => λ°μ΄ν°μ μ€λ³΅ λ°μ
- enable.idempotence μ΅μ κ° true μ€μ μΌλ‘ μ¬μ© κ°λ₯
- κΈ°λ³Έ νλ‘λμμ λ€λ₯΄κ², λΈλ‘μ»€λ‘ λ°μ΄ν° μ λ¬ μ, νλ‘λμ PID(Producer unique ID) μ μνμ€ λλ² (sequence number) λ‘ ν¨κ» μ λ¬
- λΈλ‘컀λ PID, Sequence Number λ₯Ό νμΈ ν, λμΌ λ©μμ§μ μ μ¬ μμ²μ΄ μλ, λ¨ νλ²λ§ λ°μ΄ν°λ₯Ό μ μ¬ν¨.
- νλ‘λμμ λ°μ΄ν°λ μ νν νλ² λΈλ‘컀μ μ μ¬λλλ‘ λμ (exactly once)
![](https://user-images.githubusercontent.com/89288109/230775805-d022e242-024c-4bff-8256-4c789cacd237.png)
![](https://user-images.githubusercontent.com/89288109/230775833-31a75588-1e0d-48de-aaca-f45436d249b2.png)
- μμ λ§νλ€μΆμ΄, λμΌν μΈμ μμλ§ μ νν νλ² μ λ¬μ 보μ₯
- μΈμ = PID μ μλͺ μ£ΌκΈ°
- λ©±λ±μ± νλ‘λμλ‘ λμνλ νλ‘λμ μ±μ λ¬Έμ κ° λ°μνμ¬ μ’ λ£λκ³ , μ¬μμνλ©΄ PID κ° λ¬λΌμ§!
- λμΌ λ°μ΄ν°λ₯Ό 보λ΄λλΌλ, PID κ° λ€λ₯΄λ―λ‘, λΈλ‘컀 μ μ₯μμ λ€λ₯Έ νλ‘λμ μ±μ΄ λ€λ₯Έ λ°μ΄ν°λ₯Ό 보λλ€κ³ νλ¨, μ₯μ κ° λ°μνμ§ μλ μν©μμλ§ exactly once λ₯Ό 보μ₯νλ€λ μ μ κ³ λ €νμ.
- enable.idempotence λ₯Ό true λ‘ μ€μ νλ©΄ μ νν νλ² μ μ¬λλ λ‘μ§μ΄ μ±λ¦½λκΈ° μν΄ νλ‘λμμ μΌλΆ μ΅μ λ€μ΄ κ°μ λ‘ μ€μ
- νλ‘λμμ λ°μ΄ν° μ μ‘ νμλ₯Ό μ νλ retries λ κΈ°λ³Έμ μΌλ‘ Integer.MAX_VALUE κ° λ¨, acks = all λ‘ μ€μ
- μ΄μ λ, νλ‘λμκ° μ μ΄λ ν λ² μ΄μ λΈλ‘컀μ λ°μ΄ν°λ₯Ό 보λ΄λ―λ‘, λ¨ ν λ²λ§ λ°μ΄ν°κ° μ μ¬λλ κ²μ 보μ₯νκΈ° μν¨μ΄λ€.
νΈλμμ (transaction) νλ‘λμ
- μΉ΄νμΉ΄ νΈλμμ νλ‘λμλ λ€μμ νν°μ μ λ°μ΄ν°λ₯Ό μ μ₯ν κ²½μ°, λͺ¨λ λ°μ΄ν°μ λν΄ λμΌν μμμ± (atomic) μ λ§μ‘±νκΈ° μν΄ μ¬μ©
- μ΄ μλ―Έλ, λ€μμ λ°μ΄ν°λ₯Ό λμΌ νΈλμμ μΌλ‘ λ¬Άμ, μ 체 λ°μ΄ν°λ₯Ό μ²λ¦¬νκ±°λ, μ²λ¦¬νμ§ μλλ‘ νλ κ²μ
- 컨μλ¨Έλ κΈ°λ³Έμ μΌλ‘ νλ‘λμκ° λ³΄λ΄λ λ°μ΄ν°λ₯Ό νν°μ μ μμ΄λ λλ‘ λͺ¨λ κ°μ Έκ°μ μ²λ¦¬ν¨.
- νΈλμμ μΌλ‘ λ¬ΆμΈ λ°μ΄ν°λ₯Ό κ°μ Έκ° λλ λ€λ₯΄κ² λμνλλ‘ μ€μ κ°λ₯
- νΈλμμ νλ‘λμλ₯Ό μ¬μ©νλ €λ©΄ enable.idempotence = true μ€μ
- transactional.id λ₯Ό μμ string κ°μΌλ‘ μ μ
- 컨μλ¨Έμ isolation.level μ read_committed λ‘ μ€μ νλ©΄, νλ‘λμμ 컨μλ¨Έλ νΈλμμ μ²λ¦¬ λ λ°μ΄ν°λ§ μ°κ³ μ½λλ€.
- νΈλμμ μ νν°μ μ λ μ½λλ‘ κ΅¬λΆ λ¨.
- νΈλμμ νλ‘λμλ μ¬μ©μκ° λ³΄λΈ λ°μ΄ν°λ₯Ό λ μ½λλ‘ νν°μ μ μ μ₯
- νΈλμμ μ μμκ³Ό λμ νννλ λ μ½λλ₯Ό ν κ° λ 보λ.
- νΈλμμ 컨μλ¨Έλ νν°μ μ μ μ₯λ νΈλμμ λ μ½λλ₯Ό λ³΄κ³ , μλ£ λ¨μ νμΈ ν λ°μ΄ν°λ₯Ό κ°μ Έκ°λ€.
- λ§μ½ λ°μ΄ν°κ° μ‘΄μ¬νκ³ νΈλμμ λ μ½λκ° μμΌλ©΄, μλ£λμ§ μμμμΌλ‘ νλ¨, λ°μ΄ν°λ₯Ό κ°μ Έκ°μ§ μμ!
![](https://user-images.githubusercontent.com/89288109/230776287-21ab3266-7011-4582-93c4-b9ee1e6c4b0a.png)
λ°μν