[νμ΅ ν μ€νΈλ‘ λ°°μ보λ kafka] 1. μΉ΄νμΉ΄ ν΅μ¬ λΉ λ₯΄κ² νμ΄λ³΄κ³ μλ체νκΈ°
ν΄λΉ μ리μ¦μμ μ 곡νλ λͺ¨λ μμ€μ½λλ github repository μμ μ 곡λ©λλ€. μμΈν μ½λμ ν μ€νΈ μΌμ΄μ€λ github repository μμ νμΈν΄μ£ΌμΈμ.
μ΄λ² [νμ΅ ν μ€νΈλ‘ λ°°μ보λ kafka] μ리μ¦λ μλ μμλλ‘ μ±ν°κ° ꡬμ±λκ³ , μλ¦¬μ¦ μΈλ‘ kafka κ΄λ ¨νμ¬ λμ± λ§μ νμ΅ μ 보λ kafka μ¬ν μΈμ μμ νμΈν μ μμ΅λλ€.
μλ¦¬μ¦ λͺ©μ°¨
- μ리μ¦λ₯Ό μμνλ©°
- kafka λΉ λ₯΄κ² νμ΄λ³΄κ³ μλ체νκΈ° <-- νμ¬ κΈ
- kafka 컨μ κ³Ό μ©μ΄ μ 리
- νμ΅ν μ€νΈ μ€λΉνκΈ°
- νμ΅ ν μ€νΈλ‘ kafka producer μμ보기
- νμ΅ ν μ€νΈλ‘ kafka consumer μμ보기
- νμ΅ ν μ€νΈλ‘ partitioning μμ보기
- νμ΅ ν μ€νΈλ‘ consumer group κ³Ό rebalancing μμ보기
νμ΅μ λ¨κ³λ³ μμλ‘ λͺ©μ°¨κ° ꡬμ±λμ΄μμΌλ―λ‘ μ νλμ΄μΌ νλ μ±ν°κ° μ‘΄μ¬ν©λλ€
μ΄λ² μ±ν°λ μ리μ¦μ μμμ΄λ©° μΉ΄νμΉ΄μ λν΄ μ΄μΌκΈ°νλ 첫λ²μ§Έ μκ°μ΄λ€.
μ΄λ²μλ λΉ λ₯΄κ² μΉ΄νμΉ΄μ 컨μ κ³Ό λ΄μ©λ€μ νμ΄λ³Ό μμ μ΄λ€.
μ΄λ² μκ°μ λͺ©νλ μΉ΄νμΉ΄λ₯Ό μ¬μ©νλ€λ©΄ μμμΌν λ΄μ©λ€μ ν νμ΄μ§μμ λλ΄λ κ²μ λͺ©νλ‘ νλ€.
μ΄λ² μκ°μ μ΄μΌκΈ°λ μ΄λκ°μ μλμ² ν μ μλλ‘ νλκ²μ΄ λͺ©νλ€. λΆλ‘ λλμΌλ‘ λ΄μ£Όλ©΄ μ’μκ² κ°κ³ λΉμ₯ νμ΅μ μνλ€λ©΄ λμ΄κ°λ μ’λ€
kafka κ° μ νμν κΉ?
μΉ΄νμΉ΄κ° λ¬΄μμΈμ§ ChatGPT μκ² λ¬Όμ΄λ³΄λ©΄ λ€μκ³Ό κ°μ λ§μ νλ€
μ΄ λ§μ λΉμ μ΄ μΉ΄νμΉ΄λ₯Ό λ°°μ°κΈ° μν΄μ μ΄ κΈμ μ°Ύμ λ€μ΄μ€κΈ° μ λΆν° μ΅ν λ€μ΄μμ λ§μ΄λ€.
μ€μκ° λ°μ΄ν° μ€νΈλ¦¬λ° μ²λ¦¬
λΌκ³ νννλλ°, μΌλ°μ μΌλ‘ μΌκ΄ μμ
μ μ§μνλ λ°°μΉ μ²λ¦¬μ λ°λλλ κ°λ
μ΄λ€.
νλ μν€ν μ²μ νλ¦μ λ¨μΌ μλ² μμλ§μΌλ‘ 볡μ‘ν΄μ§ μλΉμ€λ₯Ό μ§ν±νκΈ° μ΄λ ΅λ€.
κ·Έλμ μΌλ°μ μΌλ‘ μ¬λ¬ μμ(μλ², μ»΄ν¨ν μμ§)μ λΆμ°μμΌ κ°κ°μ κ³ λννλ λ°©μ μΌλͺ λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²λ₯Ό μ μ©νλ κ³³μ΄ λ§μμ‘κ³ μ±κ³΅ μ¬λ‘κ° λ§μμ‘λ€.
λΆμ°λ μλ²κ°μ λ°μνλ μ΄λ²€νΈλ λ‘κ·Έ λ°μ΄ν°, μΌλͺ μ€νΈλ¦¬λ° λ°μ΄ν°λΌκ³ λΆλ¦¬λ κ²λ€μ μ€μκ°μΌλ‘ μ²λ¦¬ν΄μΌνλ μꡬμ¬νμ΄ μ μ λμ΄λκ² λμλλ°, μ΄μ λ°ν΄ κΈ°μ‘΄μ μν€ν μ²μμλ μ΄λ° μ€μκ° μ€νΈλ¦¬λ° λ°μ΄ν°μ λν μ²λ¦¬κ° μ½μ§ μμλ€.
μμ κ·Έλ¦Όμ 볡μ‘ν νλ μΉ μν€ν μ²λ₯Ό μ 보μ¬μ€λ€.
μ κ·Έλ¦Όμμλ μ μ μλ― νλμ μ±/μλΉμ€μμ λ°μν λ°μ΄ν°λ€μ΄ (μΌλͺ μ€νΈλ¦¬λ° λ°μ΄ν°) μμ€ν μ λ°μ κ±Έμ³μ μ¬μ©λλκ²μ λ³Ό μ μλ€.
μ΄λ° 볡μ‘ν μν€ν μ³μμ λ§μ μ¬λλ€μ λ€μ 3κ°μ§μ νΌλ‘λ₯Ό λκΌλ€
- κ±°μ§λ λ°μ΄ν°
- μ€μκ° νΈλμμ μ μν μ±λ₯ μ ν
- μ€μνμ§ λͺ»ν λ©μμ§ μμ€ν μ μ±λ₯
νΌλ‘κ° 1. κ±°μ§λ λ°μ΄ν°
μμ 볡μ‘ν μν€ν μ²λ₯Ό μ 보면 user side μμ λ°μν λ°μ΄ν°κ° μ¬λ¬ μμ€ν μ»΄ν¬λνΈλ₯Ό κ±°μ³μ μ¬κ°κ³΅λλ κ²μ λ³Ό μ μλ€.
μ΄λ¬ν μν©μμ λ©μμ§ μμ²΄κ° μ μ λ³Έλμ μλ―Έλ₯Ό μκ²λκ³ μμ€ν μ΄κ³³ μ κ³³μμ μλ‘ λ€λ₯Έ μ 보λ‘μ μ¬μ©λλ κ²μ΄λ€.
μκ°μ νλ¦μ λ°λΌ λͺλͺμ λ°μ΄ν°μ λ³Έμ°μ μλ―Έλ₯Ό 보쑴νκ³ μ¦λͺ νλ 무μΈκ°κ° νμνλ€κ³ μ£Όμ₯νλ€
μ°λ¦¬λ μ΄λ₯Ό Single Source of Truth
, λ¨μΌ μ§μ€ 곡κΈμ μ΄λΌκ³ λΆλ₯΄λλ°, κ²°κ΅ λ¨μΌμ§μ€κ³΅κΈμμ μν μ μνν λκ΅°κ°κ° νμνλ€.
νΌλ‘κ° 2. μ€μκ° νΈλμμ μ μν μ±λ₯ μ ν
μμν κ³Όμ μμ μ λ°μ΄νΈ μ°μ°μ μμ νκ² μννκΈ° μν΄μ μΌλ°μ μΌλ‘ hold and wait λ°©μμ μ¬μ©νλ€.
λλΆλΆμ 볡μ‘ν λΉμ¦λμ€ μν©μ νΉμ λ°μ΄ν°μ λν μ μ μ κ·Έ λ°μ΄ν°λ₯Ό μνλ λ€λ₯Έ κ²½μμλ€μ λκΈ°λ‘ μμ μ±μ 보μ₯νλ€.
μ΄ κ³Όμ μμ λκΈ°μκ°μ΄ λμ΄λκ² λλ©° κ·Έμ λν μ¬νλ‘ μλΉμ€ μλ΅ μκ°μ μ νκ° λ°μνμ¬ μ¬μ©μμκ² λΆνΈν κ²½νμ μ 곡νκ² λμλ€.
μ΄λ¬ν μν©μ μ€μκ° νΈλμμ (OLTP, OnLine Transaction Process) μ΄ λκΈ°μ μΌλ‘ λ°μνκΈ° λλ¬Έμ λ¬Έμ κ° λλ κ²μ΄λ€.
λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄μλ λκΈ° λ°©μμ νΈλμμ μ μμ κ³ λΉλκΈ° λ°©μμ μ²λ¦¬ νλ‘μΈμ€λ₯Ό μ§μνκΈ° μν΄μ λ©μμ§ μΈνλΌκ° νμνκ² λμλ€.
νΌλ‘κ° 3. μ€μνμ§ λͺ»ν λ©μμ§ μμ€ν μ μ±λ₯
λ©μμ§ μΈνλΌλ μμ λκΈ° λ°©μμ νΈλμμ μ νλ₯Ό ννΌν μ μλ μ’μ κΈ°μ μ΄λ€.
μ΄λ¬ν λ©μμ§ μΈνλΌλ λ°μ΄ν° μνΈμμ©μ μν μ»΄ν¬λνΈκ° μ§μ μ°κ²°μ νλκ²μ΄ μλλΌ μ€κ°μ μμΉν message exchange κ° μ€μ λ©μμ§λ₯Ό κ΅νν΄μ£Όλ μν μ μννλ€.
λ©μμ§ μμ€ν λ΄λΆμ exchanger λ€μ μμ€ν λ΄μμ ν΅μ μ΄λΌλ μ€μν μν μ μννκΈ° λλ¬Έμ μ λ’°μ±μ μ§μ€νμ¬ μ€κ³λμλ€.
κ²°κ΅ μ λ’°μ±μ μ§μ€νλ€λ³΄λ μ±λ₯μ λν΄μλ ν° κ΄μ¬μ¬κ° μλμλλ°, λ©μμ§ μΈνλΌμ λν μ± μμ΄ μ»€μ§λ©° λΆνκ° λ§μμ Έ κ²°κ΅ μ’μ§ μμ μ¬μ© κ²½νμ μ¬μ©μμκ² μ 곡νμλ€.
μ΄ μν©μμ λ±μ₯ν μΉ΄νμΉ΄
볡μ‘ν΄μ§ νλ μΉ μν€ν
μ²λ₯Ό ν΄κ²°νκΈ° μν΄ linkedin μμλ Jay Kreps μ μ¬λ¬ μμ§λμ΄λ€μ νλλ‘ μ¬λ΄μμ μ¬μ©ν μ€μ μ§μ€ν λ©μμ§ μΈνλΌμΈ kafka
λ₯Ό κ°λ°νμλ€.
κ·Έλ¦¬κ³ μμ λ§ν 3κ°μ§μ λ¬Έμ λ₯Ό λ©μ§κ² ν΄κ²°νλ©° linkedin μ ν΅μ¬ infrastructure λ‘ μ리μ‘κ² λμκ³ μμ μν€ν μ²λ₯Ό λ€μκ³Ό κ°μ ννλ‘ κ°μννκ² λμλ€κ³ νλ€
μΉ΄νμΉ΄κ° λ€λ₯Έ λ©μμ§ μΈνλΌμ μ°¨λ³μ μ κ°μ§λ©° νμ‘΄νλ μ΅κ°μ λ°μ΄ν° νλ«νΌ μΈνλΌλ‘ μ리μ‘μλ€.
κ·Έ νΉμ±μ ν λ² μ΄ν΄λ³΄μ.
log based architecture
μΉ΄νμΉ΄λ₯Ό μ€λͺ νκΈ° μν΄ κ°μ₯ μ ν©ν λ¨μ΄λ λ‘κ·Έ μμ€ν μ΄λ€.
λ‘κ·Έλ append only μ seeking by offset μ΄λΌλ νΉμ±μ΄ μλλ°, μΉ΄νμΉ΄ μμ μ΄λ²€νΈ λ©μμ§λ€μ λ‘κ·Έλ‘ μ·¨κΈνλ€.
μΉ΄νμΉ΄λ λ‘κ·Έ μ§ν₯ μμ€ν μ΄κΈ° λλ¬Έμ νΉμ μμ μ λ°μν λ‘κ·Έλ₯Ό λ³κ²½νκ±°λ μ€κ° μ½μ μ μ§μνμ§ μλλ€.
μΉ΄νμΉ΄λ νλ°μ± λ©λͺ¨λ¦¬μλ§ μμλ‘ μ μ₯νμ¬ νΉμ ν΄λΌμ΄μΈνΈκ° μλΉνκ²λλ©΄ μ¬λΌμ§λλ‘ μ€κ³λ λ€λ₯Έ λ©μμ§ μΈνλΌμ λ€λ₯΄κ², λ©μμ§λ₯Ό μ λΆ μ μ₯νλ€
λ©μμ§λ₯Ό μ λΆ μ μ₯νλ νΉμ±λμ μΆν 컨μλ¨Έ ννΈμμ μ΄μΌκΈ°νκ² μ§λ§ μΉ΄νμΉ΄λ₯Ό μ¬μ©νλ€λ©΄ λ©μμ§λ₯Ό μΈμ λ μ§ λ€μ, μ΄λ μμ μ΄λ μ½μ΄μ¬ μ μλ€.
high availability & high scalability
μΉ΄νμΉ΄λ μΌλ°μ μΌλ‘ zookeeper λΌλ λΆμ° μ½λλ€μ΄ν°μ ν¨κ» λμνλ€.
λΆμ°λμ΄μλ μΉ΄νμΉ΄ μΈμ€ν΄μ€λ€μ ν΄λ¬μ€ν°λ§νλ κ²μ κΈ°μ‘°λ‘ νκΈ° λλ¬Έμ μ΄ νΉμ±μ νμ©νμ¬ zero downtime μ μ§μνλ scaling μ΄ κ°λ₯νλ€.
λν μΉ΄νμΉ΄λ νλμ λ€λ₯Έ λ©μμ§ μΈνλΌμ μ₯μ λ€κ³Ό λ§μ°¬κ°μ§λ‘ producer μ consumer κ° λͺ νν λΆλ¦¬λμ΄μλ€.
κ²°κ΅ κ³Όκ±° messaging infra μμ λ³Ό μ μλ κ³Όμ€ν μΌμ μ²λ¦¬νλ exchanger λ³΄λ€ λΉ λ₯Έ μ±λ₯μ μ 곡νλ€.