Kafka μ±λ₯ νλκ³Ό μ΅μ ν: κ³ μ²λ¦¬λ μꡬ μ¬ν λμ λ°©λ²
Apache Kafka λ κ³ μ±λ₯ λ°μ΄ν° μ€νΈλ¦¬λ° νλ«νΌμΌλ‘ λ리 μ¬μ©λκ³ μμ§λ§, λκ·λͺ¨ λ°μ΄ν° νΈλν½μ μ²λ¦¬νκΈ° μν΄μλ μ μ ν μ±λ₯ νλ μ΄ νμμ μ λλ€. μ΄ ν¬μ€ν μμλ νλ‘λμ μ 컨μλ¨Έ μ€μ μ΅μ ν, Kafka ν΄λ¬μ€ν° κ΅¬μ± νλ , μ ν리μΌμ΄μ μ±λ₯ νλ‘νμΌλ§ , κ·Έλ¦¬κ³ κ³ μ²λ¦¬λ μꡬ μ¬ν λμ λ°©λ²μ μ€λͺ ν©λλ€.
1. νλ‘λμμ 컨μλ¨Έ μ€μ μ΅μ ν
Kafka μ±λ₯μ ν΅μ¬ μμλ νλ‘λμ μ 컨μλ¨Έ μ μ€μ μ λλ€. μ΄ μ€μ λ€μ΄ μ μ νκ² μ‘°μ λμ§ μμΌλ©΄ μ±λ₯ μ νλ₯Ό μ΄λν μ μμ΅λλ€. μλλ μ£Όμ νλ μ΅μ κ³Ό μ€λͺ μ λλ€.
νλ‘λμ μ΅μ ν μ€μ
a.
acks
μ€μ
-
acks=all
: λͺ¨λ 리νλ¦¬μΉ΄κ° λ°μ΄ν°λ₯Ό λ°μ λκΉμ§ λκΈ°. μμ μ± λμ. -
acks=1
: 리λ 리νλ¦¬μΉ΄λ§ νμΈ. μ±λ₯ ν₯μ. -
acks=0
: νμΈνμ§ μκ³ μ μ‘. λ§€μ° λΉ λ₯΄μ§λ§ λ°μ΄ν° μμ€ μν.
b. λ°°μΉ ν¬κΈ° μ‘°μ
-
batch.size
: νλ‘λμκ° ν λ²μ μ μ‘νλ λ©μμ§ ν¬κΈ°. κΈ°λ³Έκ°μ 16KB. νΈλν½μ΄ λ§μμλ‘ μ΄ κ°μ λμ¬ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
c. λκΈ° μκ° μ€μ
-
linger.ms
: λ°°μΉλ₯Ό κΈ°λ€λ¦¬λ μκ°. κΈ°λ³Έκ°μ 0μ΄μ§λ§, μ½κ°μ λκΈ° μκ°μ μ£Όμ΄ λ°°μΉλ₯Ό λ ν¨μ¨μ μΌλ‘ λ§λ€ μ μμ΅λλ€. μΌλ°μ μΌλ‘ 5~10ms μ€μ μ΄ μ ν¨ν©λλ€.
컨μλ¨Έ μ΅μ ν μ€μ
a.
fetch.min.bytes
λ°
fetch.max.wait.ms
-
fetch.min.bytes
: 컨μλ¨Έκ° ν λ²μ κ°μ Έμ¬ μ΅μ λ°μ΄ν° ν¬κΈ°. λ λ§μ λ°μ΄ν°λ₯Ό ν λ²μ κ°μ Έμ€λ©΄ I/O ν¨μ¨μ±μ΄ ν₯μλ©λλ€. -
fetch.max.wait.ms
: 컨μλ¨Έκ° λ°μ΄ν°λ₯Ό κΈ°λ€λ¦¬λ μ΅λ μκ°. νΈλν½μ΄ μ μ λλ μ΄ κ°μ λμ΄λ©΄ λ°°μΉ μ²λ¦¬λ₯Ό μ΅μ νν μ μμ΅λλ€.
b.
max.poll.records
-
max.poll.records
: ν λ²μ κ°μ Έμ€λ λ©μμ§ μ. μ²λ¦¬ μ±λ₯μ λμ΄λ €λ©΄ μ΄ κ°μ μ μ ν μ€μ νμ¬ ν λ²μ λ§μ λ©μμ§λ₯Ό μ²λ¦¬ν μ μλλ‘ ν©λλ€.
2. Kafka ν΄λ¬μ€ν° κ΅¬μ± νλ
Kafkaμ ν΄λ¬μ€ν° μ±λ₯μ λΈλ‘컀μ νν°μ μ, 리ν리μΌμ΄μ μ€μ λ±μ μν΄ ν¬κ² μ’μ°λ©λλ€. ν΄λ¬μ€ν°μ ꡬμ±μ μ΅μ ννλ©΄ Kafkaμ νμ₯μ±κ³Ό μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
λΈλ‘컀 κ΅¬μ± μ΅μ ν
a. λ©μμ§ ν¬κΈ° μ΅μ ν
-
message.max.bytes
: λΈλ‘μ»€κ° νμ©ν μ μλ μ΅λ λ©μμ§ ν¬κΈ°. μ΄ κ°μ λ리면 λμ©λ λ°μ΄ν°λ₯Ό μ μ‘ν μ μμ§λ§, μ§λμΉκ² ν° λ©μμ§λ ν΄λ¬μ€ν°μ λΆνλ₯Ό μ€ μ μμ΅λλ€.
b. μμΆ μ¬μ©
-
compression.type
: λ°μ΄ν° μμΆμ μ¬μ©νμ¬ λ€νΈμν¬ λμνμ μ μ½ν μ μμ΅λλ€.snappy
,lz4
,zstd
μ κ°μ κ²½λ μμΆ μκ³ λ¦¬μ¦μ μ¬μ©νλ©΄ μ±λ₯ μ ν μμ΄ λ°μ΄ν° ν¬κΈ°λ₯Ό μ€μΌ μ μμ΅λλ€.
c. 리ν리μΌμ΄μ ν©ν°
- 리ν리μΌμ΄μ ν©ν° λ₯Ό μ μ νκ² μ€μ νλ©΄ λ°μ΄ν° μμ μ±μ ν보ν μ μμ§λ§, μ§λμΉκ² λμΌλ©΄ μ±λ₯μ μν₯μ μ€ μ μμ΅λλ€. μΌλ°μ μΌλ‘ 3μ΄ κΆμ₯λ©λλ€.
νν°μ λ° ν ν½ κ΄λ¦¬
a. νν°μ μ μ¦κ°
- νν°μ μ λ₯Ό λ리면 Kafka ν΄λ¬μ€ν°κ° λ λ§μ λ°μ΄ν°λ₯Ό λ³λ ¬λ‘ μ²λ¦¬ν μ μμ΅λλ€. νμ§λ§ λ무 λ§μ νν°μ μ μ€λ²ν€λλ₯Ό μ¦κ°μν¬ μ μμΌλ―λ‘ μ μ ν μλ₯Ό μ€μ νλ κ²μ΄ μ€μν©λλ€.
b. νν°μ 리λ κ· ν μ‘°μ
- λͺ¨λ λΈλ‘μ»€κ° λμΌν μμ νν°μ 리λ μν μ νλλ‘ κ· νμ λ§μΆ°μΌ ν΄λ¬μ€ν° μ λ°μ λΆνκ° κ³ λ₯΄κ² λΆμ°λ©λλ€.
3. μ ν리μΌμ΄μ μ±λ₯ νλ‘νμΌλ§
Kafkaλ₯Ό μ¬μ©νλ μ ν리μΌμ΄μ μ΄ μ μ νκ² λμνλμ§ νμΈνλ €λ©΄ μ±λ₯ νλ‘νμΌλ§ μ΄ νμμ μ λλ€. Java κΈ°λ° μ ν리μΌμ΄μ μ΄λΌλ©΄ JMX(Java Management Extensions) λͺ¨λν°λ§μ ν΅ν΄ Kafkaμ λ€μν μ±λ₯ μ§νλ₯Ό μΆμ ν μ μμ΅λλ€.
μ£Όμ μ§ν
a.
producer-metrics
- λ μ½λ μ μ‘μ¨ , λ°°μΉ ν¬κΈ° , λκΈ° μκ° λ±μ μΆμ νμ¬ νλ‘λμ μ±λ₯μ λΆμν μ μμ΅λλ€.
b.
consumer-metrics
- μλΉμ¨ , λ μ½λ μ§μ° μκ° λ±μ λͺ¨λν°λ§νμ¬ μ»¨μλ¨Έμ μ±λ₯ λ³λͺ©μ νμΈν μ μμ΅λλ€.
c. λΈλ‘컀 μ§ν
- λμ€ν¬ I/O , λ€νΈμν¬ I/O , λ©μμ§ μ²λ¦¬λ λ± λΈλ‘컀μ μ±λ₯μ μ§μμ μΌλ‘ λͺ¨λν°λ§ν΄μΌ ν©λλ€.
μμ: JMX κΈ°λ° λͺ¨λν°λ§ μ€μ
# Kafka λΈλ‘컀 μ€μ μ JMXλ₯Ό νμ±νν©λλ€.
KAFKA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
4. κ³ μ²λ¦¬λ μꡬ μ¬ν λμ λ°©λ²
Kafkaλ₯Ό κ³ μ²λ¦¬λ μꡬ μ¬νμ λ§κ² νλνκΈ° μν΄μλ λ€μκ³Ό κ°μ λ°©λ²μ μ¬μ©ν μ μμ΅λλ€.
λ°°μΉ μ²λ¦¬ μ΅μ ν
λ°°μΉ μ²λ¦¬λ Kafkaμ μ±λ₯μ λμ΄λ ν΅μ¬ λ°©λ² μ€ νλμ λλ€. νλ‘λμ λ°°μΉ λ° μ»¨μλ¨Έ λ°°μΉ μ€μ μ μ΅μ ννλ©΄ λ€νΈμν¬ λμνκ³Ό μμ€ν 리μμ€λ₯Ό λ ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μμ΅λλ€.
μμΆμ ν΅ν λ€νΈμν¬ μ΅μ ν
Kafkaλ λ°μ΄ν°λ₯Ό μ μ‘ν λ μμΆ μ ν΅ν΄ λ€νΈμν¬ λμνμ μ μ½ν μ μμ΅λλ€. νΉν κ³ μ²λ¦¬λ μꡬ μ¬νμ΄ μλ κ²½μ°, μ μ ν μμΆ μκ³ λ¦¬μ¦μ μ¬μ©νμ¬ μ μ‘ ν¨μ¨μ κ·ΉλννμΈμ.
νλμ¨μ΄ 리μμ€ νμ₯
- SSD μ¬μ© : Kafkaλ λ§μ λ°μ΄ν°λ₯Ό λΉ λ₯΄κ² μ μ₯νκ³ μ½μ΄μΌ νλ―λ‘, SSD μ¬μ©μ ν΅ν΄ λμ€ν¬ I/O μ±λ₯μ κ°μ ν μ μμ΅λλ€.
- λ©λͺ¨λ¦¬ μ¦κ° : Kafka λΈλ‘컀λ λ©μμ§λ₯Ό μΊμ±ν λ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νλ―λ‘, λ©λͺ¨λ¦¬ ν¬κΈ°λ₯Ό λ리면 λ λ§μ λ°μ΄ν°λ₯Ό λ©λͺ¨λ¦¬μμ μ²λ¦¬ν μ μμ΅λλ€.
λΆμ° ν΄λ¬μ€ν° νμ₯
λ°μ΄ν° μ²λ¦¬λμ΄ κ³μ μ¦κ°νλ κ²½μ°, λΆμ° ν΄λ¬μ€ν° λ₯Ό ν΅ν΄ Kafkaλ₯Ό νμ₯ν μ μμ΅λλ€. μ¬λ¬ κ°μ λΈλ‘컀λ₯Ό μΆκ°νμ¬ μ²λ¦¬ μ±λ₯μ λμ΄κ³ , νν°μ μ λΆμ°μμΌ λΆνλ₯Ό κ³ λ₯΄κ² λλλ κ²μ΄ μ€μν©λλ€.
μμ£Ό 묻λ μ§λ¬Έ (FAQ)
Q1. Kafkaμμ
acks
μ€μ μ 무μμ΄λ©°, μ΄λ»κ² μ€μ νλμ?
A1.
acks
λ νλ‘λμκ° λ©μμ§λ₯Ό Kafkaλ‘ μ μ‘ν λ νμΈ μλ΅μ λ°λ λ°©μ μ μ€μ νλ μ΅μ
μ
λλ€.
acks=all
μ μμ μ±μ λμ΄κ³ ,
acks=1
μ μ±λ₯μ μ€μνλ©°,
acks=0
μ κ°μ₯ λΉ λ₯Έ μλλ₯Ό μ 곡ν©λλ€.
Q2. Kafka ν΄λ¬μ€ν°μμ νν°μ
μλ₯Ό μ΄λ»κ² κ²°μ νλμ?
A2. νν°μ
μλ μ ν리μΌμ΄μ
μ λ³λ ¬ μ²λ¦¬ μ±λ₯ κ³Ό κ΄λ ¨μ΄ μμΌλ©°, λ λ§μ νν°μ
μ μ¬μ©νλ©΄ λ³λ ¬ μ²λ¦¬κ° ν₯μλμ§λ§ κ΄λ¦¬ μ€λ²ν€λκ° μ¦κ°ν μ μμ΅λλ€. μΌλ°μ μΌλ‘ μ²λ¦¬λμ λ§κ² μ μ ν νν°μ
μ λ₯Ό μ€μ νλ κ²μ΄ μ€μν©λλ€.
Q3. Kafkaμμ λ°°μΉ μ²λ¦¬λ μ μ€μνκ°
Q3. Kafkaμμ λ°°μΉ μ²λ¦¬λ μ μ€μνκ°μ?
A3. λ°°μΉ μ²λ¦¬ λ λ©μμ§λ₯Ό λ¬Άμ΄μ ν λ²μ μ μ‘ν¨μΌλ‘μ¨ λ€νΈμν¬ λμν κ³Ό μμ€ν
리μμ€**λ₯Ό μ μ½ν μ μμ΅λλ€. λ°°μΉ ν¬κΈ°λ₯Ό μ μ ν μ‘°μ νλ©΄ νλ‘λμμ 컨μλ¨Έμ ν¨μ¨μ±μ κ·Ήλννκ³ , μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
Q4. Kafkaμ 리ν리μΌμ΄μ
ν©ν°λ 무μμΈκ°μ?
A4. 리ν리μΌμ΄μ
ν©ν° λ λ©μμ§κ° μ¬λ¬ λΈλ‘컀μ 볡μ λλ νμλ₯Ό μλ―Έν©λλ€. μ΄ κ°μ λμ΄λ©΄ λ°μ΄ν° μμ μ± μ΄ ν₯μλμ§λ§, κ·Έλ§νΌ λ€νΈμν¬ νΈλν½ κ³Ό μ μ₯μ μ¬μ©λ μ΄ μ¦κ°ν©λλ€. μΌλ°μ μΌλ‘ 3 μ΄ μ μ ν κ°μΌλ‘ κΆμ₯λ©λλ€.
Q5. Kafka ν΄λ¬μ€ν°μμ μ±λ₯μ λͺ¨λν°λ§νλ κ°μ₯ μ’μ λ°©λ²μ 무μμΈκ°μ?
A5. JMX(Java Management Extensions) λ₯Ό μ¬μ©ν΄ Kafka ν΄λ¬μ€ν°μ λ€μν μ±λ₯ μ§νλ₯Ό μ€μκ°μΌλ‘ λͺ¨λν°λ§ν μ μμ΅λλ€. Prometheus , Grafana κ°μ λꡬλ₯Ό μ¬μ©ν΄ λΈλ‘컀μ λμ€ν¬ I/O , λ€νΈμν¬ μ²λ¦¬λ , λ μ½λ μ§μ° μκ° λ±μ μ±λ₯μ μΆμ νλ κ²μ΄ μ’μ΅λλ€.
κ²°λ‘
Kafkaμ μ±λ₯μ μ΅μ ννλ €λ©΄ νλ‘λμμ 컨μλ¨Έμ μ€μ , ν΄λ¬μ€ν° κ΅¬μ± , μ ν리μΌμ΄μ νλ‘νμΌλ§ , κ·Έλ¦¬κ³ κ³ μ²λ¦¬λ λμ μ μν λ€μν λ°©λ²μ μ μ νκ² μ‘°ν©ν΄μΌ ν©λλ€. μ΄ ν¬μ€ν μμ μκ°ν νλ λ°©λ²λ€μ ν΅ν΄ Kafkaμ μ±λ₯μ μ΅λν λμ΄μ¬λ¦¬κ³ , μμ μ μ΄κ³ νμ₯ κ°λ₯ν μμ€ν μ ꡬμΆν μ μμ΅λλ€.
λκΈ