[νμ΅ ν μ€νΈλ‘ λ°°μ보λ kafka] 2. μΉ΄νμΉ΄ 컨μ λΉ λ₯΄κ² μμ보기
ν΄λΉ μ리μ¦μμ μ 곡νλ λͺ¨λ μμ€μ½λλ github repository μμ μ 곡λ©λλ€. μμΈν μ½λμ ν μ€νΈ μΌμ΄μ€λ github repository μμ νμΈν΄μ£ΌμΈμ.
μ΄λ² [νμ΅ ν μ€νΈλ‘ λ°°μ보λ kafka] μ리μ¦λ μλ μμλλ‘ μ±ν°κ° ꡬμ±λκ³ , μλ¦¬μ¦ μΈλ‘ kafka κ΄λ ¨νμ¬ λμ± λ§μ νμ΅ μ 보λ kafka μ¬ν μΈμ μμ νμΈν μ μμ΅λλ€.
μλ¦¬μ¦ λͺ©μ°¨
- μ리μ¦λ₯Ό μμνλ©°
- kafka λΉ λ₯΄κ² νμ΄λ³΄κ³ μλ체νκΈ°
- kafka 컨μ κ³Ό μ©μ΄ μ 리 <-- νμ¬ κΈ
- νμ΅ν μ€νΈ μ€λΉνκΈ°
- νμ΅ ν μ€νΈλ‘ kafka producer μμ보기
- νμ΅ ν μ€νΈλ‘ kafka consumer μμ보기
- νμ΅ ν μ€νΈλ‘ partitioning μμ보기
- νμ΅ ν μ€νΈλ‘ consumer group κ³Ό rebalancing μμ보기
νμ΅μ λ¨κ³λ³ μμλ‘ λͺ©μ°¨κ° ꡬμ±λμ΄μμΌλ―λ‘ μ νλμ΄μΌ νλ μ±ν°κ° μ‘΄μ¬ν©λλ€
μ΄λ² μ±ν°μμλ kafka μμ μ¬μ©λλ μ©μ΄μ λν΄μ μμ보λλ‘ νκ² λ€
μ€λμ λͺ©νλ μμ λͺ©νμ λμΌνκ² μ΄ κΈλ§ λ³΄κ³ λ μ΄λκ°μ μΉ΄νμΉ΄μ λν΄μ μλ체 ν μ μλλ‘ νλ κ²μ΄λ€.
μ΅λν ν΅μ¬λ§ μ νν ꡬμ±νλ € λ Έλ ₯νμμΌλ μ§§κ³ λΉ λ₯΄κ² μ§μ€ν΄μ μ½κ³ μ΄λκ°μ μλμ²νμ
μΉ΄νμΉ΄μ 6κ°μ§μ ν΅μ¬ μμ
μΉ΄νμΉ΄λ λ¬Έμ(Introduction of kafka's terminologyμμλ μ μ μλ―μ΄ ν¬κ² 6κ°μ§μ μ©μ΄λ₯Ό μ¬μ©νλ€.
- μΉ΄νμΉ΄μ ν΅μ¬ μλ², broker
- μΉ΄νμΉ΄μ λ°μ΄ν° μ μ₯ ν μ΄λΈ, topic
- μΉ΄νμΉ΄μ μ μ€νΈλ¦Ό ν΄λΌμ΄μΈνΈ, producer
- μΉ΄νμΉ΄μ λ€μ΄μ€νΈλ¦Ό ν΄λΌμ΄μΈνΈ, consumer
- μΉ΄νμΉ΄μ μ€μ§μ μΈ λ©μμ§ ν, partition
- μΉ΄νμΉ΄μ ν΅μ¬ μμ μμ, replication
μΉ΄νμΉ΄λ μμ 6κ°μ§ ꡬμ±μμλ₯Ό ν΅ν΄ λ©μμ§ μΈνλΌλ₯Ό TCP λ€νΈμν¬ μμμ μ 곡νλ€.
μ κ·Έλ¦Όμ μμ 6κ°μ§ ꡬμ±μμλ₯Ό ννν κ·Έλ¦Όμ΄λ€.
μμΈν μ€λͺ νκΈ° μ μ λ¨Όμ μμ½ν΄μ μ 리ν΄λ³΄κ² λ€. μ λ§ λ°μλ€λ©΄!! μ΄ μμ½λ§ λ³΄κ³ λμ΄κ°λ μ’λ€.
μ΄μ°¨νΌ μΆνμ μ°λ¦¬κ° νμ΅ν μ€νΈλ₯Ό μ§ννλ©° κ°κ°μ νλͺ©λ€μ λν΄μ λ μμΈν λ€λ£¨λλ‘ νκ³ μ§κΈ μκ°μ μμ΄μ―€μΌλ‘ μκ°νμ
- broker
- μΉ΄νμΉ΄ λΈλ‘컀, ν΅μ¬ ꡬμ±μμ
- μΉ΄νμΉ΄λ‘ λ€μ΄μ€λ μ΄λ²€νΈ λ°μ΄ν°μ μ€ν λ¦¬μ§ μλ²
- ν ν½, νν°μ , 볡μ λ±μ κ΄λ¦¬
- topic
- μ΄λ²€νΈμ μΉ΄ν κ³ λ¦¬
- μ΄λ²€νΈκ° μ μ₯λλ λ¨μ
- νλ‘λμμ 컨μλ¨Έκ° λ°λΌλ³΄λ κΈ°λ³Έμ μΈ λ¨μ
- producer
- ν ν½μ λ©μμ§λ₯Ό μμ°
- νΉμ νν°μ μλ μμ° κ°λ₯
- consumer
- ν ν½μ λ©μμ§λ₯Ό μλΉ
- νΉμ νν°μ μλ μλΉ κ°λ₯
- partition
- μΉ΄νμΉ΄ ν ν½μ μ‘΄μ¬νλ μ€μ λ©μμ§ μ μ₯μ
1. μΉ΄νμΉ΄μ ν΅μ¬ μλ², broker
Kafka μ broker λ μμ Message Oriented Middlewareκ³Ό Message Brokerμ μ°¨μ΄ λ° μ리 λΌλ κΈμμ μΈκΈνλ message broker μ λμΌν κ°λ μΌλ‘ message provider λ€.
μΉ΄νμΉ΄ λΈλ‘컀λΌκ³ λΆλ¦¬λ μ»΄ν¬λνΈλ νΉμ ν upstream producer λ‘ λΆν° λ°μνλ μ΄λ²€νΈ μ€νΈλ¦Όμ μ μ₯νλ μλ²μ΄λ€.
μΉ΄νμΉ΄ λΈλ‘컀λ μ΄λ²€νΈλ₯Ό μ μ₯νλ μ€ν λ¦¬μ§ λ μ΄μ΄ μλ²μΈλ°, ν΄λΉ μ리μ¦μ μμ ννΈ 1. μΉ΄νμΉ΄ ν΅μ¬ λΉ λ₯΄κ² νμ΄λ³΄κ³ μλ체νκΈ° μ΄μΌκΈ°νλ log based architecture λ₯Ό μν μ€μ λ°μ΄ν° μ€ν λ¦¬μ§ μμ§μ΄λΌκ³ 보면 λλ€.
μΉ΄νμΉ΄ λΈλ‘컀λ μ¬μ€μ μΉ΄νμΉ΄ μΈνλΌμ ν΅μ¬μ΄κ³ μ¬μ₯μ΄λΌκ³ ν μ μλ€.
μλμμ μ΄μΌκΈ°ν νν°μ κ³Ό 리ν리μΌμ΄μ λ€μ κ΄λ¦¬νκΈ°λ νλ©° producer μ consumer λ‘λΆν° λ€μ΄μ€λ read/write request λ₯Ό μ²λ¦¬νλ€
λ§μ μΌμ νλκ² μ²λΌ 보μ΄μ§λ§ confluent κ° μ 곡νλ kafka 101 μ΄λΌλ νμ΅μ© μμμμλ
kafka broker dont do a lot, They are intentionally kept very simple
λΌκ³ νλ€.
λ²μΈλ‘, μΉ΄νμΉ΄ ν΄λ¬μ€ν°λΌλ μ©μ΄λ λ§μ΄ λ€μ΄λ΄€μ κ²μ΄λ€
μ΄ μΉ΄νμΉ΄ ν΄λ¬μ€ν°κ° λ°λ‘ μ¬λ¬κ°μ μΉ΄νμΉ΄ λΈλ‘컀λ€μ λ¬Άμ΄λμ κ°λ μ΄λ€.
μ¦, μ°λ¦¬λ ν΄λ¬μ€ν°μ ν λΈλ‘컀μ connection μ λ§Ίμ΄ μνΈμμ©μ νκ² λλ€.
μ¬λ―Έμλ νΉμ§μΌλ‘λ μΉ΄νμΉ΄ λΈλ‘컀λ bootstrap server λ‘μ μν μ μννλ€.
bootstrap μ μΌλ°μ μΌλ‘ initialize λ¨κ³μμ μ¬μ©λλ μ΄κΈ°ν λ°μ΄ν° νΉμ μ€νμ μν μ΄κΈ° μ€μ λ¨κ³μ μμ μ μ΄μΌκΈ°νλ€.
κ·Έλμ νΉμ λΈλ‘μ»€κ° bootstrap server λ₯Ό μννμ¬ λ€λ₯Έ λΈλ‘컀λ€κ³Ό μ°κ²°ν μ μκ³ , μ°κ²°λ λΈλ‘μ»€λ€ μμ²΄κ° bootstraping μ ν μ μλ€λ κ²μ΄λ€.
κ·Έλμ ν΄λ¬μ€ν°μ μ‘΄μ¬νλ λͺ¨λ λΈλ‘컀 νλ νλκ° λ€λ₯Έ ν΄λ¬μ€ν°μ λν λΈλ‘μ»€κ° λ μ μλ€. (μ΄ νΉμ±μ΄ κ³ κ°μ©μ±μ μ§μνλ νΉμ±μ΄ λλ€)
κ²°κ΅ ν΄λΌμ΄μΈνΈλ νΉμ λΈλ‘컀μ μ μνμ¬ ν΄λ¬μ€ν° λ΄μ λ©νλ°μ΄ν° (λΈλ‘컀 λͺ©λ‘, ν ν½ μ 보 λ±)μ κ°μ Έμ€κ³ μ΄ μ 보λ₯Ό κΈ°λ°μΌλ‘ λ€λ₯Έ λΈλ‘컀λ€κ³Ό μ°κ²°ν μ μλλ‘ νλ κ²μ΄λ€.
2. μΉ΄νμΉ΄μ λ°μ΄ν° μ μ₯ ν μ΄λΈ, topic
topic μ μΉ΄ν κ³ λ¦¬λΌκ³ μκ°νλ©΄ λλ€.
kafka λ‘ λ€μ΄μ€λ λͺ¨λ μ΄λ²€νΈλ€μ λν΄μ ν ν½μ΄λΌλ λ¨μλ‘ categorizing νμ¬ λ°μ΄ν°λ₯Ό storing νλ€.
μ΄λ²€νΈκ° μ μ₯λλ κ°μ₯ κΈ°λ³Έ κ΅¬μ± λ¨μλΌκ³ ν μ μκ³ , ν ν½μ νμΌμμ€ν μΌλ‘ μ€λͺ νλ κ²μ΄ κ°μ₯ μΌλ°μ μ΄λ€.
ν ν½μ΄ λλ ν 리λΌκ³ νλ€λ©΄ μ΄λ²€νΈλ€μ ν΄λΉ λλ ν 리 λ΄λΆμ μ‘΄μ¬νλ νμΌλ€μ΄λΌκ³ μκ°νλ©΄ λλ€
.
βββ order.ordered <- topic
β βββ event-1
β βββ event-2
β βββ event-3
β βββ event-4
βββ member.terminated <- topic
β βββ event-1
β βββ event-2
β βββ event-3
ν ν½μ append only μ΄λ©°, μ μ΄λ²€νΈ λ©μμ§κ° ν ν½μ λ€μ΄μ μ μ₯μ΄ λλ€λ©΄ μ λ μμ λ μ μλ€.
λ€λ₯Έ μΌλ°μ μΈ ν νμμ λ©μμ§ μΈνλΌμ λ¬λ¦¬ ν ν½μλ producer μ consumer κ° μ¬λ¬κ° μΌ μ μλ κ²μ κΈ°μ΅νμ
μμ kafka 101 μμμμλ ν ν½μ queue κ° μλλΌ
log of events
λΌκ³ νννλ€. log λΌλ 컨μ μ΄ μκΈ°μimmutable
,append only
그리κ³seek by offset
μ΄ μμ°μ€λ¬μ΄ κ²μ΄λ€.
3. μΉ΄νμΉ΄μ μ μ€νΈλ¦Ό ν΄λΌμ΄μΈνΈ, producer
producer λ μ΄λ²€νΈλ₯Ό μμ°νλ ν΄λΌμ΄μΈνΈλ€.
λ³΄ν΅ upstream νΉμ μμ°μ νΉμ publisher λΌκ³ νννκΈ°λ νλλ°, producer κ° topic μ μ΄λ²€νΈλ₯Ό μ μ‘νλ μν μ μννλ€
νλ‘λμλ μνλ€λ©΄ νΉμ topic λ΄μ partition μλ λ©μμ§λ₯Ό λ°νν μ μλ€
μμΈν κ²μ νμ μμ νλ‘λμ ννΈμμ λ μ΄μΌκΈ°νλλ‘ νμ
4. μΉ΄νμΉ΄μ λ€μ΄μ€νΈλ¦Ό ν΄λΌμ΄μΈνΈ, consumer
consumer λ μΉ΄νμΉ΄μμ μ΄λ²€νΈλ₯Ό μλΉνλ ν΄λΌμ΄μΈνΈλ€.
μμ consumer λ₯Ό downstream, μλΉμ νΉμ subscriber λΌκ³ νννλ€.
consumer λ νΉμ ν ν½μμ μ΄λ²€νΈλ₯Ό μ½κ³ μ΄λκΉμ§ μ½μλμ§μ λν μ 보λ₯Ό μ€νμ μ΄λΌλ λ°μ΄ν°λ‘ ꡬλΆνλ€.
μΌλ°μ μΈ μν©μμλ μ€νμ μ΄ μμ°¨μ μΌλ‘ μ¦κ°νκ² μ§λ§, μ€νμ μ 컨μλ¨Έκ° κ²°μ νμ¬ μΈμ λ νΉμ μμΉλ‘λΆν° λ°μ΄ν°λ₯Ό μλΉν μ μλ€.
μμΈν κ²μ μμ νμ μμ 컨μλ¨Έ ννΈμμ λ μ΄μΌκΈ°νλλ‘ νμ
5. μΉ΄νμΉ΄μ μ€μ§μ μΈ μ μ₯μ, partition
μ΄λ ν μ΄λ²€νΈκ° μμ°μμ μν΄μ publish λλ€λ©΄, μ€μ λ‘λ ν ν½μ μ μ₯λλκ²μ΄ μλλΌ ν ν½μ μ‘΄μ¬νλ νΉμ νν°μ μ μ μ₯λλ κ²μ΄λ€.
μΉ΄νμΉ΄λ νλμ ν ν½ λ΄μμ μ¬λ¬κ°μ νν°μ μ λ§λ€ μ μλλ‘ νμ¬ μ²λ¦¬λμ λλ¦°λ€.
6. μΉ΄νμΉ΄μ ν΅μ¬ μμ μμ, replication
μμ μ μΉ΄νμΉ΄λ high availability μ scalability λ₯Ό μ§μνλ€κ³ νλλ°, κ·Έ ν΅μ¬ μμκ° λ°λ‘ μ΄ replication μ΄λ€.
μΉ΄νμΉ΄μμ replication μ νμ±ννλ€λ©΄ λͺ¨λ ν ν½μ 볡μ νμ¬ μ₯μ μ λν λ΄κ²°ν¨μ κ°λλ‘ νλ€.
μ€μ λ‘ λ°μ΄ν°κ° μΉ΄νμΉ΄ λΈλ‘μ»€λ‘ λ€μ΄μμ λ μ΄λ ν ν ν½μ λ°μ΄ν°κ° μμΈλ€λ©΄ replication μ μν΄μ 볡μ λ³Έ ν ν½μ κ°μ΄ μμ΄κ² λλ€.