Transaction Producer
Kafka ํธ๋์ญ์ ํ๋ก๋์๋ ์ ํํ ํ ๋ฒ ์ ์ก(Exactly Once Semantics, EOS)์ ๋ณด์ฅํ๋ฉฐ, ์ฌ๋ฌ ํํฐ์ ๋๋ ์ฌ๋ฌ ํ ํฝ์ ๊ฑธ์น ๋ฉ์์ง๋ฅผ ์์์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ํตํด, ํ๋ก๋์๋ ์ฌ๋ฌ ๋ฉ์์ง๋ฅผ ํ๋์ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ด ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ฑฐ๋ ์คํจ ์ ๋ชจ๋ ๋กค๋ฐฑํ ์ ์๋๋ก ํฉ๋๋ค. ํนํ ๋ถ์ฐ ์์คํ ์์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ๊ณผ ์ ํํ ๋ฉ์์ง ์ฒ๋ฆฌ๊ฐ ํ์ํ ์ํฉ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค.
Kafka ํธ๋์ญ์
ํ๋ก๋์๋?
Kafka ํธ๋์ญ์ ํ๋ก๋์๋ ์ฌ๋ฌ ํํฐ์ ์ ๊ฑธ์ณ ๋ฉ์์ง๋ฅผ ์ ์กํ ๋, ๋ชจ๋ ๋ฉ์์ง๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ฑฐ๋ ์๋๋ฉด ๋ชจ๋ ์คํจํ๋๋ก ๋ณด์ฅํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ฉ์์ง๊ฐ ์ค๋ณต ์์ด ์ ํํ ํ ๋ฒ๋ง ์ ์ก๋๋ Exactly Once Semantics (EOS)๋ฅผ ๋ณด์ฅํ ์ ์์ต๋๋ค.
ํธ๋์ญ์ ์ ํตํด Kafka๋ ํ๋ก๋์๊ฐ ์ฌ๋ฌ ๋ฉ์์ง๋ฅผ ๋ฌถ์ด ์ ์กํ๊ณ , ํด๋น ๋ฉ์์ง๋ค์ด ์ฒ๋ฆฌ๋์์ ๋๋ง ํธ๋์ญ์ ์ ์ปค๋ฐํ๊ณ ์ฒ๋ฆฌ๋์ง ์์์ ๋๋ ๋กค๋ฐฑํ์ฌ ๋ฌดํจํํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
ํธ๋์ญ์
ํ๋ก๋์์ ์ฃผ์ ํน์ง
ํธ๋์ญ์ ์ฒ๋ฆฌ
Kafka ํธ๋์ญ์ ํ๋ก๋์๋ ์ฌ๋ฌ ๋ฉ์์ง๋ฅผ ํ๋์ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ด ์ ์กํฉ๋๋ค. ๋ง์ฝ ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์ปค๋ฐ๋๋ฉด ๋ชจ๋ ๋ฉ์์ง๊ฐ ์ฒ๋ฆฌ๋๋ฉฐ, ์คํจ ์ ๋กค๋ฐฑ๋ฉ๋๋ค.
Exactly Once Semantics (EOS)
ํธ๋์ญ์ ํ๋ก๋์๋ ์ ํํ ํ ๋ฒ ์ ์กํ๋ ๊ฒ์ ๋ณด์ฅํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ค๋ณต ์์ด ๋ฉ์์ง๋ฅผ ํ ๋ฒ๋ง ์ฒ๋ฆฌํ๊ณ , ์ฌ์ ์ก ์ ์ค๋ณต๋์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ฌ๋ฌ ํํฐ์ ๋ฐ ํ ํฝ ์ฒ๋ฆฌ
Kafka ํธ๋์ญ์ ํ๋ก๋์๋ ์ฌ๋ฌ ํํฐ์ ๋๋ ์ฌ๋ฌ ํ ํฝ์ ๊ฑธ์น ๋ฉ์์ง๋ฅผ ํ ๋ฒ์ ํธ๋์ญ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ถ์ฐ ํ๊ฒฝ์์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
ํธ๋์ญ์
ํ๋ก๋์์ ๋์ ์๋ฆฌ
Kafka ํธ๋์ญ์ ํ๋ก๋์๋ ํธ๋์ญ์ ID (Transactional ID)๋ฅผ ํตํด ๊ฐ ํธ๋์ญ์ ์ ๊ด๋ฆฌํฉ๋๋ค. Kafka๋ ์ด ํธ๋์ญ์ ID๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ ๋ฉ์์ง๊ฐ ํธ๋์ญ์ ์ ์ํด ์๋์ง ์ถ์ ํ๊ณ , ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์ปค๋ฐ๋๋ฉด ํด๋น ํธ๋์ญ์ ์ ๋ชจ๋ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ, ๋กค๋ฐฑ๋ ๊ฒฝ์ฐ ๋ฉ์์ง๋ฅผ ๋ฌดํจํํฉ๋๋ค.
ํธ๋์ญ์ ์์
ํธ๋์ญ์ ํ๋ก๋์๋ ํธ๋์ญ์ ID๋ฅผ ์ฌ์ฉํด ํธ๋์ญ์ ์ ์์ํ๊ณ , ๋ฉ์์ง๋ฅผ ์ ์กํฉ๋๋ค. ์ด๋ ์ ์ก๋๋ ๋ชจ๋ ๋ฉ์์ง๋ ํธ๋์ญ์ ๋ด์ ํฌํจ๋ฉ๋๋ค.
๋ฉ์์ง ์ ์ก
ํ๋ก๋์๋ ํธ๋์ญ์ ์ด ์งํ ์ค์ธ ๋์ ์ฌ๋ฌ ํํฐ์ ์ด๋ ํ ํฝ์ ๋ฉ์์ง๋ฅผ ์ ์กํ ์ ์์ต๋๋ค. ์ด ๋ฉ์์ง๋ค์ ํธ๋์ญ์ ์ด ์ปค๋ฐ๋๊ธฐ ์ ๊น์ง๋ ์ ์ ์ ์ธ ์ํ๋ก ๋จ์์์ต๋๋ค.
ํธ๋์ญ์ ์ปค๋ฐ ๋๋ ๋กค๋ฐฑ
ํธ๋์ญ์ ์ด ์ปค๋ฐ๋๋ฉด, ํธ๋์ญ์ ๋ด ๋ชจ๋ ๋ฉ์์ง๊ฐ ์ ์์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๋ฐ๋ฉด, ํธ๋์ญ์ ์ด ์คํจํ๊ฑฐ๋ ๋กค๋ฐฑ๋๋ฉด ํด๋น ๋ฉ์์ง๋ ๋ฌดํจํ๋ฉ๋๋ค.
ํธ๋์ญ์
ํ๋ก๋์ ์ค์
Kafka์์ ํธ๋์ญ์
ํ๋ก๋์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด, transactional.id
๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค.
transactional.id
๋ Kafka๊ฐ ํธ๋์ญ์
์ ์ถ์ ํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ณ ์ ID์
๋๋ค. ์ด ID๋ ๊ฐ ํ๋ก๋์ ์ธ์คํด์ค๋ง๋ค ๋ถ์ฌ๋๋ฉฐ, Kafka๋ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํธ๋์ญ์
์ ์ํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
ํธ๋์ญ์ ํ๋ก๋์ ์ค์ ์์:
์ ์ฝ๋๋ ํธ๋์ญ์
ํ๋ก๋์๋ฅผ ์ค์ ํ๊ณ , beginTransaction()
์ ํธ์ถํด ํธ๋์ญ์
์ ์์ํ ํ, ์ฌ๋ฌ ๋ฉ์์ง๋ฅผ ์ ์กํ ๋ค commitTransaction()
์ผ๋ก ํธ๋์ญ์
์ ์ปค๋ฐํ๋ ์์ ์
๋๋ค. ๋ง์ฝ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด, abortTransaction()
์ ํธ์ถํ์ฌ ํธ๋์ญ์
์ ๋กค๋ฐฑํฉ๋๋ค.
ํธ๋์ญ์
์ปจ์๋จธ
ํธ๋์ญ์
ํ๋ก๋์๊ฐ ๋ณด๋ธ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋ Kafka ์ปจ์๋จธ๋ ํธ๋์ญ์
์ปค๋ฐ ์ฌ๋ถ๋ฅผ ์ธ์ํ๊ณ , ์ปค๋ฐ๋ ๋ฉ์์ง๋ง ์ฝ์ ์ ์๋๋ก ์ค๊ณ๋์ด ์์ต๋๋ค. Kafka ์ปจ์๋จธ๋ isolation.level
์ค์ ์ ํตํด ์ปค๋ฐ๋ ๋ฉ์์ง๋ง ์๋นํ ์ง, ๋กค๋ฐฑ๋ ๋ฉ์์ง๋ ํฌํจํด ์ฝ์์ง๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
isolation.level=read_committed
: ์ปค๋ฐ๋ ํธ๋์ญ์ ์ ๋ฉ์์ง๋ง ์ฝ์ต๋๋ค.isolation.level=read_uncommitted
: ๋ชจ๋ ํธ๋์ญ์ ์ ๋ฉ์์ง๋ฅผ ์ฝ์ต๋๋ค(๋กค๋ฐฑ๋ ๋ฉ์์ง๋ ํฌํจ).
์ปจ์๋จธ ์ค์ ์์
์ด ์ค์ ์ ํตํด, ์ปจ์๋จธ๋ ํธ๋์ญ์ ์ด ์ปค๋ฐ๋ ๋ฉ์์ง๋ง ์ฒ๋ฆฌํ๊ฒ ๋์ด ์ ํํ ๋ฉ์์ง ์ฒ๋ฆฌ๋ฅผ ๋ณด์ฅํฉ๋๋ค.
์ฅ์
์ ํํ ๋ฐ์ดํฐ ์ผ๊ด์ฑ: ํธ๋์ญ์ ํ๋ก๋์๋ ์ฌ๋ฌ ํํฐ์ ๋๋ ์ฌ๋ฌ ํ ํฝ์ ๊ฑธ์น ๋ฉ์์ง๋ฅผ ์์์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ผ๊ด์ฑ ์๋ ๋ฉ์์ง ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
Exactly Once Semantics (EOS): ํธ๋์ญ์ ํ๋ก๋์๋ฅผ ์ฌ์ฉํ๋ฉด, Kafka๋ ์ค๋ณต ์์ด ์ ํํ ํ ๋ฒ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ ๋ฉ์์ง์ ์ค๋ณต ์ ์ก์ ๋ฐฉ์งํ๊ณ , ๋ฉ์์ง๊ฐ ํ ๋ฒ๋ง ์ฒ๋ฆฌ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
๋ถ์ฐ ์์คํ ๊ฐ์ ์ผ๊ด์ฑ ์ ์ง: Kafka ํธ๋์ญ์ ์ ํตํด, Kafka ์ธ๋ถ ์์คํ (์: ๋ฐ์ดํฐ๋ฒ ์ด์ค)๊ณผ ํตํฉํ์ฌ ์ฌ๋ฌ ์์คํ ๊ฐ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Kafka์ ๋ฉ์์ง๋ฅผ ์ ์กํ๋ ๋์์ ์ธ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ํธ๋์ญ์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๋จ์
์ฑ๋ฅ ์ ํ: ํธ๋์ญ์ ์ฒ๋ฆฌ๋ ์ฌ๋ฌ ํํฐ์ ์ด๋ ํ ํฝ์ ๊ฑธ์ณ ์์์ ์ผ๋ก ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๊ธฐ ๋๋ฌธ์, ์ผ๋ฐ ํ๋ก๋์์ ๋นํด ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ฆด ์ ์์ต๋๋ค. ํนํ, ๋ง์ ๋ฉ์์ง๋ฅผ ํ ๋ฒ์ ํธ๋์ญ์ ์ผ๋ก ์ฒ๋ฆฌํ ๋ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ณต์ก์ฑ ์ฆ๊ฐ: ํธ๋์ญ์ ์ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ ์ ์์ต๋๋ค. ํธ๋์ญ์ ์์, ์ปค๋ฐ, ๋กค๋ฐฑ ๋ฑ์ ์ฒ๋ฆฌ๊ฐ ์ถ๊ฐ๋๋ฉฐ, ์ด๋ฅผ ํตํด ์ ์ฒด ์์คํ ์์์ ์ค๋ฅ ์ฒ๋ฆฌ์ ๋ณต๊ตฌ ๋ก์ง์ด ๋์ฑ ๋ณต์กํด์ง ์ ์์ต๋๋ค.
๊ฒฐ๋ก
Kafka ํธ๋์ญ์ ํ๋ก๋์๋ ์ ํํ ๋ฉ์์ง ์ฒ๋ฆฌ์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ค๊ณ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ํนํ, ์ฌ๋ฌ ํํฐ์ ์ด๋ ์ฌ๋ฌ ํ ํฝ์ ๊ฑธ์ณ ๋ฉ์์ง๋ฅผ ์์์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ด Exactly Once Semantics (
EOS)๋ฅผ ๊ตฌํํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
ํธ๋์ญ์ ํ๋ก๋์๋ ๋ฐ์ดํฐ ์ค๋ณต ์์ด ํ ๋ฒ๋ง ์ฒ๋ฆฌํด์ผ ํ๋ ์ค์ํ ์์คํ ์์ ํ์์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ํ์ง๋ง, ์ฑ๋ฅ ์ ํ์ ๋ณต์ก์ฑ ์ฆ๊ฐ๋ผ๋ ํ๊ณ๊ฐ ์๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ๊ณ ๋ คํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ ํ ์ ์ฉํด์ผ ํฉ๋๋ค.
Last updated