π Kafka
μ± 'μνμΉ μΉ΄νμΉ΄ μ ν리μΌμ΄μ νλ‘κ·Έλλ° with μλ° - μ΅μμ μ§μ'μ 곡λΆνλ©° μ 리νμμ΅λλ€.
1. Kafka
1.1 Kafka νμ λ°°κ²½
λΉμ μν©
2011λ
λΉμ, λ¨λ°©ν₯ ν΅μ μ ν΅ν΄ μμ€ μ ν리μΌμ΄μ
μμ νκΉ μ ν리μΌμ΄μ
μΌλ‘ μ°λνλ μμ€μ½λλ₯Ό μμ±νλ μμΌλ‘ λ°μ΄ν° μμ§ λ° λΆλ°° μν€ν
μ²λ₯Ό μ΄μνλ€.
μ΄λ¬ν ꡬ쑰λ μν€ν
μ²κ° κ±°λν΄μ§κ³ , μμ€ μ ν리μΌμ΄μ
κ³Ό νκΉ μ ν리μΌμ΄μ
μ μ°κ²°νλ νμ΄νλΌμΈ κ°μκ° λ§μμ§λ©΄μ μμ€λ²μ /λ²μ κ΄λ¦¬ μ΄μκ° κ·Έλλ‘ μ λ¬ λμλ€.
νμ
λ§ν¬λμΈ λ°μ΄ν°νμ μ΄λ¬ν μν©μμ μ κ· μμ€ν
μΈ Kafkaλ₯Ό λ§λ€μλ€. Kafkaλ ν κ³³μ λͺ¨μ μ²λ¦¬ν μ μλλ‘ μ€μ μ§μ€ννμ¬ λ°μ΄ν° μ€νΈλ¦Όμ ν κ³³μμ μ€μκ°μΌλ‘ κ΄λ¦¬ν μ μκ² λμλ€.
kafkaλ₯΄ μ€μμ λ°°μΉν¨μΌλ‘μ¨ μμ€ μ ν리μΌμ΄μ
κ³Ό νκΉ μ ν리μΌμ΄μ
μ¬μ΄μ μμ‘΄λλ₯Ό μ΅μν
νμ¬ μ»€νλ§μ μν
νμλ€.
1.2 Kafka νΉμ§
λμ μ²λ¦¬λ, νμ₯μ±, μμμ±, κ³ κ°μ©μ± νΉμ§μ κ°μ§ μΉ΄νμΉ΄λ λ°μ΄ν° νμ΄νλΌμΈμ μμ νκ³ νμ₯μ± λκ² μ΄μν μ μλλ‘ μ€κ³λμλ€.
λμ μ²λ¦¬λ
- μΉ΄νμΉ΄λ νλ‘λμκ° λΈλ‘μ»€λ‘ λ°μ΄ν°λ₯Ό 보λΌλμ 컨μλ¨Έκ° λΈλ‘컀λ‘λΆν° λ°μ΄ν°λ₯Ό λ°μ λ λͺ¨λ
λ¬Άμ΄μ μ μ‘
νλ€. μ΄λ λ€νΈμν¬ ν΅μ νμλ₯Ό μ΅μνμΌλ‘ μ€μ΄κ³ , λ§μ μμ λ°μ΄ν°λ₯Ό λ¬Άμλ¨μλ‘ μ²λ¦¬νλλ°°μΉ
λ λΉ λ₯΄κ² μ²λ¦¬ν μ μλ€. - νν°μ
λ¨μλ₯Ό ν΅ν΄ λμΌ λͺ©μ μ λ°μ΄ν°λ₯Ό
μ¬λ¬ νν°μ μ λΆλ°°
νκ³ λ°μ΄ν°λ₯Όλ³λ ¬ μ²λ¦¬
ν μ μλ€.
- μΉ΄νμΉ΄λ νλ‘λμκ° λΈλ‘μ»€λ‘ λ°μ΄ν°λ₯Ό 보λΌλμ 컨μλ¨Έκ° λΈλ‘컀λ‘λΆν° λ°μ΄ν°λ₯Ό λ°μ λ λͺ¨λ
νμ₯μ±
- input λ°μ΄ν°μ μμ μμΈ‘νκΈ° νλ κ°λ³μ μΈ νκ²½μμ
μμ μ μΌλ‘ νμ₯ κ°λ₯
νλ€. λ°μ΄ν°κ° λ§μμ§λ©΄ λΈλ‘컀 κ°μλ₯Ό λλ €μ€μΌμΌ μμ(scale-out)
νκ³ , λ°μ΄ν°κ° μ μ΄μ§λ©΄ λΈλ‘컀 κ°μλ₯Ό μ€μ¬μ€μΌμΌ μΈ(scale-in)
ν μ μλ€.
- input λ°μ΄ν°μ μμ μμΈ‘νκΈ° νλ κ°λ³μ μΈ νκ²½μμ
μμμ±
- μΉ΄νμΉ΄λ λ€λ₯Έ λ©μμ§ νλ«νΌκ³Ό λ€λ₯΄κ² μ μ‘λ°μ λ°μ΄ν°λ₯Ό λ©λͺ¨λ¦¬κ° μλ
νμΌ μμ€ν μ μ μ₯
νλ€. μΉ΄νμΉ΄λ μ΄μ체μ μμ νμΌ I/O μ±λ₯ ν₯μμ μν΄νμ΄μ§ μΊμ
μμμ λ©λͺ¨λ¦¬μ λ°λ‘ μμ±νμ¬ μ¬μ©νλ€. - λμ€ν¬ κΈ°λ°μ νμΌμμ€ν
μ νμ©ν λλΆμ λΈλ‘μ»€κ° μ₯μ λ°μμΌλ‘ κΈμμ€λ½κ² μ’
λ£λμ΄λ
νλ‘μΈμ€λ₯Ό μ¬μμ
νμ¬ μμ νκ²λ°μ΄ν°λ₯Ό λ€μ μ²λ¦¬
ν μ μλ€.
- μΉ΄νμΉ΄λ λ€λ₯Έ λ©μμ§ νλ«νΌκ³Ό λ€λ₯΄κ² μ μ‘λ°μ λ°μ΄ν°λ₯Ό λ©λͺ¨λ¦¬κ° μλ
κ³ κ°μ©μ±
- 3κ° μ΄μμ μλ²λ‘ μ΄μλλ
μΉ΄νμΉ΄ ν΄λ¬μ€ν°
λ μΌλΆ μλ²μ μ₯μ κ° λ°μνλλΌλ무μ€λ¨
μΌλ‘ μμ νκ³ μ§μμ μΌλ‘ λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μλ€. - μΉ΄νμΉ΄λ ν΄λ¬μ€ν°λ
λ°μ΄ν° 볡μ (replication)
λ₯Ό ν΅ν΄ κ³ κ°μ©μ±μ νΉμ§μ κ°μ§λ€.
- 3κ° μ΄μμ μλ²λ‘ μ΄μλλ
μμμ±μ΄λ λ°μ΄ν°λ₯Ό μμ±ν νλ‘κ·Έλ¨μ΄ μ’
λ£λλλΌλ μ¬λΌμ§μ§ μμ λ°μ΄ν°μ νΉμ±μ μλ―Ένλ€.
νμ΄μ§ μΊμ λ©λͺ¨λ¦¬ μμμ μ¬μ©νμ¬ νλ² μ½μ νμΌ λ΄μ©μ λ©λͺ¨λ¦¬μ μ μ₯μμΌ°λ€κ° λ€μ μ¬μ©νκΈ° λλ¬Έμ, νμΌμμ€ν
μ λ°μ΄ν°λ₯Ό μ μ₯νλλΌλ μ²λ¦¬λμ΄ λλ€.
2. Kafka μ»΄ν¬λνΈ
2.2 μΉ΄νμΉ΄ λΈλ‘컀·ν΄λ¬μ€ν°·μ£Όν€νΌ
(1) μΉ΄νμΉ΄ λΈλ‘컀 (Broker)
μΉ΄νμΉ΄ λΈλ‘컀λ μΉ΄νμΉ΄ ν΄λΌμ΄μΈνΈκ³Ό λ°μ΄ν°λ₯Ό μ£Όκ³ λ°κΈ° μν΄ μ¬μ©λλ 주체μ΄μ,λ°μ΄ν°λ₯Ό λΆμ°μ μ₯
νμ¬ μ₯μ κ° λ°μνλλΌλ μμ νκ² μ¬μ©ν μ μλλ‘ λμμ£Όλ μ ν리μΌμ΄μ
μ΄λ€.νλμ μλ²
μλ νλμ μΉ΄νμΉ΄ λΈλ‘컀 νλ‘μΈμ€
κ° μ€νλλ€.
(2) μΉ΄νμΉ΄ ν΄λ¬μ€ν° (Cluster)
λΈλ‘컀 μλ² 1λλ‘λ μ΄μμ κ°λ₯νλ, λ°μ΄ν°λ₯Ό μμ νκ² λ³΄κ΄νκ³ μ²λ¦¬νκΈ° μν΄ 3λ μ΄μμ λΈλ‘컀 μλ²
λ₯Ό 1κ°μ ν΄λ¬μ€ν°
λ‘ λ¬Άμ΄μ μ΄μνλ€.
μΉ΄νμΉ΄ ν΄λ¬μ€ν°λ‘ λ¬Άμ λΈλ‘컀λ€μ νλ‘λμκ° λ³΄λΈ λ°μ΄ν°λ₯Ό μμ νκ² μ μ₯νκ³ λ³΅μ
νλ μν μ μννλ€.
(3) λ°μ΄ν° μ μ‘κ³Ό μ μ₯
νλ‘λμ
λ‘ λΆν° λ°μ΄ν°λ₯Ό μ λ¬λ°μΌλ©΄ λΈλ‘컀λ νλ‘λμκ° μμ²ν ν ν½μ νν°μ
μ λ°μ΄ν°λ₯Ό μ μ₯νκ³ , 컨μλ¨Έ
κ° λ°μ΄ν°λ₯Ό μμ²νλ©΄ νν°μ
μ μ μ₯λ λ°μ΄ν°λ₯Ό μ λ¬νλ€.
λ°μ΄ν° μ μ₯μ νμΌμμ€ν
μ μ μ₯
λλ©°,νμ΄μ§ μΊμ
λ₯Ό μ¬μ©νμ¬ λμ€ν¬ μ
μΆλ ₯ μλλ₯Ό λμ¬μ μμ λ¬Έμ λ₯Ό ν΄κ²°νλ€.
(4) λ°μ΄ν° 볡μ , μ±ν¬
λ°μ΄ν° 볡μ (replication)
λ μΉ΄νμΉ΄λ₯Ό μ₯μ νμ© μμ€ν
(fault tolerant system)
μΌλ‘ λμνλλ‘ νλ μλλ ₯μ΄λ€.
μΉ΄νμΉ΄ 볡μ λ νν°μ
λ¨μλ‘ μ΄λ€μ§λ€.
μΈλΆ μ€λͺ
- ν ν½μ μμ±ν λ νν°μ 볡μ κ°μλ₯Ό μ€μ λκ³ , μ§μ μ΅μ μ μ ννκ±°λ λΈλ‘컀μ κΈ°λ³Έ μ€μ μΌλ‘ μ€μ λλ€.
- 볡μ κ°μ μ΅μκ°μ 1(볡μ μμ)μ΄κ³ , μ΅λκ°μ λΈλ‘컀 κ°μμ΄λ€.
- 볡μ λ νν°μ
μ
리λ(leader)
μνλ‘μ(follower)
λ‘ κ΅¬μ±λλ€.- 리λ : νλ‘λμμ 컨μλ¨Έμ μ§μ ν΅μ νλ νν°μ
- νλ‘μ : λλ¨Έμ§ λ³΅μ λ°μ΄ν°λ₯Ό κ°κ³ μκ³ μλ νν°μ
- νλ‘μ νν°μ
λ€μ 리λ νν°μ
μ
μ€νμ
μ νμΈνμ¬ νμ¬ μμ μ΄ κ°μ§κ³ μλ μ€νμ κ³Ό μ°¨μ΄λλ κ²½μ° λ¦¬λ νν°μ μΌλ‘λΆν° λ°μ΄ν°λ₯Ό κ°μ Έμμ μμ μ νν°μ μ μ μ₯νλ€. ⇒볡μ (replication)
- λΈλ‘컀μ μ₯μ κ° λ°μνλ©΄, ν΄λΉ λΈλ‘컀μ μλ 리λ νν°μ
μ μ¬μ©ν μ μκΈ° λλ¬Έμ νλ‘μ νν°μ
μ€ νλκ°
리λ νν°μ μ§μλ₯Ό λ겨λ°λλ€.
- μ΄μ μ λ°μ΄ν° μ’
λ₯λ§λ€ λ€λ₯Έ 볡μ κ°μλ₯Ό μ€μ νκ³ , μν©μ λ°λΌ ν ν½λ§λ€ 볡μ κ°μλ₯Ό λ€λ₯΄κ² μ€μ νμ¬ μ΄μνλ€.
- λ°μ΄ν°κ° μΌλΆ μ μ€λλ 무κ΄νκ³ λ°μ΄ν° μ²λ¦¬ μλκ° μ€μνλ€λ©΄
1 or 2
λ‘ μ€μ νλ€. - μ€μ μ 보 λ± μ μ€μ΄ μ λλ λ°μ΄ν°μ κ²½μ° λ³΅μ κ°μλ₯Ό
3
μΌλ‘ μ€μ νλ€.
- λ°μ΄ν°κ° μΌλΆ μ μ€λλ 무κ΄νκ³ λ°μ΄ν° μ²λ¦¬ μλκ° μ€μνλ€λ©΄
(5) 컨νΈλ‘€λ¬
ν΄λ¬μ€ν°
μ λ€μ λΈλ‘컀 μ€ ν λ
κ° μ»¨νΈλ‘€λ¬ μν μ νλ€.
컨νΈλ‘€λ¬λ λ€λ₯Έ λΈλ‘컀λ€μ μνλ₯Ό 체ν¬
νκ³ λΈλ‘μ»€κ° ν΄λ¬μ€ν°μμ λΉ μ§λ κ²½μ° ν΄λΉ λΈλ‘컀μ μ‘΄μ¬νλ 리λ νν°μ
μ μ¬λΆλ°°
νλ€.
λ§μ½ 컨νΈλ‘€λ¬ μν μ νλ λΈλ‘컀μ μ₯μ κ° μκΈ°λ©΄ λ€λ₯Έ λΈλ‘μ»€κ° μ»¨νΈλ‘€λ¬ μν μ νλ€.
(6) λ°μ΄ν° μμ
μΉ΄νμΉ΄λ λ€λ₯Έ λ©μμ§ νλ«νΌκ³Ό λ€λ₯΄κ² 컨μλ¨Έκ° λ°μ΄ν°λ₯Ό κ°μ Έκ°λλΌλ ν ν½μ λ°μ΄ν°λ μμ λμ§ μμΌλ©°, 컨μλ¨Έλ νλ‘λμκ° λ°μ΄ν° μμ λ₯Ό μμ²ν μ μλ€.
μ€μ§ λΈλ‘컀
λ§μ΄ λ°μ΄ν°λ₯Ό μμ ν μ μλ€.
λ°μ΄ν° μμ λ νμΌ λ¨μλ‘ μ΄λ€μ§λλ°, μ΄ λ¨μλ₯Ό λ‘κ·Έ μΈκ·Έλ¨ΌνΈ(log segment)
λΌκ³ λΆλ₯Έλ€. μΈκ·Έλ¨ΌνΈμλ λ€μμ λ°μ΄ν°κ° λ€μ΄μκΈ° λλ¬Έμ νΉμ λ°μ΄ν°λ₯Ό μμ ν μ μλ€.
μΈκ·Έλ¨ΌνΈλ λ°μ΄ν°κ° μμ΄λ λμ νμΌμμ€ν
μΌλ‘ μ΄λ €μμ§λ§, μΉ΄νμΉ΄ λΈλ‘컀μ log.segment.bytes
λλ log.segment.ms
μ΅μ
μ κ°μ΄ μ€μ λλ©΄ μΈκ·Έλ¨ΌνΈ νμΌμ΄ λ«νλ€.
λ«ν μΈκ·Έλ¨ΌνΈ νμΌμ log.retention.bytes
λλ log.retention.ms
μ΅μ
μ μ€μ κ°μ΄ λμΌλ©΄ μμ λλ€.
- μΈκ·Έλ¨ΌνΈκ° λ«νλ κΈ°λ³Έκ°μ 1GB μ©λμ λλ¬νμ λμΈλ° κ°κ²©μ μ€μ΄κ³ μΆμΌλ©΄ μμ μ©λμΌλ‘ μ€μ νλ©΄ λλ€. λ¨, λ°μ΄ν°λ₯Ό μ μ₯νλλμ μ¦μ μΈκ·Έλ¨ΌνΈ μ¬λ«νμ λΆνλ₯Ό λ°μν μ μμΌλ―λ‘ μ£Όμν΄μΌνλ€.
- λ«ν μΈκ·Έλ¨ΌνΈ νμΌμ 체ν¬νλ κ°κ²©μ λΈλ‘컀 μ΅μ
μ log.retention.check.interval.ms
μ λ°λ₯Έλ€.
(7) 컨μλ¨Έ μ€νμ μ μ₯
컨μλ¨Έ κ·Έλ£Ή
μ ν ν½μ΄ νΉμ νν°μ
μΌλ‘λΆν° λ°μ΄ν°λ₯Ό κ°μ Έμ¬κ±° μ²λ¦¬νκ³ μ΄ νν°μ
μ μ΄λ λ μ½λκΉμ§ κ°μ Έκ°λμ§
νμΈνκΈ° μν΄ μ€νμ
μ 컀λ°νλ€.
컀λ°ν μ€νμ
μ _consumer_offsets
ν ν½μ μ μ₯νλ€.
(8) μ½λλ€μ΄ν°
ν΄λ¬μ€ν°
μ λ€μ ν¬λ‘컀 μ€ ν λ
λ μ½λλ€μ΄μ
μν μ μννλ€.
μ½λλ€μ΄ν°λ 컨μλ¨Έ κ·Έλ£Ήμ μνλ₯Ό 체ν¬
νκ³ νν°μ
μ 컨μλ¨Έμ 맀μΉλλλ‘ λΆλ°°
νλ μν μ νλ€.
리벨λ°μ€(rebalance)
: νν°μ
μ 컨μλ¨Έλ‘ μ¬ν λΉνλ κ³Όμ . 컨μλ¨Έκ° μ»¨μλ¨Έ κ·Έλ£Ήμμ λΉ μ§λ©΄, 맀μΉλμ§ μμ νν°μ
μ μ μ λμνλ 컨μλ¨Έλ‘ ν λΉνμ¬ λμμμ΄ λ°μ΄ν°κ° μ²λ¦¬λλλ‘ λμμ€λ€.
(9) μ£Όν€νΌ (Zookeeper)
μ£Όν€νΌλ μΉ΄νμΉ΄μ λ©νλ°μ΄ν°λ₯Ό κ΄λ¦¬
νλλ° μ¬μ©λλ€. μ΄λ€ λ°μ΄ν°λ₯Ό μ μ₯νλμ§ νμΈν μ μκ³ , μμ±λ ν ν½ λ±λ νμΈ κ°λ₯νλ€.
μΉ΄νμΉ΄ ν΄λ¬μ€ν°λ‘ λ¬Άμ λΈλ‘컀λ€μ λμΌν κ²½λ‘μ μ£Όν€νΌ κ²½λ‘λ‘ μ μΈν΄μΌ κ°μ μΉ΄νμΉ΄ λΈλ‘컀 λ¬Άμμ΄ λλ€. λ§μ½ ν΄λ¬μ€ν°λ₯Ό μ¬λ¬κ°λ‘ μ΄μνλ€λ©΄ ν κ°μ μ£Όν€νΌμ λ€μμ μΉ΄νμΉ΄ ν΄λ¬μ€ν°λ₯Ό μ°κ²°ν΄μ μ¬μ©ν μλ μλ€.
'#οΈβ£ Data Engineering > Kafka' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Kafka] Kafka κ°λ κ³Ό ꡬμ±μμ λ° μ리 (0) | 2023.03.03 |
---|---|
[Kafka] Kafka ν΄λΌμ΄μΈνΈ (0) | 2023.02.13 |
[Kafka] ν ν½κ³Ό νν°μ , λ μ½λ (0) | 2023.02.13 |