์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

์•„ํŒŒ์น˜ ์นดํ”„์นด(Apache Kafka)์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” (Throughput ํŽธ) [2]

busybeans 2021. 9. 9. 22:37
728x90
๋ฐ˜์‘ํ˜•

์‹œ์ž‘ํ•˜๋ฉฐ... ๐Ÿš€

์ด๋ฒˆ์—๋Š” 4๊ฐœ์˜ ์„ฑ๋Šฅ ๋ชฉํ‘œ ์ค‘ ์ฒซ ๋ฒˆ์งธ๋กœ Throughput์— ๋Œ€ํ•ด์„œ ์–ด๋–ค ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํŠœ๋‹ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ์˜ option ์ค‘ ์–ด๋–ค option์ด Throughput์— ์˜ํ–ฅ์„ ์ฃผ๋Š”์ง€ ์•Œ์•„๋ณด๋ฉฐ ์–ด๋–ป๊ฒŒ ์ด ์˜ต์…˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์˜ํ–ฅ์„ ์ฃผ๋ฉฐ, ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Throughput : ์ฒ˜๋ฆฌ๋Ÿ‰์œผ๋กœ ๋ถˆ๋ฆฌ์šฐ๋ฉฐ, ์นดํ”„์นด๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๋ฉ”ํŠธ๋ฆญ์ด๋‹ค.

1. Producer๋ฅผ ํ†ตํ•œ Throughput ์ตœ๋Œ€ํ™” ๐Ÿš€๐Ÿš€

Partition

Throughput๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Partition ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์ด ๋Œ€ํ‘œ์ ์ž…๋‹ˆ๋‹ค.
Partition์˜ ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด, ๋ถ„์‚ฐ ํšจ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉฐ ๋ถ„์‚ฐ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ฉด ํ•  ์ˆ˜ ๋ก ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด Throughput๋ฅผ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Batch size

ํ•ด๋‹น ์˜ต์…˜์€ prodcuer์˜ ์˜ต์…˜์œผ๋กœ Batch size๋Š” ๊ฐ™์€ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋ณด๋‚ด๋Š” ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ๋ฐฐ์น˜๋กœ ๋ณด๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์–‘์„ ์กฐ์ ˆํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

์ด ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ํ•œ๋ฒˆ์— ๋งŽ์€ ์–‘์„ ๋ณด๋‚ด๋ฉฐ, ์ „์†ก ํšŸ์ˆ˜๋„ ์ค„์–ด๋“ค์–ด ์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ ๊ฐ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

linger.ms

ํ•ด๋‹น ์˜ต์…˜์€ prodcuer์˜ ์˜ต์…˜์œผ๋กœ ๊ทธ ๋‹ค์Œ ๋ฐฐ์น˜ ํ˜•ํƒœ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ธฐ ์ „์— ์ถ”๊ฐ€์ ์ธ ๋ฉ”์‹œ์ง€๋“ค์„ ์œ„ํ•ด ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์กฐ์ ˆํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์€ batch.size๊ฐ€ ๊ฝ‰ ์ฐฐ ์ˆ˜ ์žˆ๋„๋ก ์‹œ๊ฐ„์„ ์„ค์ •ํ•˜๋ฉด Throughput ์ตœ์ ํ™”์— ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ ์ด์œ ๋Š” ํ•œ๋ฒˆ์— ๋ณด๋‚ด๋Š” ์–‘์— ๋”ฐ๋ผ์„œ ์ „์†ก ํšŸ์ˆ˜๋„ ์ค„์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค ํ–ˆ์œผ๋‹ˆ batch.size๊ฐ€ ๊ฝ‰ ์ฐฐ ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜๋ฉด ๋‹น์—ฐํžˆ ์œ ๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

compression.type

ํ•ด๋‹น ์˜ต์…˜์€ prodcuer์˜ ์˜ต์…˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์••์ถ•ํ•ด์„œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์–ด๋–ค ํƒ€์ž…์œผ๋กœ ์••์ถœํ• ์ง€๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

์˜ต์…˜์œผ๋กœ๋Š” none, gzip, snappy, lz4 ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํฌ๋งท์ด ์กด์žฌํ•˜๋Š”๋ฐ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ณ„๋กœ Throughput์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐ์ดํ„ฐ์˜ ์œ ํ˜•์— ๋”ฐ๋ผ์„œ compression.type๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

acks

ํ•ด๋‹น ์˜ต์…˜์€ prodcuer์˜ ์˜ต์…˜์œผ๋กœ ํ”„๋กœ๋“€์„œ๊ฐ€ ์นดํ”„์นด ํ† ํ”ฝ์˜ ๋ฆฌ๋”์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ ํ›„ ์š”์ฒญ์„ ์™„๋ฃŒํ•˜๊ธฐ ์ „ ack์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.

ํ•ด๋‹น ์˜ต์…˜์€ 0, 1, all or -1 ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ๊ฐ’์— ๋”ฐ๋ผ์„œ ํ”„๋กœ๋“€์„œ๊ฐ€ ๋‹ค์Œ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Throughput์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

retries

