Kafka๋ฅผ ์šด์˜ํ•  ๋•Œ์˜ ๊ถŒ์žฅ ์„ธํŒ…์„ ์‚ดํŽด๋ณด์ž.

4 minute read

ํšŒ์‚ฌ์—์„œ 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์˜ ๊ฐ€์ด๋“œ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ .

Categories:

Updated: