๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Kafka

Consumer - 2

by Soono991 2023. 4. 17.
๐Ÿ’ก ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Consumer -1์— ์ด์–ด์„œ Consumer์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ถœ์ฒ˜: https://d2.naver.com/helloworld/0974525

์ปจ์Šˆ๋จธ๋Š” ์œ„์™€ ๊ฐ™์ด ConsumerCoordinator, ConsumerNetworkClient, Fetcher, SubscriptionState ๋“ฑ์˜ ์ฃผ์š” ๋‚ด๋ถ€ ๊ฐ์ฒด์™€ ๋ณ„๋„์˜ HeartBeat Thread๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

์ด์ „ ํฌ์ŠคํŒ…์—์„œ ์ •๋ฆฌํ•˜์ง€ ์•Š์€ Fetcher, ConsumerNetworkClient, SubscriptionState์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

Fetcher, ConsumerClientNetwork

Fetcher, ConsumerClientNetwork ๊ฐ์ฒด๋Š” ๋ธŒ๋กœ์ปค์˜ ํ† ํ”ฝ ํŒŒํ‹ฐ์…˜์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ Fetch ๋ฐ Poll์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://d2.naver.com/helloworld/0974525
์ถœ์ฒ˜: https://dan.iftodi.com/2019/02/apache-kafka-consumer/

์œ„ ๊ทธ๋ฆผ๋“ค๊ณผ ๊ฐ™์ด ์ปจ์Šˆ๋จธ๋Š” poll() ์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ ์ด๋•Œ ๋ฉ”์‹œ์ง€๋ฅผ Fetcher ๊ฐ์ฒด์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

Fetcher ๊ฐ์ฒด์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ Linked Queue ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, ๋งŒ์•ฝ Fetcher ๊ฐ์ฒด์— ๋ฉ”์‹œ์ง€๊ฐ€ ์—†๋‹ค๋ฉด ConsumerNetworkClient ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋ธŒ๋กœ์ปค๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก(fetch) ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

๋ธŒ๋กœ์ปค๊ฐ€ ConsumerNetworkClient ๊ฐ์ฒด์˜ fetch ์š”์ฒญ์— ์˜ํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๊ฒŒ ๋˜๋ฉด ConsumerNetworkClient๋Š” ์ด ๋ฉ”์‹œ์ง€๋ฅผ Fetcher ๊ฐ์ฒด์— ์ €์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Fetcher ๊ฐ์ฒด๋Š” ์ด์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ปจ์Šˆ๋จธ์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

Fetcher, ConsumerNetworkClient์™€ ๊ด€๋ จ๋œ ์„ค์ •์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
fetch.min.bytes 1 ๋ธŒ๋กœ์ปค๋กœ๋ถ€ํ„ฐ ํ•œ๋ฒˆ์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ๋ฐ์ดํ„ฐ ์‚ฌ์ด์ฆˆ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์˜ต์…˜์—์„œ ์ง€์ •ํ•œ ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ๋ชจ์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ ์„ ์‹œ์—๋Š” ๋ฐ”๋กœ ์š”์ฒญ์— ๋Œ€ํ•ด ์‘๋‹ตํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ˆ„์ ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ฑฐ๋‚˜ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ตœ๋Œ€ ์‹œ๊ฐ„๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์‘๋‹ตํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
fetch.max.bytes 50MB ๋ธŒ๋กœ์ปค๋กœ๋ถ€ํ„ฐ ํ•œ๋ฒˆ์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฐ์ดํ„ฐ ์‚ฌ์ด์ฆˆ์ž…๋‹ˆ๋‹ค. (ํŒŒํ‹ฐ์…˜ ์ดํ•ฉ)
fetch.max.wait.ms 500ms fetch.min.bytes ์ด์ƒ์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์Œ“์ผ๋•Œ๊นŒ์ง€ ์ตœ๋Œ€ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. fetch.min.bytes ์ด์ƒ์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์Œ“์ด์ง€ ์•Š์•„๋„ fetch.max.wait.ms๊ฐ€ ์ง€๋‚˜๋ฉด ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
max.partition.fetch.bytes 1MB Fetcher๊ฐ€ ํŒŒํ‹ฐ์…˜๋ณ„๋กœ ํ•œ๋ฒˆ์— ์ตœ๋Œ€๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” bytes ์ž…๋‹ˆ๋‹ค.
max.poll.records 500 Fetcher๊ฐ€ ํ•œ๋ฒˆ์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ ˆ์ฝ”๋“œ ์ˆ˜ ์ž…๋‹ˆ๋‹ค.

 

SubscriptionState

์ปจ์Šˆ๋จธ๋Š” ์ž์‹ ์ด consume ํ•˜๋Š” ํ† ํ”ฝ, ํŒŒํ‹ฐ์…˜, ์˜คํ”„์…‹ ์ •๋ณด๋ฅผ ์ถ”์  ๋ฐ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์ด ๋ถ€๋ถ„์„ SubscriptionState ๊ฐ์ฒด๊ฐ€ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

 

์ถœ์ฒ˜: https://d2.naver.com/helloworld/0974525

์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๋…์„ ์š”์ฒญํ•œ ํ† ํ”ฝ ์ •๋ณด๋Š” SubscriptionState์˜ subscription์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

 

Consumer - 1

Consumer - 3

 

์ฐธ๊ณ  ์ž๋ฃŒ

'Kafka' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

KafkaConsumer  (0) 2023.04.17
Consumer - 3  (0) 2023.04.17
Consumer - 1  (0) 2023.04.16
Producer - 2  (0) 2023.04.09
Partitioner & Partition  (0) 2023.04.08

๋Œ“๊ธ€