-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add: π° [Chapter 08] βμ νν ν λ²β μλ―Έ ꡬ쑰
- Loading branch information
1 parent
1a9c6e9
commit 79d6aa1
Showing
1 changed file
with
138 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,138 @@ | ||
--- | ||
title: Chapter 08. βμ νν ν λ²β μλ―Έ ꡬ쑰 | ||
date: 2025-01-12 10:10:00 +0900 | ||
categories: [μΉ΄νμΉ΄ ν΅μ¬κ°μ΄λ] | ||
tags: [μΉ΄νμΉ΄ ν΅μ¬κ°μ΄λ] | ||
--- | ||
|
||
## **8.1 λ©±λ±μ νλ‘λμ β¨** | ||
|
||
### **8.1.1 λ©±λ±μ νλ‘λμλ π€** | ||
- λ©±λ±μ±μ λμΌν μμ μ **μ¬λ¬ λ² μ€νν΄λ κ²°κ³Όκ° λμΌν μμ **μ μλ―Έ | ||
- λ°μ΄ν°λ² μ΄μ€ μμ | ||
|
||
```sql | ||
-- λ©±λ±μ μ΄μ§ μμ (μ€νν λλ§λ€ κ²°κ³Όκ° λ¬λΌμ§) | ||
UPDATE t SET x = x + 1 WHERE y = 5; | ||
|
||
-- λ©±λ±μ μ (μ¬λ¬ λ² μ€νν΄λ κ²°κ³Όκ° κ°μ) | ||
UPDATE t SET x = 18 WHERE y = 5; | ||
``` | ||
|
||
- μΉ΄νμΉ΄μμ λ©μμ§ μ μ‘ μ λ€νΈμν¬ μ§μ°μ΄λ μ₯μ λ‘ μΈν΄ μ€λ³΅ λ©μμ§ λ°μ κ°λ₯ | ||
- νν°μ 리λ μ₯μ λ°μ μ΄ν, μλ‘μ΄ λ¦¬λλ‘ κ΅μ²΄λλ©΄ μ€λ³΅ λ©μμ§κ° μ μ₯λ κ°λ₯μ± μ‘΄μ¬ | ||
|
||
|
||
### **8.1.2 λ©±λ±μ νλ‘λμμ μλ μ리 βοΈ** | ||
|
||
- λ©μμ§μ **νλ‘λμ ID(PID)**μ **μνμ€ λλ²**λ₯Ό μΆκ°ν΄ λ©μμ§ κ³ μ μ± μλ³ | ||
- λΈλ‘컀λ κ° νν°μ μμ λ§μ§λ§ 5κ°μ λ©μμ§λ₯Ό μΆμ ν΄ μ€λ³΅ λ©μμ§ μ°¨λ¨ | ||
- μμλ³΄λ€ λμ μνμ€ λλ²κ° μμ λλ©΄ `out of order sequence number` μλ¬ λ°μ | ||
|
||
|
||
### **8.1.3 μ₯μ λ°μ μ μ²λ¦¬ λ°©λ² π¨** | ||
|
||
1. **νλ‘λμ μ¬μμ** | ||
- μ₯μ ν μλ‘μ΄ νλ‘λμ μμ± μ, μλ‘μ΄ PIDλ₯Ό ν λΉλ°μ κΈ°μ‘΄ λ©μμ§ μ€λ³΅ κ°μ§ λΆκ° | ||
2. **λΈλ‘컀 μ₯μ 볡ꡬ** | ||
- 리λ λ³κ²½ μ μλ‘μ΄ λ¦¬λκ° μ΄μ 리λμ μνμ€ μνλ₯Ό μ΄μ΄λ°μ μ€λ³΅ λ©μμ§ λ°©μ§ | ||
- μ’ λ£ μ μνλ₯Ό μ€λ μ·μΌλ‘ μ μ₯ν΄ λ³΅κ΅¬ μ νμ© | ||
|
||
|
||
### **8.1.4 λ©±λ±μ νλ‘λμ μ¬μ©λ² π** | ||
|
||
- `enable.idempotence=true`λ₯Ό μ€μ ν΄ νμ±ν | ||
- `acks=all`κ³Ό ν¨κ» μ¬μ© μ μ±λ₯ μ ν μμ | ||
- λ©μμ§ μμλ₯Ό μ μ§νλ©° μ€λ³΅ λ©μμ§λ₯Ό μ°¨λ¨ | ||
|
||
|
||
### **8.1.5 λ©±λ±μ νλ‘λμμ νκ³ β οΈ** | ||
|
||
- λ΄λΆ μ¬μλλ‘ λ°μν μ€λ³΅λ§ λ°©μ§ | ||
- μ ν리μΌμ΄μ μμ λμΌ λ©μμ§λ₯Ό `producer.send()` λ‘ μ¬λ¬ λ² νΈμΆνλ©΄ μ€λ³΅ λ°μ κ°λ₯ | ||
- λ€μ€ νλ‘λμ νκ²½μμ μ€λ³΅ κ°λ₯μ± | ||
- μ¬λ¬ νλ‘λμκ° λμΌ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ©΄ μ€λ³΅ λ©μμ§κ° λ°μν μ μμ | ||
|
||
|
||
## **8.2 νΈλμμ π** | ||
|
||
### **8.2.1 νΈλμμ λμ λ°°κ²½ ποΈ** | ||
|
||
- μΉ΄νμΉ΄μ μ€νΈλ¦Ό μ²λ¦¬ μ ν리μΌμ΄μ μμ **μ νν ν λ² μ²λ¦¬**λ₯Ό 보μ₯νκΈ° μν΄ λμ | ||
- μ λ ₯ λ μ½λμ μ²λ¦¬ν κ²°κ³Όλ₯Ό μΆλ ₯νλ©°, μ§κ³ λ° μ‘°μΈ μμ μμ λ°μ΄ν°μ μ νμ± λ³΄μ₯ | ||
|
||
|
||
### **8.2.2 νΈλμμ μ μ£Όμ κΈ°λ₯ π‘** | ||
|
||
- λ©μμ§ μ²λ¦¬μ μ€νμ 컀λ°μ μμμ μΌλ‘ μν | ||
- νΈλμμ μ€ν¨ μ λ©μμ§ μΆλ ₯κ³Ό μ€νμ 컀λ°μ λͺ¨λ μ€λ¨ | ||
- λμΌ `transactional.id`λ₯Ό κ°μ§ μ’λΉ μΈμ€ν΄μ€λ₯Ό μ°¨λ¨ν΄ λ©μμ§ μ€λ³΅ λ°©μ§ | ||
|
||
|
||
### **8.2.3 νΈλμμ μ΄ ν΄κ²°νλ λ¬Έμ β ** | ||
|
||
1. **μ ν리μΌμ΄μ μ₯μ λ‘ μΈν μ€λ³΅ μ²λ¦¬ λ°©μ§** | ||
- λ©μμ§ μΆλ ₯ ν μ€νμ μ»€λ° μ μ μ ν리μΌμ΄μ μ₯μ λ°μ μ μ€λ³΅ μ²λ¦¬ λ°©μ§ | ||
2. **μ’λΉ μ ν리μΌμ΄μ λ¬Έμ ν΄κ²°** | ||
- ννΈλΉνΈλ₯Ό μμ μ ν리μΌμ΄μ μ΄ μ¬νμ±νλμ΄ λμΌ λ©μμ§ μ²λ¦¬ μλλ₯Ό μ°¨λ¨ | ||
|
||
|
||
### **8.2.4 νΈλμμ μΌλ‘ ν΄κ²°ν μ μλ λ¬Έμ β** | ||
|
||
- μΈλΆ μμ€ν κ³Όμ μμ μ νΈλμμ μΌλ‘ μ²λ¦¬ λΆκ° (ex. μ΄λ©μΌ λ°μ‘, API νΈμΆ) | ||
- μΉ΄νμΉ΄ λ©μμ§λ₯Ό λ°μ΄ν°λ² μ΄μ€μ μ μ₯νλ μμ μ 보μ₯ λΆκ° | ||
- ν΄λ¬μ€ν° κ° λ°μ΄ν° 볡μ μμ μ νν ν λ² μ²λ¦¬λ 보μ₯λμ§ μμ | ||
|
||
|
||
### **8.2.5 νΈλμμ μ¬μ©λ² π οΈ** | ||
|
||
1. **νΈλμμ νμ±ν** | ||
- `enable.idempotence=true` μ€μ νμ | ||
- νΈλμμ ID(`transactional.id`) μ§μ νμ | ||
2. **μ½λ μ¬μ© νλ¦** | ||
- `beginTransaction()`: νΈλμμ μμ | ||
- `sendOffsetsToTransaction()`: μλΉν μ€νμ μ νΈλμμ μ ν¬ν¨ | ||
- `commitTransaction()`: λ©μμ§μ μ€νμ νμ | ||
- `abortTransaction()`: λ©μμ§μ μ€νμ λ‘€λ°± | ||
3. **μ£Όμ νΉμ§** | ||
- νλ‘λμ μ€ν¨ μ, νΈλμμ 볡ꡬ κ°λ₯ | ||
- 컨μλ¨Έ κ·Έλ£Ήμ μ νν ν λ² μ²λ¦¬(`exactly-once semantics`) 보μ₯ | ||
- λ¨μΌ νΈλμμ λ΄μμ λμΌν Topic-Partitionμ λν λ©μμ§ μμ 보μ₯ | ||
4. **μ£Όμμ¬ν** | ||
- νΈλμμ μ²λ¦¬ μκ° μ νμ΄ μμΌλ©° μ΄κ³Ό μ μ€λ₯ λ°μ | ||
|
||
|
||
### **8.2.6 νΈλμμ IDμ νμ± π** | ||
|
||
- **νΈλμμ ID** | ||
- νλ‘λμ μΈμ€ν΄μ€λ§λ€ κ³ μ νκ² μ€μ | ||
- νΈλμμ μνμ Epoch λ²νΈλ‘ μΈμ€ν΄μ€ μΆ©λ λ°©μ§ | ||
- λμΌν νΈλμμ IDλ₯Ό κ°μ§ μ΄μ μΈμ€ν΄μ€(μ’λΉ νλ‘λμ)λ μ°¨λ¨λ¨ | ||
- **νμ±(Fencing)** | ||
- Epoch λ²νΈλ₯Ό μ¦κ°μμΌ μ΄μ μΈμ μ μμ μ°¨λ¨ | ||
- μ₯μ 볡ꡬ μ€ νλ‘λμ μ€λ³΅ μ€νμ λ°©μ§ | ||
|
||
|
||
### **8.2.7 νΈλμμ μ μλμ리 π** | ||
|
||
1. **νΈλμμ μμ** | ||
- `beginTransaction()` νΈμΆλ‘ μν μ΄κΈ°ν | ||
- νΈλμμ IDλ‘ νν°μ κ³Ό νλ‘λμ μ°κ²° | ||
2. **νΈλμμ μ§ν** | ||
- λ©μμ§ κΈ°λ‘ μ κ° λ©μμ§μ νΈλμμ μ 보λ₯Ό ν¬ν¨ | ||
3. **νΈλμμ μ’ λ£** | ||
- `commitTransaction()` νΈμΆλ‘ λ©μμ§λ₯Ό νμ (μ»€λ° λ‘κ·Έμ λ°μ) | ||
- `abortTransaction()` νΈμΆ μ λ©μμ§λ₯Ό νκΈ° | ||
4. **νΈλμμ κ΄λ¦¬** | ||
- 컨νΈλ‘€λ¬μ μ½λλ€μ΄ν°κ° νΈλμμ μν λ° μ€νμ μ²λ¦¬ κ΄λ¦¬ | ||
|
||
|
||
## **8.3 νΈλμμ μ±λ₯ π** | ||
|
||
### **νλ‘λμ μΈ‘ μ±λ₯ β‘** | ||
- νΈλμμ μ΄κΈ°νμ μ»€λ° μμ²μ΄ λκΈ°μ μΌλ‘ μ²λ¦¬λΌ λ°μ΄ν° μ μ‘ μ§μ° κ°λ₯ | ||
- νΈλμμ λ΄ λ©μμ§ μκ° λ§μμλ‘ μ€λ²ν€λ κ°μ λ° μ²λ¦¬λ μ¦κ° | ||
|
||
### **컨μλ¨Έ μΈ‘ μ±λ₯ π** | ||
- `read_committed` λͺ¨λμμ μ΄λ¦° νΈλμμ λ©μμ§κ° λ°νλμ§ μμ μ§μ° λ°μ κ°λ₯ | ||
- λΈλ‘μ»€κ° μ΄λ¦° νΈλμμ λ©μμ§λ₯Ό λ°ννμ§ μμ μ²λ¦¬λμλ μν₯ μμ |