Running Kafka in Production
ํ์ฌ์์ Confluent๋ฅผ ํตํด Kafka ํด๋ฌ์คํฐ๋ฅผ ์ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ, ์ด ์นดํ์นด์ ๋ํด์ ์ข๋ ์์ธํ ์๊ณ , ์ ๋ฌธ์ฑ์ ๊ฐ์ถ๊ณ ์ถ๋ค๋ ์๊ฐ์ด ๋ค์ด์ 2025๋ ๋ชฉํ๋ก Confluent์ Kafka ์๊ฒฉ์ฆ์ธ Confluent Certified Developer for Apache Kafkaยฎ ์๊ฒฉ์ฆ์ ์ค๋นํ๊ณ ์์ต๋๋ค โ๏ธ ์ ์ฒด ํฌ์คํธ๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
๋ค์ด๊ฐ๋ฉฐ
์ด์ ํ์ฌ์์๋ Confluent์์ Kafka ํด๋ฌ์คํฐ๋ฅผ ์ด์ ํ์ต๋๋ค. ๊ทธ๋์ ํด๋ฌ์คํฐ๋ฅผ ์ด๋ป๊ฒ ๊ตฌ์ฑํ ์ง๋ ํด๋ฌ์คํฐ ์์ ์ฑ์ ๋ํด์๋ ํฌ๊ฒ ๊ณ ๋ฏผํ์ง ์๊ณ Kafka ๊ด๋ จ ์์ ์ ํ์ต๋๋ค. ์๋ก์ด ํ์ฌ์์๋ Kafka ํด๋ฌ์คํฐ๋ฅผ ์ง์ ์ด์ ํฉ๋๋ค! ๊ทธ๋์ ์ด๋ป๊ฒ ํด์ผ ํด๋ฌ์คํฐ๋ฅผ ์์ ์ ์ผ๋ก ์ด์ํ ์ ์์๊น ๊ณ ๋ฏผํ๊ฒ ๋์์ต๋๋ค ใ ใ
์ด ๊ธ์ Confluent์ โRunning Kafka in Production with Confluent Platformโ ๊ธ์ ์ฝ๊ณ , ์ง์ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑ ํ ๋์ ๊ฐ์ด๋๋ฅผ ์ ๋ฆฌํ ๋ฉ๋ชจ ๊ธ ์ ๋๋ค.
Disk
RAID 1 and RAID 10: Preferred
RAID 0: 2nd preferred
์ด์ ํ๊ฒฝ์์ RAID ์ฌ์ฉ์ด ๊ถ์ฅ ๋ฉ๋๋ค. ์๊ฑด ์ด์ ์ โKafka Internalsโ ํฌ์คํธ์์๋ ์ดํด๋ณธ ์ ์ด ์์ต๋๋ค ใ ใ
์ฃผ์์ฌํญ์ผ๋ก Tiered Stroage๋ Self-balancing Cluster๋ฅผ ์ด๋ค๋ฉด, JBOD(Just a Bundle of Disks)๋ฅผ ์ฐ์ง ๋ง๋ผ๊ณ ํฉ๋๋ค.
์ด์ ๋ JBOD๋ ์ฌ๋ฌ ๊ฐ์ ๋์คํฌ๋ฅผ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์ฉํ๋ ์ด์ ๋ฐฉ์์ธ๋ฐ, RAID ์์คํ ๊ณผ ๋ค๋ฅด๊ฒ ๋์คํฌ๋ฅผ ๋ฌถ์ด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋๋ค.
์๋ฅผ ๋ค์ด, ๋ธ๋ก์ปค์ 3๊ฐ์ ๋์คํฌ๊ฐ ์๊ณ ,
/mnt/disk1
/mnt/disk2
/mnt/disk3
์ด๊ฑธ Kafka ์ค์ ์์ ์๋ ๊ฒ ์ค์ ํ๋ฉด,
log.dirs=/mnt/disk1/kafka-logs,/mnt/disk2/kafka-logs,/mnt/disk3/kafka-logs
๊ทธ๋ฌ๋ฉด, Kafka๋ ํํฐ์ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ 3๊ฐ ๋์คํฌ์ ์์์ ๋ถ์ฐ ์ ์ฅ ํด์ค๋๋ค. ๊ฐ์ ํํฐ์ ์ ์ํ๋ ๋ก๊ทธ๋ ๊ฐ์ ๋์คํฌ์ ์์นํฉ๋๋ค. Kafka ๋ธ๋ก์ปค๊ฐ ์๋ก์ด ํํฐ์ ์ ์ฒ๋ฆฌํ๊ฒ ๋ ๋, ํ์ฌ ๋ง์ดํธ๋ ๋์คํฌ ์ค์ ์ฌ์ฉ๋์ด ๋ฎ์ ์ชฝ์ ์ ํธํด์ ๊ณ ๋ฅธ๋ค๊ณ ํฉ๋๋ค.
Tiered Storage, Self-balancing Cluster๋ ๋ธ๋ก์ปค๊ฐ ํ๋์ ๋์คํฌ๋ฅผ ๊ฐ์ง๊ณ ์ด์ ๋๋ ๊ฒ์ผ๋ก ๊ฐ์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋์คํฌ ๊ณต๊ฐ์ Kafka ์ด์ธ์ ๋ค๋ฅธ ์๋น์ค์ ๊ณต์ ํ๋ฉฐ ์ฌ์ฉํ์ง ๋ง์๋ผ. ์ด๋ฐ ๊ตฌ์ฑ์ Kafka์ ์ฑ๋ฅ์ ์ ํ ์ํต๋๋ค.
NAS ๋์คํฌ๋ ์ฌ๊ฐํ latency๋ฅผ ๊ฒช์ ์ ์์ผ๋ ์ฐ์ง ๋ง์๋ผ.
JVM
์นดํ์นด๋ฅผ ์ธํ ํ๊ธฐ ์ ์ JDK ์ค์น๋ฅผ ์ํํ๋ผ. ์ปจํ ์ค์น ํจํค์ง์ JDK์ OS๋ ํฌ๋ ๋์ด ์์ง ์๋ค.
Memory
์ด์ ์ โKafka Internalsโ ํฌ์คํธ์์ Kafka์ Page Cache์ ๋ํด ์ดํด๋ณด๋ฉด์ ๊ฐ์ด ์ดํด๋ณด์์ต๋๋ค!
32Gb๊ฐ ๊ถ์ฅ ์ฌํญ์ธ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
Kraft Mode
์ด์ ํ๊ฒฝ์์๋ ์ต์ 3๋์ ๋ธ๋ก์ปค์ 3๋์ ์ปจํธ๋กค๋ฌ ๋ ธ๋๋ก ๊ตฌ์ฑํ๋ผ.
๊ฐ ๋
ธ๋๋ ์ค์ ๋ process.roles
๊ฐ์ ๋ฐ๋ผ์ ์ญํ ์ ๋ฐ์ต๋๋ค.
Seucirty
RBAC๋ฅผ ์ธํ ํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
SASL/SCRAM์ ๊ตฌ์ฑํ์ฌ inter-broker ์ฌ์ด ํต์ ๊ณผ broker-client ์ฌ์ด ํต์ ์ ๋ณดํธํ๋ผ.
File Descriptors
ํ์ผ ๋์คํฌ๋ฆฝํฐ(fd)๋ ๋ฆฌ๋ ์ค์์ ํ์ผ, ์์ผ, ํ์ดํ ๋ฑ ๊ฑฐ์ ๋ชจ๋ I/O ์์์ ๊ฐ๋ฆฌํค๋ ์ ์ํ ์ซ์ ์ ๋๋ค.
Kafka๋ ๋ง์ ๋ก๊ทธ ํ์ผ๋ค์ ๋ค๋ฃจ๊ณ , ๋ ํด๋ผ์ด์ธํธ-๋ธ๋ก์ปค ๊ฐ ํต์ ์ ์ํ ์์ผ์ ์ฌ์ฉํ๋ฏ๋ก, ํ๋์ Kafka ํ๋ก์ธ์ค๊ฐ ๋งค์ฐ ๋ง์ fd๋ฅผ ํ์๋ก ํฉ๋๋ค.
๋๋ถ๋ถ์ ๋ฆฌ๋ ์ค ๋ฐฐํฌํ์ด 1024๊ฐ์ fd๊ฐ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ ํ ๋์ด ์์ต๋๋ค. ์ด ์์น๋ก ์ธํด Kafka๊ฐ ๋ก๊ทธ ํ์ผ์ ์ด ์ ์๊ฑฐ๋ ํด๋ผ์ด์ธํธ ์ฌ์ด์ ํต์ ์ด ๋ถ์์ ํด์ง ์ ์์ต๋๋ค.
๋ฌธ์์์๋ fd์ ์ ํ์ 100,000๊ฐ ์ด์์ผ๋ก ๋๋ฆฌ๋ ๊ฒ์ ๊ถํฉ๋๋ค. OS์ ๋ฐ๋ผ ์ ํ๊ฐ์ ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, ์์ธํ ๊ฒ์ OS์ ๊ฐ์ด๋ ๋ฌธ์๋ฅผ ๋ณด๋ผ๊ณ ํฉ๋๋ค!
mmap (Memory Mapping)
Kafka๋ ๋ก๊ทธ ํ์ผ์ ์ฒ๋ฆฌํ ๋, ์ฑ๋ฅ์ ์ํด mmap์ ์ฌ์ฉํฉ๋๋ค. ์ด๋, ์์คํ ์ mmap ํ๊ณ๊ฐ์ด ๋ฎ๊ฒ ์ค์ ๋์ด ์์ผ๋ฉด, Kafka๊ฐ ๋์ด์ ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ ๋งคํ ํ ์ ์๊ฒ ๋์ด OOM์ด ๋ฐ์ํ๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๊ทธ๋์ vm.max_map_count
๊ฐ์ ๋๋ ค์ค์ผ ํฉ๋๋ค. ์ถฉ๋ถํ ๋์ ๊ฐ์ผ๋ก ๋ณ๊ฒฝ ํด์ฃผ๋ฉด ๋๊ณ , ๊ตฌ์ฒด์ ์ธ ๋ณ๊ฒฝ ๋ฐฉ๋ฒ์ OS์ ๊ฐ์ด๋ ๋ฌธ์๋ฅผ ์ฐธ๊ณ .