Consumer Internals
์ปจ์๋จธ๋ ํ ํฝ์ ๋ฉ์์ง๋ฅผ ์ฝ์ด ์ฒ๋ฆฌํ๋ ํด๋ผ์ด์ธํธ์ด๋ฉฐ, ๋ด๋ถ์ ์ผ๋ก๋ ์ปจ์๋จธ ๊ทธ๋ฃน์ด๋ผ๋ ๊ฐ๋ ์ ํตํด ํ์ฅ์ฑ๊ณผ ์์ ์ฑ์ ๋ณด์ฅ๋ฐ๋๋ค.
๊ทธ๋ฃน๊ณผ ์ฝ๋๋ค์ดํฐ
์ปจ์๋จธ ๊ทธ๋ฃน
์ปจ์๋จธ ๊ทธ๋ฃน์ ๋จ์ํ ์ปจ์๋จธ์ ์งํฉ์ด ์๋๋ผ, ์นดํ์นด ๋ธ๋ก์ปค์ ์ํด ์ค์์์ ๊ด๋ฆฌ๋๋ ํ๋์ ๋จ์์ด๋ค.
์ปจ์๋จธ(Consumer): ํ ํฝ์์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ ธ์์(Pull) ์ฒ๋ฆฌํ๋ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ ์ปจ์๋จธ๋ ์์ ์ด ์ฝ์ ์ด๋ฒคํธ์ ์คํ์ (Offset)์ ๊ด๋ฆฌํ๋ฉฐ, ํ์์ ๋ฐ๋ผ ์คํ์ ์ ์ปค๋ฐํ์ฌ ์ด๋๊น์ง ์ฝ์๋์ง ๊ธฐ๋ก
์คํ์ ์ปค๋ฐ ๋ฐฉ์์๋ ์๋ ์ปค๋ฐ(auto-commit)๊ณผ ์๋ ์ปค๋ฐ(manual commit)์ด ์์ผ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ์ฒ๋ฆฌ ์๋ฃ ํ ๋ฐฐ์น ๋จ์๋ก ์ปค๋ฐํ๋ ๋ฐฉ์์ ๊ถ์ฅ
์ปจ์๋จธ ๊ทธ๋ฃน(Consumer Group): ๋์ผํ ๋ชฉ์ ์ ์ํด ํน์ ํ ํฝ์ ๊ตฌ๋ ํ๋ ์ปจ์๋จธ๋ค์ ์งํฉ
์นดํ์นด ์ปจ์๋จธ์ ํ์ฅ์ฑ๊ณผ ๊ณ ๊ฐ์ฉ์ฑ์ ๊ตฌํํ๋ ํต์ฌ ๊ฐ๋
ํ ํฝ์ ๊ฐ ํํฐ์ ์ ์ปจ์๋จธ ๊ทธ๋ฃน ๋ด ๋จ ํ๋์ ์ปจ์๋จธ์๊ฒ๋ง ํ ๋น
์์
10๊ฐ์ ํํฐ์ ์ ๊ฐ์ง ํ ํฝ์ด ์๋ค๋ฉด, ํ ์ปจ์๋จธ ๊ทธ๋ฃน์ ์ต๋ 10๊ฐ์ ์ปจ์๋จธ๋ฅผ ํฌ์ ํ์ฌ ๋ณ๋ ฌ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ ๊ฐ๋ฅ
๋ ์ถ๊ฐํ๋๋ผ๋ ํํฐ์ ์๊ฐ ๋ถ์กฑํ์ฌ ์ถ๊ฐ ์ปจ์๋จธ๋ ์ ํด ์ํ
๋ง์ฝ ๊ทธ๋ฃน ๋ด ์ปจ์๋จธ ์ค ํ๋์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด, ์นดํ์นด๋ ๋ฆฌ๋ฐธ๋ฐ์ค(Rebalance) ๊ณผ์ ์ ํตํด ๋ค๋ฅธ ์ปจ์๋จธ์๊ฒ ์๋์ผ๋ก ์ฌํ ๋น
๊ฐ ๊ทธ๋ฃน์ด ๋ ๋ฆฝ์ ์ธ ์คํ์ ๊ด๋ฆฌ
๋์ผํ ํ ํฝ์ ์ฌ๋ฌ ์ปจ์๋จธ ๊ทธ๋ฃน์ด ๊ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ตฌ๋ ๊ฐ๋ฅ(๋์ผํ ์ด๋ฒคํธ๋ฅผ ์๋ก ๋ค๋ฅธ ๋ชฉ์ ์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ)
๊ทธ๋ฃน ์ฝ๋๋ค์ดํฐ
๊ฐ ์ปจ์๋จธ ๊ทธ๋ฃน์ ๋ธ๋ก์ปค ์ค ํ๋๋ฅผ ๊ทธ๋ฃน ์ฝ๋๋ค์ดํฐ(Group Coordinator)๋ก ํ ๋น๋ฐ์ ๊ด๋ฆฌ๋๋ค.
๊ทธ๋ฃน ์ฝ๋๋ค์ดํฐ(Group Coordinator)
๊ฐ ์ปจ์๋จธ ๊ทธ๋ฃน์ ๋ธ๋ก์ปค ์ค ํ๋๋ฅผ ์ฝ๋๋ค์ดํฐ๋ก ํ ๋น
์ฝ๋๋ค์ดํฐ๋ ๊ทธ๋ฃน ๋ด ์ปจ์๋จธ๋ค์ ์ํ๋ฅผ ์ถ์ ํ๊ณ , ์๋ก์ด ์ปจ์๋จธ๊ฐ ์ฐธ์ฌํ๊ฑฐ๋ ๊ธฐ์กด ์ปจ์๋จธ๊ฐ ์ดํํ ๋ ํํฐ์ ์ฌํ ๋น(๋ฆฌ๋ฐธ๋ฐ์ฑ)์ ์ฃผ๋ํ๋ ์ญํ
์ปจ์๋จธ์ ๊ทธ๋ฃน ์ฐธ์ฌ ๊ณผ์
์ปจ์๋จธ๋ ์์ ์ ์ฝ๋๋ค์ดํฐ์๊ฒ ์์ฒญ์ ๋ณด๋ด ๊ทธ๋ฃน์ ์ฐธ์ฌ
๊ทธ๋ฃน ๋ด ์ฒซ ๋ฒ์งธ๋ก ์ฐธ์ฌํ ์ปจ์๋จธ๊ฐ ๋ฆฌ๋ ์ญํ ์ํ
๋ฆฌ๋๋ ์ฝ๋๋ค์ดํฐ๋ก๋ถํฐ ๊ทธ๋ฃน ๋ฉค๋ฒ ๋ชฉ๋ก๊ณผ ๊ตฌ๋ ํ ํฝ ์ ๋ณด๋ฅผ ๋ฐ์ ์ด๋ค ์ปจ์๋จธ๊ฐ ์ด๋ค ํํฐ์ ์ ํ ๋น๋ฐ์์ง ๊ฒฐ์
๋ฆฌ๋๊ฐ ๊ฒฐ์ ํ ํ ๋น ๊ณํ์ ์ฝ๋๋ค์ดํฐ์๊ฒ ์ ๋ฌํ๋ฉด, ์ฝ๋๋ค์ดํฐ๋ ์ด ๊ณํ์ ๋ชจ๋ ๊ทธ๋ฃน ๋ฉค๋ฒ์๊ฒ ์ ํํ์ฌ ๊ฐ์ ์์ ์ด ๋ด๋นํ ํํฐ์ ์ ์ธ์งํ๊ณ ๋ฉ์์ง ์ฒ๋ฆฌ ์์
๊ทธ๋ฃน ์๋ช
์ฃผ๊ธฐ
ํํธ๋นํธ
์ฝ๋๋ค์ดํฐ๋ ์ปจ์๋จธ๊ฐ ์ ์ ๋์ ์ค์ธ์ง ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธํ๋ฉฐ, ์ด๋ฅผ ์ํด ํํธ๋นํธ(Heartbeat) ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ค.
heartbeat.interval.ms์ปจ์๋จธ๊ฐ ์ฝ๋๋ค์ดํฐ์๊ฒ ์์ ์ด ์ด์์์์ ์๋ฆฌ๊ธฐ ์ํด ํํธ๋นํธ๋ฅผ ๋ณด๋ด๋ ์ฃผ๊ธฐ
session.timeout.ms๋ณด๋ค ๋ฐ๋์ ๋ฎ๊ฒ ์ค์
session.timeout.ms์ฝ๋๋ค์ดํฐ๊ฐ ์ปจ์๋จธ๋ก๋ถํฐ ํํธ๋นํธ๋ฅผ ๋ฐ์ง ๋ชปํ์ ๋, ํด๋น ์ปจ์๋จธ๊ฐ ๋น์ ์ ์ข ๋ฃ๋์๋ค๊ณ ํ๋จํ๊ธฐ๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์ต๋ ์๊ฐ
์ด ์๊ฐ์ด ์ด๊ณผ๋๋ฉด ์ฝ๋๋ค์ดํฐ๋ ํด๋น ์ปจ์๋จธ๋ฅผ ๊ทธ๋ฃน์์ ์ ์ธํ๊ณ ๋ฆฌ๋ฐธ๋ฐ์ฑ์ ์์
๋ฆฌ๋ฐธ๋ฐ์ฑ
๋ฆฌ๋ฐธ๋ฐ์ฑ์ ์ปจ์๋จธ ๊ทธ๋ฃน์ ํ์ฅ์ฑ๊ณผ ๊ณ ๊ฐ์ฉ์ฑ์ ์ํด ํํฐ์ ์ ์์ ๊ถ์ ๋์ ์ผ๋ก ์ฌ๋ถ๋ฐฐํ๋ ๊ณผ์ ์ด๋ค.
๋ฆฌ๋ฐธ๋ฐ์ฑ ๋ฐ์ ์์
๊ทธ๋ฃน์ ์๋ก์ด ์ปจ์๋จธ๊ฐ ์ฐธ์ฌํ ๋
๊ทธ๋ฃน์ ๊ธฐ์กด ์ปจ์๋จธ๊ฐ ์ข ๋ฃ๋๊ฑฐ๋, ์ฅ์ ๋ก ์ธํด ์ธ์ ํ์์์์ ์ด๊ณผํ ๋
๊ตฌ๋ ์ค์ธ ํ ํฝ์ ํํฐ์ ์๊ฐ ๋ณ๊ฒฝ๋ ๋
๋ฆฌ๋ฐธ๋ฐ์ฑ ๊ณผ์ ๊ณผ ์ํฅ
๋ฆฌ๋ฐธ๋ฐ์ฑ์ด ๋ฐ์ํ๋ ๋์, ํด๋น ์ปจ์๋จธ ๊ทธ๋ฃน์ ๋ชจ๋ ์ปจ์๋จธ๋ ์ผ์์ ์ผ๋ก ๋ฉ์์ง ์ฒ๋ฆฌ๋ฅผ ์ค๋จ
์ด ์ค๋จ ์๊ฐ์ ์ต์ํํ๋ ๊ฒ์ด ์ค์
session.timeout.ms,heartbeat.interval.ms๋ฑ์ ์ค์ ์ ํตํด ๋ฆฌ๋ฐธ๋ฐ์ค ๊ฐ์ง ๋ฏผ๊ฐ๋ ์กฐ์ ๊ฐ๋ฅ
ํํฐ์
ํ ๋น ์ ๋ต
๊ฐ ์ปจ์๋จธ ๊ทธ๋ฃน ๋ด์์ ํํฐ์ ์ ์ปจ์๋จธ๋ค์๊ฒ ์ด๋ป๊ฒ ๋ถ๋ฐฐํ ์ง ๊ฒฐ์ ํ๋ ์ ๋ต์ด๋ค.
Range: ํ ํฝ๋ณ๋ก ํํฐ์ ์ ์ฐ์๋ ๋ฒ์๋ก ๊ณ์ฐํ์ฌ ํ ๋นRoundRobin: ๋ชจ๋ ํ ํฝ์ ํํฐ์ ์ ๋ชจ์ ๋ผ์ด๋๋ก๋น ๋ฐฉ์์ผ๋ก ์์๋๋ก ํ ๋นSticky: ๊ธฐ์กด์ ํํฐ์ ํ ๋น์ ์ต๋ํ ์ ์งํ๋ ค ์๋(๋ฆฌ๋ฐธ๋ฐ์ฑ ์ ์ต์ํ์ ํํฐ์ ์ด๋๋ง ๋ฐ์์์ผ ์์ ์ฑ์ ๋์)CooperativeSticky:Sticky์ ๋ต์ ๊ฐ์ ํ์ฌ, "Stop-the-world" ์์ด ์ผ๋ถ ์ปจ์๋จธ๋ ๊ณ์ํด์ ๊ธฐ์กด ํํฐ์ ์ ์ฒ๋ฆฌํ๋๋ก ํ์ฉํ๋ ์ ์ง์ ๋ฆฌ๋ฐธ๋ฐ์ฑ์ ์ง์
๋ฐ์ดํฐ ์์ ๋ฐฉ์
์ปจ์๋จธ๋ ๋ธ๋ก์ปค๊ฐ ๋ฐ์ด์ฃผ๋(Push) ๋ฐฉ์์ด ์๋, ๋ฅ๋์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋(Pull) ๋ชจ๋ธ์ ์ฌ์ฉํ๋ฉฐ, poll() ๋ฉ์๋๋ฅผ ํตํด ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ค.
max.poll.interval.mspoll()ํธ์ถ ์ฌ์ด์ ์ต๋ ํ์ฉ ์๊ฐ.๋ง์ฝ ๋ฉ์์ง ์ฒ๋ฆฌ ๋ก์ง์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ ค ์ด ์๊ฐ์ ์ด๊ณผํ๋ฉด, ์ปจ์๋จธ๋ ๋น์ ์์ผ๋ก ๊ฐ์ฃผ๋์ด ๊ทธ๋ฃน์์ ์ดํ๋๊ณ ๋ฆฌ๋ฐธ๋ฐ์ฑ ๋ฐ์
๋ฐ์ดํฐ ํ์น ๊ด๋ จ ์ฃผ์ ์ค์
fetch.min.bytes: ๋ธ๋ก์ปค๊ฐ ์ปจ์๋จธ์๊ฒ ์๋ต์ ์ฃผ๊ธฐ ์ ๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๋ฐ์ดํฐ์ ์ต์ ํฌ๊ธฐfetch.max.wait.ms:fetch.min.bytes์ ๋๋ฌํ์ง ๋ชปํ๋๋ผ๋, ๋ธ๋ก์ปค๊ฐ ์๋ต์ ์ฃผ๊ธฐ๊น์ง ๋๊ธฐํ๋ ์ต๋ ์๊ฐmax.poll.records:poll()ํ๋ฒ์ ํธ์ถ๋ก ๋ฐํ๋ฐ๋ ์ต๋ ๋ ์ฝ๋ ์
ํธ๋์ญ์
๊ณผ ๋ฐ์ดํฐ ๊ฒฉ๋ฆฌ
ํธ๋์ญ์ ๋ ํ๋ก๋์๊ฐ ๋ณด๋ธ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ๋, ์ปจ์๋จธ๋ ์ด๋ค ์ํ์ ๋ฉ์์ง๊น์ง ์ฝ์์ง ๊ฒฐ์ ํ ์ ์๋ค.
read_uncommitted: ํธ๋์ญ์ ์ ์ปค๋ฐ ์ฌ๋ถ์ ์๊ด์์ด ๋ชจ๋ ๋ฉ์์ง๋ฅผ ์ฝ์read_committed: ์ฑ๊ณต์ ์ผ๋ก ์ปค๋ฐ๋ ํธ๋์ญ์ ์ ๋ฉ์์ง๋ง ์ฝ์
๋ฉ์์ง ์ปค๋ฐ ์ ๋ต
์ปจ์๋จธ๊ฐ ๋ฉ์์ง๋ฅผ ์ด๋๊น์ง ์ฒ๋ฆฌํ๋์ง์ ๋ํ ์คํ์ (Offset)์ ๊ธฐ๋กํ๋ ํ์๋ฅผ ์ปค๋ฐ(Commit)์ด๋ผ๊ณ ํ๋ฉฐ, ์ด ์ปค๋ฐ ์ ๋ต์ ๋ฐ๋ผ ๋ฉ์์ง ์ฒ๋ฆฌ์ ์ ๋ขฐ์ฑ ์์ค์ด ๊ฒฐ์ ๋๋ค.
์๋ ์ปค๋ฐ(
enable.auto.commit=true)poll()ํธ์ถ ์,auto.commit.interval.ms์ฃผ๊ธฐ์ ๋ง์ถฐ ์ด์ ์poll()๋ก ๋ฐํ๋ ๋ง์ง๋ง ์คํ์ ์ ์๋์ผ๋ก ์ปค๋ฐ๋ฉ์์ง ์ฒ๋ฆฌ ์๋ฃ ์ฌ๋ถ์ ๊ด๊ณ์์ด ์ปค๋ฐ์ด ๋ฐ์ํ ์ ์์ด ๋ฐ์ดํฐ ์ ์ค์ด๋ ์ค๋ณต์ ์ํ ์กด์ฌ
์ ์ค: ๋ฉ์์ง ์ฒ๋ฆฌ์ ์คํจํ์ผ๋ ๋ค์
poll()์์ ์๋ ์ปค๋ฐ๋๋ฉด, ํด๋น ๋ฉ์์ง๋ ์ฒ๋ฆฌ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ์ค๋ณต: ๋ฉ์์ง ์ฒ๋ฆฌ๋ ์ฑ๊ณตํ์ผ๋ ์ปค๋ฐ ์ ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด, ์ฌ์์ ํ ๋ง์ง๋ง ์ปค๋ฐ ์ง์ ๋ถํฐ ๋ค์ ์ฒ๋ฆฌ
์๋ ์ปค๋ฐ(
enable.auto.commit=false)๊ฐ๋ฐ์๊ฐ ์ฝ๋์์ ๋ช ์์ ์ผ๋ก ์ปค๋ฐ ์์ ์ ์ ์ดํ๋ ๋ฐฉ์
๋๊ธฐ ์ปค๋ฐ(
commitSync)๋ธ๋ก์ปค๋ก๋ถํฐ ์ปค๋ฐ ์ฑ๊ณต ์๋ต์ ๋ฐ์ ๋๊น์ง ๋ธ๋กํน
์ปค๋ฐ์ด ํ์คํ๊ฒ ๋ณด์ฅ๋์ด ์ ๋ขฐ์ฑ์ด ๋์
๋น๋๊ธฐ ์ปค๋ฐ(
commitAsync)์ปค๋ฐ ์์ฒญ ํ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ฆ์ ๋ค์ ๋ก์ง์ ์ํ
์ฒ๋ฆฌ๋์ ๋์ง๋ง ์ปค๋ฐ ์คํจ ์ ์ฌ์๋๊ฐ ๋ณต์กํ๊ณ , ์์๊ฐ ์ค์ํ ๊ฒฝ์ฐ ์ฃผ์ ํ์
Last updated
Was this helpful?