์ํ์น ์นดํ์นด(Apache Kafka)์ ์ฑ๋ฅ ์ต์ ํ (Throughput ํธ) [2]
์์ํ๋ฉฐ... ๐
์ด๋ฒ์๋ 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/