ํ•ด๋‹น ์˜ต์…˜์€ prodcuer์˜ ์˜ต์…˜์œผ๋กœ ์ผ์‹œ์ ์ธ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์ „์†ก์— ์‹คํŒจํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋ณด๋‚ด๋Š” ํšŸ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ด ์˜ต์…˜์— ๋”ฐ๋ผ์„œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก์‹คํŒจํ• ๋•Œ ๋‹ค์‹œ ์‹œ๋„ํ•˜๋Š” ๋ณ„๋„์˜ ์ž‘์—…์ด ์ถ”๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌ๋Ÿ‰์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

buffer.memory

ํ•ด๋‹น ์˜ต์…˜์€ prodcuer์˜ ์˜ต์…˜์œผ๋กœ ํ”„๋กœ๋“€์„œ๊ฐ€ ์นดํ”„์นด ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ์ž ์‹œ ๋Œ€๊ธฐํ•  ์ˆ˜ ์žˆ๋Š” ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ๋ฐ”์ดํŠธ์ž…๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•ด Producer๊ฐ€ ๋ณด๋‚ด์ง€ ๋ชปํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๊ด€ํ•  ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋กœ ๋งŒ์•ฝ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ full์ด ๋˜๋ฉด, ๋‹ค๋ฅธ ๋ฉ”์‹œ์ง€ ์ „์†ก์„ blocking ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ memory ์—ฌ์œ ๊ฐ€ ์ƒ๊ธฐ๊ฑฐ๋‚˜, max.block.ms๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒํ‹ฐ์…˜์ด ๋งŽ์ง€ ์•Š์œผ๋ฉด, ์กฐ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์ง€๋งŒ ํŒŒํ‹ฐ์…˜์ด ๋งŽ๋‹ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋Š˜๋ ค blocking ์—†์ด ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก๋˜๋„๋ก ์„ค์ •ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

2. Consumer๋ฅผ ํ†ตํ•œ Throughput ์ตœ๋Œ€ํ™” ๐Ÿš€๐Ÿš€

fetch.min.bytes

ํ•ด๋‹น ์˜ต์…˜์€ Consumer์˜ ์˜ต์…˜์œผ๋กœ ํ•œ๋ฒˆ์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ๋ฐ์ดํ„ฐ ์‚ฌ์ด์ฆˆ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ง€์ •ํ•œ ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋ˆ„์ ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

์ด ์˜ต์…˜์˜ ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ๋ธŒ๋กœ์ปค๋กœ ์š”์ฒญํ•˜๋Š” ํšŸ์ˆ˜๊ฐ€ ๊ฐ์†Œํ•˜๋ฉฐ, ๋ธŒ๋กœ์ปค์˜ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์„ ์ ˆ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”„๋กœ๋“€์„œ์—์„œ batch.size๋ฅผ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ํšจ๊ณผ๋ฅผ ๋ณด์ž…๋‹ˆ๋‹ค.

fetch.max.wait.ms

ํ•ด๋‹น ์˜ต์…˜์€ Consumer์˜ ์˜ต์…˜์œผ๋กœ consumer์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ตœ์†Œ ์‹œ๊ฐ„์œผ๋กœ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜์–ด๋„, ํ•ด๋‹น ์‹œ๊ฐ„ ์ด์ „์—๋Š” ๊ฐ€์ ธ๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ์˜ต์…˜์„ ํ†ตํ•ด์„œ ๋‚ด๋ถ€์ ์œผ๋กœ consumer๊ฐ€ fetch ์š”์ฒญ์„ ํ•ด๋„, ๋ธŒ๋กœ์ปค๊ฐ€ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Consumer group ํ™œ์šฉ

์ด๋ฒˆ์—๋Š” ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์„ ํ™œ์šฉํ•ด์„œ ์นดํ”„์นด ๋ธŒ๋กœ์ปค ํ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋กœ๋ฐ”๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจ์Šˆ๋จธ๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ๋†’์•„์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. Throughput ์ตœ๋Œ€ํ™” ์„ค์ • ๊ฐ€์ด๋“œ

Producer

  • batch.size: ์ฆ๊ฐ€ (100,000 – 200,000) (default 16384)
  • linger.ms: ์ฆ๊ฐ€ (10 – 100) (default 0)
  • compression.type=lz4 (default none)
  • acks=1 (default 1)
  • retries=0 (default 0)
  • buffer.memory: partition์ด ๋งŽ๋‹ค๋ฉด ์ฆ๊ฐ€ (default 33,554,432)

Consumer

  • fetch.min.bytes : ~100,000 ๊นŒ์ง€ ์ฆ๊ฐ€ (default 1)

REFERENCE

[1]. https://devidea.tistory.com/90
[2]. https://firststep-de.tistory.com/35
[3]. https://www.ibm.com/docs/ko/oala/1.3.5?topic=SSPFMY_1.3.5/com.ibm.scala.doc/config/iwa_cnf_scldc_cnf_kfk_t.html
[4]. https://www.popit.kr/kafka-%EC%9A%B4%EC%98%81%EC%9E%90%EA%B0%80-%EB%A7%90%ED%95%98%EB%8A%94-producer-acks/
[5]. https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=freepsw&logNo=221028179182
[6]. https://www.confluent.io/blog/optimizing-apache-kafka-deployment/

728x90
๋ฐ˜์‘ํ˜•