์ด๊ฒ์ ์ผํ์ฑ ๋๊ตฌ(๋ฐฑ์ ์ด ์๋ฃ๋ ํ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํํ ํ์๊ฐ ์์์ ์๋ฏธ)์ด๋ฏ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฐ๋ชฌ ํ๋ก์ธ์ค์ ๋ํ ์์กด๋๊ฐ ์ฌ๋ฏธ์์ต๋๋ค. kafka-connect๋ฅผ ๋ฐ๋ชฌ์ผ๋ก ์คํํ ํ์๊ฐ ์ ํ ์์ต๋๋ค.
๋ณต์ ์ ์ฐจ์ ๋ํ ๊ทํ์ ์๊ฒฌ์ด ์ณ์ต๋๋ค. ๋ณต์์ ์ผํ์ฑ ํ๋์
๋๋ค.
๋ฐฑ์
์ ์ง์์ ์ผ๋ก ์คํ๋๋ ํ๋์
๋๋ค. Kafka ๋ฐ์ดํฐ๋ ์คํธ๋ฆผ์ด๊ณ ๋์ด ์๊ธฐ ๋๋ฌธ์ Kafka์๋ "๋ฐฑ์
์ ์๋ฃํ์ต๋๋ค"๊ฐ ์์ต๋๋ค. ๋ฌผ๋ก x ์ด ๋์ ์ ๋ฐ์ดํฐ๋ฅผ ์ป์ง ๋ชปํ๋ค๋ฉด "์๋ฃ"๋์๋ค๊ณ ๊ฐ์ ํ ์ ์์ง๋ง ์ผ๋ฐํํ ์๋ ์์ต๋๋ค.
์์ธํ ๋ด์ฉ์ #46 ๋ฐ #54๋ฅผ ์ฐธ์กฐํ์ธ์.
@itadventurer
๋ฐฑ์ ์ ์ง์์ ์ผ๋ก ์คํ๋๋ ํ๋์ ๋๋ค.
์ด๊ฒ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ์ฉ๋์ง ์๋ 24x7x365 ๋ฐ์ดํฐ์ ์ฐ์ ์คํธ๋ฆผ์ ๊ฐ์ ํฉ๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์คํธ๋ฆผ์ ํ๋ฃจ์ X์๊ฐ ๋์๋ง ์คํ๋๋ฉฐ ๋ฐฑ์ ์ ๊ทธ ์ดํ์๋ง ๋ฐ์ํ๋ฉฐ ์ค์ ๋ก๋ ๋ฐ์ดํฐ์ ์ผ์ผ ๋ฐฑ์ /์ค๋ ์ท์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
๋ฐฑ์ ํ๋ก์ธ์ค๊ฐ ์ ์์ ์ผ๋ก ์ข ๋ฃ๋์ด ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ ํ X ์๊ฐ(๊ตฌ์ฑ ๊ฐ๋ฅํ ๊ฐ๊ฒฉ) ๋์ ์ ๋ฉ์์ง๊ฐ ์์์ (๋ด๋ถ์ ์ผ๋ก) ๊ฐ์งํ๋ ๋ฐฉ๋ฒ์ด ์์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด๊ฒ์ ๋ํ ๋ ๋ค๋ฅธ(๋ ๊ฐ๋จํ ์ ์๋) ๋์์ ๋ฐฑ์ ์ด ์์๋ ํ์์คํฌํ๊น์ง๋ง ๋ฉ์์ง๋ฅผ ๋ฐฑ์ ํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ์คํ์ ๋ฐฑ์ ๊ณผ ํจ๊ป ์ด๋ป๊ฒ ์๋ํ๋์ง ํ์คํ์ง ์์ต๋๋ค. ์คํ์ ์ ๋จผ์ ๋ฐฑ์ ํ ๋ค์ ์คํ์ ์ ๋ฐฑ์ ํ ํ์์คํฌํ๋ฅผ ์๊ณ ํด๋น ํ์์คํฌํ๊น์ง ๋ฉ์์ง๋ฅผ ๋ฐฑ์ ํ ์ ์์ต๋๋ค.
๋์ ์๋๋ฅผ ์ ๊ฒ ์ด. ์, ์๋ง๋ ํน์ ์์ ๋ฐฑ์
์ ์ํํ๋ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ์ข์ ๊ฒ์
๋๋ค.
๊ทธ๋ฌ๋ ์คํธ๋ฆผ์ด "์๋ฃ"๋์๋์ง ์ฌ๋ถ๋ฅผ ์ฝ๊ฒ ๊ฒฐ์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ฌ์ํ ์ผ์ด ์๋๋๋ค.
๊ทํ์ ๊ฒฝ์ฐ์ ํ ์ ์๋ ์ผ:
kill -9
Kafka Backup์ "์๋ฃ"๋๋ ์ฆ์, ์ฆ ๋ฐ์ดํฐ ์ฐ๊ธฐ๋ฅผ ์๋ฃํฉ๋๋ค. ๋ฐ์ดํฐ ์์ฑ์ ์๋ฃํ ํ ์ฆ์ ์ํํด์ผ ํฉ๋๋ค.๋๋ ์ด๊ฒ์ด ๋งค์ฐ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ผ๋ ๊ฒ์ ์ดํดํ๋ฉฐ #2๋ฅผ ํตํด ์ด์ ๋ํ ๋ ๋ง์ ๋ฌธ์๋ฅผ ์ ๊ณตํ ๊ฒ์ ๋๋ค. v0.1 ๋ฌธ์์ ๊ฒฝ์ฐ ๋ง์ง๋ง ํฐ ๋ฌธ์ ์ด๋ฏ๋ก ์ด๊ฒ์ด ๊ณง ์ผ์ด๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ;)
๋๋ ๋ค์๊ณผ ๊ฐ์ ์ ๊ทผ ๋ฐฉ์์ ๋ณธ๋ค
--snapshot
๋ฅผ ์ถ๊ฐํฉ๋๋ค(๋๋ backup-snapshot.sh
๋ผ๋ ์ ๋๊ตฌ๋ฅผ ์ถ๊ฐํฉ๋๋ค).๋ฐฑ์
์ด "์๋ฃ"๋์์ ๋ ๊ฐ์งํ๋ ๋ฐฉ๋ฒ( --snapshot
ํ๋๊ทธ๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ์๋ง ์ ์ฉ ๊ฐ๋ฅ):
์ด๋ป๊ฒ ์๊ฐํ๋์?
Kafka Backup์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๋๋ก ํ์ฉ
๋ฌธ์ ๋ ๋ฐ๋ก ์ด ๋จ๊ณ์ ์์ต๋๋ค. ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๊ณ์ ์คํํ ์ ์์ต๋๋ค. ์ค๋ ์ท์ ์ํํ ์ ์๋ ํน์ ์ฐฝ๋ง ์์ต๋๋ค. ๋ฐฑ์ ์ ์ธ์ ์ํํ ์ ์๋์ง ๊ฒฐ์ ํ๋ ๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ๋ฌ๋ ค ์์ง ์์ผ๋ฉฐ ์ธ๋ถ ๊ท์ ์๊ตฌ ์ฌํญ์ ๋๋ค.
๋ฐฑ์ ์ด ์์๋ ์๊ฐ์ ๊ธฐ์ตํฉ๋๋ค. ์ต์ ํ์์คํฌํ๊ฐ ์๋ ๋ชจ๋ ๋ ์ฝ๋๋ ๋ฐฑ์ ์ค์ ๋ฌด์๋ฉ๋๋ค.
๋ค, ๊ทธ๊ฒ ์ ํํ ์ ๊ฐ ์๋ฏธํ ๋ฐ์ด๋ฉฐ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํํด์ผ ํ๋ ์๊ตฌ ์ฌํญ์ ์ ๊ฑฐํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค(๋ชจ๋ ์์ฐ์๊ฐ ์๋ฃ๋๋ ์๊ฐ์ ์ก์ผ๋ ค๊ณ ๋ ธ๋ ฅํจ).
ํํฐ์ ์ด ์ผ์ ์๊ฐ(์: 20์ด) ๋์ ์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ์ง ์์ผ๋ฉด ์ ๋ฐ์ดํฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
์ด ์ต์ ์ ๋ค๋ฅธ ์ต์ ๊ณผ ์ํธ ๋ฐฐํ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฒซ ๋ฒ์งธ ๊ฒ์ด ํน์ ๊ธฐ์ค์ ์ ์ ๊ณตํ๊ณ ๋ฉ์์ง๊ฐ ์์ ๋ ์ฐฝ์ ์ฐพ๋ ๋ฐ ์์กดํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ ๋ซ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฌ์ค ๋๋ ์ด๊ฒ์ด Kafka์์๋ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๋ค๊ณ ์ฐ๊ณ ์ถ์์ง๋ง, ๊ธ์ ์ฐ๋ ๋์ ํด๊ฒฐ์ฑ ์ ๋ํ ์์ด๋์ด๋ฅผ ์ป์์ต๋๋ค.
kafka-consumer-groups
๋ ํํฐ์
์์ ์๋น์์ ํ์ฌ ์์น๋ฅผ ๋ฐํํ์ง๋ง ๋ ํฅ๋ฏธ๋กญ๊ฒ๋ ๊ฐ ํน์ ํํฐ์
์ ํ์ฌ ๋ ์คํ์
์ ๋ฐํํฉ๋๋ค. ์ด๊ฒ์ ํน์ ์์ ์์ ํํฐ์
์ ๋ํ ์ต์ ์คํ์
์ ์ป์ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์์ ์๋ฏธํฉ๋๋ค. ํ์ฌ ์ด๊ฒ์ด ์ด๋ป๊ฒ ๋ฌ์ฑ๋๋์ง ์ ํ ๋ชจ๋ฆ
๋๋ค(์ฝ๋๋ฅผ ํ์ธํด์ผ ํจ).
์ด์ (๋ค์) ํน์ ์์ ๋ฐฑ์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ด ๋ช ํํด์ก์ต๋๋ค.
>=
์ด ์๋ ์ฆ์ ํด๋น ํํฐ์
์ ๋ํด ์ ์ฅ๋ ์คํ์
์ ๊ธฐ์ตํ์ญ์์ค. ๋ฐฑ์
์ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ๋ฌด์ํฉ๋๋ค. (https://github.com/itadventurer/kafka-backup/blob/master/src/main/java/de/azapps/kafkabackup/sink/BackupSinkTask.java#L63 ์ฐธ์กฐ)๋น์ ์ ์ด๊ฒ์ด ์ ๋ง ์ฌ์ํ์ง ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
ํ์ฌ ์ด์ ์ ํ ์คํธ ์ค์ํธ๋ฅผ ๊ฐ์ ํ๊ณ ์ฒซ ๋ฒ์งธ ๋ฆด๋ฆฌ์ค๋ฅผ ์ํด Kafka Backup์ ์์ ํํ๋ ๊ฒ์ ๋๋ค(https://github.com/itadventurer/kafka-backup/milestone/1 ์ฐธ์กฐ). ํด๋น ๊ธฐ๋ฅ์ ๋ํ ETA๋ฅผ ์๋ ค๋๋ฆด ์ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ๋ํ PR์ ๊ฒํ ํ๋ ๊ฒ์ ๊ธฐ์๊ฒ ์๊ฐํฉ๋๋ค (๋ํ ์ถ๊ฐ ๊ด๋ฆฌ์๋ฅผ ์ฐพ๊ณ ์์ต๋๋ค ;) ) ์ง๋ฌธ์ด ์์ผ๋ฉด ๊ธฐ๊บผ์ด ๋์ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
๋น์ ์ ์ด๊ฒ์ด ์ ๋ง ์ฌ์ํ์ง ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ ๋ ์ด์ ์ธก๋ฉด(์: Kafka ํด๋ฌ์คํฐ ์ค์ , ๋ชจ๋ํฐ๋ง ๋ฑ)์ ๋ ๊ด์ฌ์ด ์์ต๋๋ค. ๊ทธ๋์ ์ด ๋ถ๋ถ์์ ๋น์ ์ ๋ฏฟ์ต๋๋ค. ์ ์์ ์ ์ ์ ๋ฌด ์ธก๋ฉด์์ ์ด๊ฒ์ด ์ ์ ๋ค๋ฅธ ๋ง์ ์ฌ๋๋ค์๊ฒ ํ์ํ ๊ฒ์ ๋๋ค.
์ด์ ๋ํ PR์ ๊ฒํ ํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค(๋ํ ์ถ๊ฐ ์ ์ง ๊ด๋ฆฌ์๋ฅผ ์ฐพ๊ณ ์์ต๋๋ค ;))
์ ๋ Java/Scala์ ๋ํด ๊ทธ๋ค์ง ๋์์ด ๋์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ด Python, C/C++ ๋๋ ์ต์ํ Go๋ผ๋ฉด ๋ด๊ฐ ๋์ธ ์ ์์ต๋๋ค :P
์ฌ๋ณด์ธ์!
์ฒ์์๋ - kafka ์ฃผ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฑ์
ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ทํ์ ์๋ฃจ์
์ ์ฐพ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค.
๋ ๋ฒ์งธ๋ก - ๋ถํํ๋ Java/Scala์์ ์๋ฌด ๊ฒ๋ ์ธ ์ ์์์ผ๋ฏ๋ก ์ ์ฒด ๋ฐฑ์
์๋ฃจ์
์ ์ํด python์ผ๋ก 'backup-standalone.sh'๋ฅผ ์ํด 'wrapper'๋ฅผ ์ค๋นํ์ต๋๋ค.
https://gist.github.com/FloMko/7adf2e00cd80fe7cc88bb587cde999ce
ํน์ ์์ ๋ฐฑ์
์ ๋ํ ๊ธฐ๋ณธ ์ ๊ณต ์ง์์ ๋ํ ์
๋ฐ์ดํธ๋ฅผ ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด๋ด,
์์
ํด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค! ์์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ์ด๊ฒ์ ์ด ์ ์ฅ์์ ์ถ๊ฐ ์คํฌ๋ฆฝํธ๋ก ์ถ๊ฐํ๊ณ ๋์ค์ ๊ธฐ๋ณธ ์ ๊ณต ์๋ฃจ์
์ผ๋ก ๋์ฒดํ๋ ๊ฒ์ ์์ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ํ ์์ฒญ์ผ๋ก ์์ ๋กญ๊ฒ ์ถ๊ฐํ์ญ์์ค :) ( ./bin/kafka-backup-point-in-time.py
๋๋ ๋ค๋ฅธ ๊ฒ์ผ๋ก ;) )
Connect API์ ์์กดํ์ง ์๋ Go๋ก ์์ฑ๋ ์์ ํ ๋ณ๋์ ๊ตฌํ์ ๊ฒ์ํ๋ ค๊ณ ํฉ๋๋ค. ์ฐธ๊ณ ๋ก. ์ด๋ฏธ ํ๋ก๋์ ํ๊ฒฝ์์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
@akamensky ์๋ฃจ์ ์ ๊ณต์ ํ ์ ์์ต๋๊น? ์๋ฃจ์ ์ ํ ์คํธํ ํ ๊ด์ฐฎ์ ๊ฒ์ ๋๋ค.
@FloMko ๋ฐฉ๊ธ ๊ฒ์ํ์ต๋๋ค. ์ฌ๊ธฐ์์ ์ฐพ์ ์ ์์ต๋๋ค(์ฌ๊ตฌ์ถ๋ ๋ฐ์ด๋๋ฆฌ๋ ํฌํจ)
PR #99๋ฅผ ๋ณด๋ด ์ฃผ์ @WesselVS๋ ๊ฐ์ฌํฉ๋๋ค! ๋ฐฉ๊ธ ๋ง์คํฐ๋ก ๋ณํฉํ์ต๋๋ค. ์ด ๊ฐ์ ์ฌํญ ๋ฐ ๊ธฐํ ์์ ์ฌํญ์ด ํฌํจ๋ ๋ฆด๋ฆฌ์ค๋ฅผ ๊ณง ์ํํ ์์ ์ ๋๋ค.
@akamensky ๋ฉ์ง๋ค! Kafka ๋ฐฑ์ ์ ๊ดํ ๋ ๋ง์ ์์ ์ ๋ณผ ์ ์์ด ์ข์ต๋๋ค. ;)