Idempotent Producer
Kafka์ ๋ฉฑ๋ฑ์ฑ ํ๋ก๋์(Idempotent Producer)๋ ๋ฉ์์ง ์ค๋ณต ์ ์ก ๋ฐฉ์ง๋ฅผ ์ํ ๊ธฐ๋ฅ์ผ๋ก, ํ๋ก๋์๊ฐ ๋์ผํ ๋ฉ์์ง๋ฅผ ์ฌ๋ฌ ๋ฒ ๋ณด๋ด๋๋ผ๋ Kafka๋ ๋ฉ์์ง๋ฅผ ํ ๋ฒ๋ง ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋ณด์ฅํฉ๋๋ค.
๋ฉฑ๋ฑ์ฑ ํ๋ก๋์๋ฅผ ์ฌ์ฉํ๋ฉด ๋คํธ์ํฌ ์ค๋ฅ๋ ์ฌ์๋ ๋ฑ์ผ๋ก ์ธํด ์ค๋ณต๋ ๋ฉ์์ง๊ฐ ๋ธ๋ก์ปค์ ์ ์ก๋๋ ๊ฒฝ์ฐ์๋, Kafka๊ฐ ์ด๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํด ์ค๋ณต ์์ด ์ ํํ ํ ๋ฒ ์ ์ก(Exactly Once Delivery)์ ๊ตฌํํ ์ ์์ต๋๋ค.
Kafka ๋ฉฑ๋ฑ์ฑ ํ๋ก๋์๋?
๋ฉฑ๋ฑ์ฑ(idempotency)์ ๋์ผํ ์์ฒญ์ ์ฌ๋ฌ ๋ฒ ์ํํด๋ ๊ฒฐ๊ณผ๊ฐ ๋ณํ์ง ์๋ ํน์ฑ์ ์๋ฏธํฉ๋๋ค.
Kafka์์ ๋ฉฑ๋ฑ์ฑ ํ๋ก๋์๋ ํ๋ก๋์์ ์ค๋ณต ๋ฉ์์ง ์ ์ก์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค. ํ๋ก๋์๊ฐ ๊ฐ์ ๋ฉ์์ง๋ฅผ ์ฌ๋ฌ ๋ฒ ์ ์กํ ๋, Kafka๋ ์ด๋ฅผ ์ค๋ณต ์ฒ๋ฆฌํ์ง ์๊ณ ํ ๋ฒ๋ง ์ฒ๋ฆฌํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
Kafka์์ ๋ฉฑ๋ฑ์ฑ ํ๋ก๋์๋ ๋ฉ์์ง ์ ์ก์ด ์คํจํ๊ฑฐ๋ ๋คํธ์ํฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํด ์ฌ์๋๊ฐ ํ์ํ ๋, ์ค๋ณต๋ ๋ฉ์์ง๊ฐ ์ ์ก๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
๋ฉฑ๋ฑ์ฑ ํ๋ก๋์์ ์ฃผ์ ํน์ง
๋ฉ์์ง ์ค๋ณต ์ ์ก ๋ฐฉ์ง: ํ๋ก๋์๊ฐ ๊ฐ์ ๋ฉ์์ง๋ฅผ ์ฌ๋ฌ ๋ฒ ์ ์กํ๋๋ผ๋ Kafka๋ ์ค๋ณต๋ ๋ฉ์์ง๋ฅผ ํ ๋ฒ๋ง ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์๋ ์ ์ค๋ณต ๋ฉ์์ง๊ฐ ๋ฐ์ํ์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
ํ๋ก๋์์ ์์ ์ฑ ํฅ์: Kafka๋ ๋ฉฑ๋ฑ์ฑ ํ๋ก๋์ ์ฌ์ฉ ์ ํ๋ก๋์ ID(Producer ID, PID)์ ์ํ์ค ๋๋ฒ๋ฅผ ํตํด ๊ฐ ๋ฉ์์ง๋ฅผ ์ถ์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฉ์์ง ์ค๋ณต๊ณผ ์์ ๋ณด์ฅ์ ์ง์ํ๋ฉฐ, ๋คํธ์ํฌ ์ฅ์ ๋๋ ๋ธ๋ก์ปค ์ฅ์ ์์๋ ๋ฉ์์ง๋ฅผ ์ ํํ ํ ๋ฒ ์ฒ๋ฆฌํฉ๋๋ค.
์ ํํ ํ ๋ฒ ์ ์ก(Exactly Once Delivery): ๋ฉฑ๋ฑ์ฑ ํ๋ก๋์๋ ๋ฉ์์ง๋ฅผ ์ ํํ ํ ๋ฒ ์ ์กํ๋ ๊ฒ์ ๋ณด์ฅํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ํนํ ์ฅ์ ๋ณต๊ตฌ ํ์๋ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ ์ ํ ๋ ์ ์ฉํฉ๋๋ค.
๋์ ์๋ฆฌ
Kafka์ ๋ฉฑ๋ฑ์ฑ ํ๋ก๋์๋ ๊ฐ ํ๋ก๋์ ์ธ์คํด์ค์ ๊ณ ์ ํ Producer ID (PID)๋ฅผ ํ ๋นํ์ฌ, ๋ฉ์์ง๋ฅผ ์ ์กํ ๋๋ง๋ค ์ํ์ค ๋๋ฒ์ ํจ๊ป ๋ฉ์์ง๋ฅผ ๋ธ๋ก์ปค์ ์ ์กํฉ๋๋ค.
Producer ID: Kafka๋ ๊ฐ ํ๋ก๋์์ ๊ณ ์ ํ ID๋ฅผ ๋ถ์ฌํฉ๋๋ค. ์ด ID๋ ํ๋ก๋์ ์ธ์คํด์ค๊ฐ ์ ์กํ๋ ๋ชจ๋ ๋ฉ์์ง์ ํฌํจ๋ฉ๋๋ค.
์ํ์ค ๋๋ฒ: ํ๋ก๋์๋ ๊ฐ ๋ฉ์์ง์ ์ํ์ค ๋๋ฒ๋ฅผ ์ถ๊ฐํฉ๋๋ค. Kafka ๋ธ๋ก์ปค๋ ํด๋น ์ํ์ค ๋๋ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฉ์์ง์ ์์๋ฅผ ์ถ์ ํ๊ณ , ์ค๋ณต๋ ์ํ์ค ๋๋ฒ๊ฐ ์ ์ก๋ ๊ฒฝ์ฐ ์ด๋ฅผ ๋ฌด์ํฉ๋๋ค.
์ฌ์ ์ก ์ ์ค๋ณต ์ฒ๋ฆฌ ๋ฐฉ์ง:
๋คํธ์ํฌ ์ค๋ฅ๋ ์ฌ์๋ ์ํฉ์์, ํ๋ก๋์๊ฐ ๊ฐ์ ๋ฉ์์ง๋ฅผ ์ฌ๋ฌ ๋ฒ ์ ์กํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ Kafka๋ PID์ ์ํ์ค ๋๋ฒ๋ฅผ ์ฌ์ฉํด ์ค๋ณต๋ ๋ฉ์์ง๋ฅผ ์๋์ผ๋ก ํํฐ๋งํ๊ณ , ํ ๋ฒ๋ง ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
์ค๋ณต ์ ์ก๋ ๋ฉ์์ง๋ฅผ Kafka๊ฐ ์๋์ผ๋ก ๋ฌด์ํ๋ฏ๋ก, ์ค๋ณต ๋ฉ์์ง๋ก ์ธํ ๋ถ์์ฉ์ด ๋ฐ์ํ์ง ์์ต๋๋ค.
๋ฉฑ๋ฑ์ฑ ํ๋ก๋์ ์ค์
Kafka์์ ๋ฉฑ๋ฑ์ฑ ํ๋ก๋์๋ฅผ ํ์ฑํํ๋ ค๋ฉด enable.idempotence
์ค์ ์ true
๋ก ์ค์ ํด์ผ ํฉ๋๋ค. ์ด ์ค์ ์ ํตํด Kafka๋ ํ๋ก๋์์๊ฒ ๊ณ ์ ํ Producer ID๋ฅผ ํ ๋นํ๊ณ , ๋ฉ์์ง ์ ์ก ์ ์ค๋ณต ๋ฉ์์ง๋ฅผ ๋ฐฉ์งํ๋ ๊ธฐ๋ฅ์ ํ์ฑํํฉ๋๋ค.
์ ์ฝ๋๋ฅผ ๋ณด๋ฉด enable.idempotence
๊ฐ true
๋ก ์ค์ ๋์ด ์์ด Kafka ํ๋ก๋์๋ ๋ฉฑ๋ฑ์ฑ ๋ชจ๋๋ก ๋์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฉ์์ง ์ค๋ณต ๋ฐฉ์ง์ ์ ํํ ํ ๋ฒ ์ ์ก(Exactly Once Delivery)์ด ๋ณด์ฅ๋ฉ๋๋ค.
๋ฉฑ๋ฑ์ฑ ํ๋ก๋์์ ํธ๋์ญ์
Kafka์ ํธ๋์ญ์ ๊ธฐ๋ฅ๊ณผ ๋ฉฑ๋ฑ์ฑ ํ๋ก๋์๋ ์์ฃผ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค. Kafka์์ ํธ๋์ญ์ ์ ์ฌ๋ฌ ๋ฉ์์ง๋ฅผ ์์์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๋ฉฑ๋ฑ์ฑ ํ๋ก๋์๋ฅผ ์ฌ์ฉํด ์ค๋ณต ์ ์ก์ ๋ฐฉ์งํ๊ณ ์ ํํ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๋ฉฑ๋ฑ์ฑ ํ๋ก๋์๋ฅผ ํธ๋์ญ์ ๋ชจ๋๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ, ํ ๋ฒ์ ์ฌ๋ฌ ํํฐ์ ์ ์ ์ก๋๋ ๋ฉ์์ง๋ค์ด ๋ชจ๋ ์ฑ๊ณตํ๊ฑฐ๋ ๋ชจ๋ ์คํจํ๋๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด Exactly Once Semantics (EOS)๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
๋ฉฑ๋ฑ์ฑ ํ๋ก๋์์ ์ฅ์
๋ฉ์์ง ์ค๋ณต ๋ฐฉ์ง: ๋คํธ์ํฌ ์ฅ์ ๋ ์ฌ์๋ ์ํฉ์์ ์ค๋ณต ๋ฉ์์ง๋ฅผ ๋ฐฉ์งํ๊ณ , ๋ฉ์์ง๋ฅผ ์ ํํ ํ ๋ฒ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
์์ ์ฑ ํฅ์: PID์ ์ํ์ค ๋๋ฒ๋ฅผ ์ฌ์ฉํด ๋ฉ์์ง์ ์ค๋ณต ์ ์ก์ ๊ด๋ฆฌํ๋ฉฐ, ์ด๋ฅผ ํตํด ์ฅ์ ์ํฉ์์๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
์ ํํ ํ ๋ฒ ์ ์ก(Exactly Once Delivery): ๋ฉฑ๋ฑ์ฑ ํ๋ก๋์๋ ๋ฉ์์ง๋ฅผ ์ ํํ ํ ๋ฒ๋ง ์ ์กํ๋ ๊ฒ์ ๋ณด์ฅํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ Kafka์์ ๋ฐ์ดํฐ ์์ค์ด๋ ์ค๋ณต์ ํ์ฉํ์ง ์์์ผ ํ ๊ฒฝ์ฐ์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
ํธ๋์ญ์ ๊ณผ ์ฐ๊ณ: ๋ฉฑ๋ฑ์ฑ ํ๋ก๋์๋ Kafka์ ํธ๋์ญ์ ๊ธฐ๋ฅ๊ณผ ๊ฒฐํฉํด ์ฌ๋ฌ ๋ฉ์์ง ๋๋ ํํฐ์ ๊ฐ์ ์์์ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
๋ฉฑ๋ฑ์ฑ ํ๋ก๋์์ ํ๊ณ
๋ฉฑ๋ฑ์ฑ ํ๋ก๋์๋ ๋จ์ผ ํํฐ์ ๋ด์์์ ์ค๋ณต ์ ์ก์ ๋ฐฉ์งํฉ๋๋ค. ์ฆ, ๋์ผํ ํํฐ์ ์ ๋ฉ์์ง๋ฅผ ์ค๋ณต ์ ์กํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฐ๋ ๋งค์ฐ ํจ๊ณผ์ ์ด์ง๋ง, ๋ค๋ฅธ ํํฐ์ ์ ๋ฉ์์ง๋ฅผ ์ค๋ณต ์ ์กํ๋ ๊ฒฝ์ฐ์๋ ๋ณ๋์ ๊ด๋ฆฌ๊ฐ ํ์ํ ์ ์์ต๋๋ค.
Last updated