[Kafka] Consumer
consumer ์ญํ
์ปจ์๋จธ๋ ๋ฉ์์ง๋ฅผ ๊ฐ์ ธ์ค๋ ์ญํ ์ ํฉ๋๋ค. ์ด ๋ ์ด๋ ๋ฉ์์ง๋ฅผ ๊ฐ์ ธ์์ผ ํ๋์ง๋ฅผ ๊ฒฐ์ ํด์ผ ํ๋ฏ๋ก offset ์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์นดํ์นด์์๋ consumer ๊ฐ ๊ด๋ฆฌํ๋ offset์ __consumer_offset
ํ ํฝ์ ์ ์ฅํฉ๋๋ค. ๊ธฐ๋กํ๋ ์ ๋ณด์๋ ์ปจ์๋จธ ๊ทธ๋ฃน, topic, partition ์ ๋ณด๊ฐ ํจ๊ป ๋ค์ด์์ต๋๋ค. ๊ทธ ์ด์ ๋ ์ปจ์๋จธ๋ ์ธ์ ๋ ์ปจ์๋จธ ๊ทธ๋ฃน์ leave/join ํ ์ ์๋๋ฐ, ๊ทธ ๊ณผ์ ์์ ์๋กญ๊ฒ join ๋ consumer๊ฐ ๋ฉ์์ง๋ฅผ ์ฝ์ ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ทธ๋ฃน ์ฝ๋๋ค์ดํฐ
๊ทธ๋ฃน ์ฝ๋๋ค์ดํฐ์ ์ญํ ์ ์ปจ์๋จธ ๊ทธ๋ฃน์ ๊ด๋ฆฌํฉ๋๋ค. ์ฃผ๋ก ๋ฆฌ๋ฐธ๋ฐ์ฑ
๊ณผ์ ์ ํตํด ์ปจ์๋จธ ๊ทธ๋ฃน๋ด ์ปจ์๋จธ๋ค์ ๊ด๋ฆฌํฉ๋๋ค. ์ปจ์๋จธ๋ค์ leave/join์ ํตํด ๊ทธ๋ฃน์ ์ธ์ ๋ ์ง ๋๊ฐ๋ค ๋ค์ด์ฌ ์ ์๊ณ ์ด ๊ณผ์ ์ ์ฝ๋๋ค์ดํฐ์๊ฒ ์๋ ค์ ธ ์ปจ์๋จธ ๊ทธ๋ฃน ๋ด ์ปจ์๋จธ๊ฐ ์ด๋ค ํํฐ์
์์ ๋ฉ์์ง๋ฅผ ์ฝ์ด์ผ ํ๋์ง ๊ด๋ฆฌํฉ๋๋ค. ๋ํ ์ฝ๋๋ค์ดํฐ๋ ์ปจ์๋จธ๋ค์ ๋ณ๊ฒฝ์ ๊ฐ์งํ๊ธฐ ์ํด heartbeat
๋ฅผ ์๋ก ์ฃผ๊ณ ๋ฐ์ต๋๋ค. heartbeat
๋ ์ปจ์๋จธ๊ฐ ์ด์์๋์ง ์ ๋์ํ๋ ์ง๋ฅผ ํ๋จํ๊ณ ์ปจ์๋จธ ๊ทธ๋ฃน์ ๋ฆฌ๋ฐธ๋ฐ์ฑํ ์ง ๋ง์ง ๊ฒฐ์ ํฉ๋๋ค.
๋ค์์ heartbeat ๊ด๋ จ ์ต์
์
๋๋ค.
- heartbeat.interval.ms ์ฝ๋๋ค์ดํฐ์๊ฒ ์ปจ์๋จธ๋ ์์ ์ด ์ด์์์์ ๋ํ๋ด๋ ์ ํธ์ด๋ค. ๋๋ฌด ํฐ ๊ฐ์ ๊ฐ์ง๊ฒ ๋๋ฉด ์ด์์๋์ง ์๋์ง ํ๋จ์ ๋น ๋ฅด๊ฒ ํ ์์๊ฒ ๋๊ณ , ๋๋ฌด ์์ ๊ฐ์ ๊ฐ์ง๊ฒ ๋๋ฉด ๋คํธ์ํฌ call ์ด ๋ง์์ง๋ฏ๋ก ์ ์ ํ ๊ฐ์ ์ ํํด์ผ ํ๋ค. session.timeout.ms ์ 1/3 ์์ค์ผ๋ก ์ค์ ํ๋ค.
- session.timeout.ms ์ปจ์๋จธ๊ฐ 10์ด(default)๋์ heartbeat๋ฅผ ๋ฐ์ง ๋ชปํ๋ฉด, ์ปจ์๋จธ์๊ฒ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค๊ณ ํ๋จํ๊ณ ์ปจ์๋จธ ๊ทธ๋ฃน๋ด ์ปจ์๋จธ๋ค์ ๋ฆฌ๋ฐธ๋ฐ์ฑํฉ๋๋ค.
- max.poll.interval.ms ์ปจ์๋จธ๋ ์ฃผ๊ธฐ์ ์ผ๋ก poll()์ ์์ฒญํด์ผ ํ๋๋ฐ, 5๋ถ(default)๋์ ์์ฒญ์ ํ์ง ์๊ฒ๋๋ฉด ์ฝ๋๋ค์ดํฐ๋ ํด๋น ์ปจ์๋จธ์ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค๊ณ ํ๋จํ๊ณ ๊ทธ๋ฃน์ ๋ฆฌ๋ฐธ๋ฐ์ฑํฉ๋๋ค.
Static Membership
๋ฆฌ๋ฐธ๋ฐ์ฑ
์ ์ปจ์๋จธ๊ฐ ๋๊ฐ์ ๋ ๋๋ ๊ทธ๋ฃน์ ๋ค์ด์์ ๋ ์ํ๋๋ฉฐ cost๊ฐ ๋์ ์์
์
๋๋ค.
์๋ฅผ ๋ค์ด, ์ปจ์๋จธ๊ฐ 10๊ฐ๋ก ๊ตฌ์ฑ๋ ์ปจ์๋จธ ๊ทธ๋ฃน์ด ์๊ณ , ๊ฐ ์ปจ์๋จธ์ hw/sw ์
๋ฐ์ดํธ ๊ฐ์ ์์
์ด ์๋ค๊ณ ๊ฐ์ ํ ๋, 20๋ฒ์ ๋ฆฌ๋ฐธ๋ฐ์ฑ์ด ์ผ์ด๋๊ฒ ๋๋ฏ๋ก ์ด๋ ์ด์์ค์ธ ์๋น์ค์์๋ ํฐ ํ๊ฒฉ์ ์
๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์, ์นดํ์นด์์๋ ๊ทธ๋ฃน ๋ด ์ปจ์๋จธ๋ค์๊ฒ id ๋ฅผ ๋ถ์ฌํ์ฌ, ๊ธฐ์กด ์ปจ์๋จธ ๊ทธ๋ฃน์ ์ผ์์ด๋ผ๋ ๊ฒ์ ์๋ฆฌ๊ธฐ ์ํจ์ด๋ผ๋ ๋ชฉ์ ์ผ๋ก static membership ์ด๋ผ๋ ๊ฐ๋ ์ ๋์ ํฉ๋๋ค.
- static membership ์ ์ฉํ์ง ์์์ ๊ฒฝ์ฐ
์ฒซ๋ฒ์งธ ์ด๋ฏธ์ง๋ฅผ ๋ณด๋ฉด /172.31.5.8 ํธ์คํธ๋ 0 /172.31.5.39 ํธ์คํธ๋ 1 /172.31.6.117 ํธ์คํธ๋ 2 ๋ฒ ํํฐ์ ์ ์ฐ๊ฒฐ๋์ด ์๋ ๋ชจ์ต์ ๋ณผ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ /172.31.5.8 ํธ์คํธ๋ฅผ ์ข ๋ฃ์ํค๊ณ , ๋ค์ ์๋ฒ๋ฅผ ํค๊ฒ ๋๋ฉด, ํด๋น ์ปจ์๋จธ๊ฐ ์ปจ์๋จธ๊ทธ๋ฃน์ ๋ค์ด์ค๋ฉด์ ์ฝ๋๋ค์ดํฐ๋ ๋ฆฌ๋ฐธ๋ฐ์ฑ์ ์งํํฉ๋๋ค. ๋ฆฌ๋ฐธ๋ฐ์ฑ์ ํ๊ฒ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๊ฐ์ ํธ์คํธ๊ฐ ์ฐ๊ฒฐ๋ ํํฐ์ ๋ฒํธ๊ฐ ๋ฐ๋๋ ๋ชจ์ต์ ๋ณผ ์ ์์ต๋๋ค.
- static membership ์ ์ฉํ์ ๊ฒฝ์ฐ
์ฒซ๋ฒ์งธ ์ด๋ฏธ์ง๋ฅผ ๋ณด๋ฉด /172.31.5.39 ํธ์คํธ๋ 0 /172.31.5.8 ํธ์คํธ๋ 1 /172.31.6.117 ํธ์คํธ๋ 2 ๋ฒ ํํฐ์
์ ์ฐ๊ฒฐ๋์ด ์๋ ๋ชจ์ต์ ๋ณผ ์ ์์ต๋๋ค. ์ถ๊ฐ๋ก consumerID๋ฅผ ๋ณด๋ฉด ์์ ์นดํ์นด์์ ์์ฒด์ ์ผ๋ก ์์ฑํด์ค id ์ ๋ค๋ฅด๊ฒ ๊ณ ์ ์ id๋ฅผ ๋ถ์ฌํ ๋ชจ์ต์ ๋ณผ ์ ์์ต๋๋ค. (group.instance.id
property ์ ๊ฐ์ ๋ถ์ฌํด์ฃผ๊ธฐ๋ง ํ๋ฉด ์คํํฑ ๋ฉค๋ฒ์ญ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.)
๋๋ฒ์งธ ์ด๋ฏธ์ง๋ 8๋ฒ ํธ์คํธ๊ฐ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๊ฐ ๋์๊ณ , ์ฝ๋๋ค์ดํฐ๋ 1๋ฒ ํํฐ์ ์ ์ฐ๊ฒฐ๋ ์ปจ์๋จธ์ ์ข ๋ฃ๋ก ๋ฆฌ๋ฐธ๋ฐ์ฑ์ ์์ํฉ๋๋ค. ๊ทธ ๊ณผ์ ์์ 39๋ฒ ํธ์คํธ๊ฐ 8๋ฒ ํธ์คํธ๊ฐ ๋ด๋นํ๋ ํํฐ์ ์ ๋ด๋นํ๊ฒ ๋์์ต๋๋ค. ์ถ๊ฐ์ ์ผ๋ก ๋ณผ ๋ถ๋ถ์, leave ๋ช ๋ น์ ํตํด์๋ ๋ฆฌ๋ฐธ๋ฐ์ฑ์ด ๋๋ฉด์ ๊ฐ๊ฐ์ ์ปจ์๋จธ๋ค์ด ๋ด๋นํ๋ ํํฐ์ ๋ค์ด ๋ณ๊ฒฝ๋์ด์ผ ํ๋๋ฐ ์คํํฑ ๋ฉค๋ฒ์ญ์ ๋ถ์ฌํ ์ปจ์๋จธ๋ค์๊ฒ์๋ ๋ฐ๋์ง ์์๋ค๋ ๊ฒ์ ์ฃผ๋ชฉํ๋ฉด ์ข์ ๊ฑฐ ๊ฐ์ต๋๋ค.