๋์ค ํญ๋ชฉ์ ์์ ์ด ๋์์ ์๋ฃ๋์ง ์๋๋ก ํ์ฌ Dataflow ์์ ์๋๋ฅผ ์ ํ์ํค๋ ์์ ํญ๋ชฉ์ ๋๋ค.
์ผ๊ด ํ์ดํ๋ผ์ธ์์ ๋์ค ํญ๋ชฉ์ ๋ค์ ํน์ฑ์ ๊ฐ์ง ์์ ํญ๋ชฉ์ผ๋ก ์ ์๋ฉ๋๋ค.
- ๊ฐ์ ์คํ ์ด์ง์ ์๋ ๋ค๋ฅธ ์์ ํญ๋ชฉ๋ณด๋ค ์๋ฃํ๋ ๋ฐ ํจ์ฌ ์ค๋ ๊ฑธ๋ฆฝ๋๋ค.
- ์คํ ์ด์ง ๋ด์์ ๋์ ๋ก๋๋ฅผ ์ค์ ๋๋ค.
- ์ ์์ ์ด ์์๋์ง ์๋๋ก ์ฐจ๋จํฉ๋๋ค.
์ต์ ์ ๊ฒฝ์ฐ์๋ ๋์ค ํญ๋ชฉ์ผ๋ก ์ธํด ์์ ์ ์ ์ ๋น์จ์ด ์งํ๋์ด ์์ ์ ์ ์ฒด ์ง์ฐ์ ์ด๋ํ๋ฏ๋ก ๋จ๊ณ๊ฐ ์๋ฃ๋์ง ์์ ์ ์์ต๋๋ค.
Dataflow๋ ์ผ๊ด ์์ ์ค์ ๋ฐ์ํ๋ ๋์ค ํญ๋ชฉ์ ๊ฐ์งํฉ๋๋ค. Dataflow๊ฐ ๋์ค ํญ๋ชฉ์ ๊ฐ์งํ๋ฉด ๋์ค ํญ๋ชฉ์ ์์ธ๋ ํ์ธํฉ๋๋ค.
Google Cloud ์ฝ์์์ ๋์ค ํญ๋ชฉ ๋ณด๊ธฐ
Dataflow ์์ ์ ์์ํ ํ Google Cloud ์ฝ์์ ์ฌ์ฉํ์ฌ ๊ฐ์ง๋ ๋์ค ํญ๋ชฉ์ ๋ณผ ์ ์์ต๋๋ค.
๋์ค ํญ๋ชฉ์ ์คํ ์ด์ง ๋๋ ์์ ์๋ณ๋ก ๋ณผ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ทฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ค ํญ๋ชฉ์ด ์๋ ์คํ ์ด์ง๋ฅผ ์ฐพ์ ๋ค์ ๊ฐ ๋จ๊ณ ๋ด์์ ๋์ค ํญ๋ชฉ์ด ๋ฐ์ํ ์์ ์๋ฅผ ์ฐพ์ต๋๋ค.
๋จ๊ณ๋ณ ๋์ค ํญ๋ชฉ ๋ณด๊ธฐ
๋จ๊ณ๋ณ๋ก ๋์ค ํญ๋ชฉ์ ๋ณด๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
Google Cloud ์ฝ์์์ Dataflow ์์ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
์์ ์ผ๋ก ์ด๋
์์ ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
์์ ์ธ๋ถ์ ๋ณด ํ์ด์ง์์ ์คํ ์ธ๋ถ์ ๋ณด ํญ์ ํด๋ฆญํฉ๋๋ค.
๊ทธ๋ํ ๋ทฐ ๋ชฉ๋ก์์ ์คํ ์ด์ง ์งํ ์ํ๋ฅผ ์ ํํฉ๋๋ค. ์งํ๋ฅ ๊ทธ๋ํ์๋ ๊ฐ ์คํ ์ด์ง ๋ด์์ ๊ฐ์ง๋ ๋ชจ๋ ๋์ค ํญ๋ชฉ์ ์ง๊ณ ์๊ฐ ํ์๋ฉ๋๋ค.
์คํ ์ด์ง์ ์ธ๋ถ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด ์คํ ์ด์ง ๋ง๋ ์๋ก ๋ง์ฐ์ค๋ฅผ ๊ฐ์ ธ๊ฐ๋๋ค. ์คํ ์ด์ง์ ์์ ์๋ฅผ ๋ณด๋ ค๋ฉด ์ธ๋ถ์ ๋ณด ํจ๋์์ ์์ ์ ๋ณด๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์์ ์๋ณ ๋์ค ํญ๋ชฉ ๋ณด๊ธฐ
์์ ์๋ณ๋ก ๋์ค ํญ๋ชฉ์ ๋ณด๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
Google Cloud ์ฝ์์์ Dataflow ์์ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
์์ ์ผ๋ก ์ด๋
์์ ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
์์ ์ธ๋ถ์ ๋ณด ํ์ด์ง์์ ์คํ ์ธ๋ถ์ ๋ณด ํญ์ ํด๋ฆญํฉ๋๋ค.
๊ทธ๋ํ ๋ทฐ ๋ชฉ๋ก์์ ์์ ์ ์งํ ์ํฉ์ ์ ํํฉ๋๋ค.
๋จ๊ณ๋ณ ์์ ์ ํํฐ๋ง ๋ชฉ๋ก์์ ๋จ๊ณ๋ฅผ ์ ํํฉ๋๋ค. ์งํ๋ฅ ๊ทธ๋ํ์๋ ํด๋น ๋จ๊ณ์์ ๊ฐ์ง๋ ๋์ค ํญ๋ชฉ์ด ํ์๋ฉ๋๋ค. ๋์ค ํญ๋ชฉ์ด ์ฒ์ ๊ฐ์ง๋ ์ง์ ์ ๋ง๋์์ ์์์ด ์ด๋ก์ต๋๋ค.
์์ ์์ ์ธ๋ถ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด ํด๋น ์์ ์์ ๋ง๋ ์๋ก ๋ง์ฐ์ค๋ฅผ ๊ฐ์ ธ๊ฐ๋๋ค.
์คํ ์ด์ง ์ ๋ณด ํจ๋์ ๋์ค ํญ๋ชฉ ์ธ๋ถ์ ๋ณด ์น์ ์๋ ํ์ด์ง์ ํ์๋ ๋ชจ๋ ์์ ์์ ๋์ค ํญ๋ชฉ์ด ๋ค์ ์ ๋ณด์ ํจ๊ป ๋์ด๋ฉ๋๋ค.
- ๋์ค ํญ๋ชฉ์ด ๊ฐ์ง๋ ์์ ์๊ฐ
- ๋์ค ํญ๋ชฉ์ ๊ฒฝํํ ์์ ์
- ์์ธ(์๋ ค์ง ๊ฒฝ์ฐ)
์ผ๊ด ์์ ์ ๋์ค ํญ๋ชฉ ๋ฌธ์ ํด๊ฒฐ
Dataflow๋ ์ผ๊ด ํ์ดํ๋ผ์ธ์์ ๋ค์๊ณผ ๊ฐ์ ๋์ค ํญ๋ชฉ์ ์์ธ์ ๊ฐ์งํฉ๋๋ค.
ํซํค. ํซํค๋ ๋์ผํ
PCollection
์ ๋ค๋ฅธ ํค๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ์์๋ฅผ ๋ํ๋ด๋ ํค์ ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ด ๋ฌธ์์ ํซํค๋ก ์ธํ ๋์ค ํญ๋ชฉ ๋ฌธ์ ํด๊ฒฐ์ ์ฐธ์กฐํ์ธ์.๋๋ฆฐ ์์ ์. ๋๋ฆฐ ์์ ์์์ ์์ ํญ๋ชฉ์ ํ์๋ณด๋ค ๋๋ฆฌ๊ฒ ์คํ๋ฉ๋๋ค. ๋๋ฆฐ ์์ ์์ ์ฒ๋ฆฌ ์๋๋ ๋์ผ ์คํ ์ด์ง์์ ๋น์ทํ ์์ ์ ์ํํ๋ ์์ ์์ ์ฒ๋ฆฌ ์๋๋ณด๋ค ๋๋ฆฐ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. CPU ๋ถ์กฑ, ์ค๋์ฑ, ๋จธ์ ์ํคํ ์ฒ, ์ค๋จ๋ ์์ ์ ํ๋ก์ธ์ค ๋ฑ ์ฌ๋ฌ ์์ธ์ผ๋ก ์ธํด ์์ ์ ์๋๊ฐ ๋๋ ค์ง ์ ์์ต๋๋ค. ์๋๊ฐ ๋๋ ค์ง๋ฉด Dataflow๊ฐ ์๋์ผ๋ก ๋ฌธ์ ํด๊ฒฐ์ ์๋ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ด ๋ฌธ์์์ ๋๋ฆฐ ์์ ์๋ก ์ธํ ๋์ค ํญ๋ชฉ ์๋ ํด๊ฒฐ์ ์ฐธ์กฐํ์ธ์.
ํ์ธํ ์ ์๋ ์์ธ. ์์ธ์ด ํ์ธ๋์ง ์์ ๋์ค ํญ๋ชฉ์ ๊ฒฝ์ฐ '๋๋ฆฌ๊ฑฐ๋ ์ค๋จ๋ ์์ ๋ฌธ์ ํด๊ฒฐ'์์ ๋๋ฆฐ ์ผ๊ด ์์ ์ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ํด๊ฒฐ ๋จ๊ณ๋ฅผ ์ฐธ์กฐํ์ธ์.
ํซํค๋ก ์ธํ ๋์ค ํญ๋ชฉ ๋ฌธ์ ํด๊ฒฐ
๋ค์ํ ์์ธ์ผ๋ก ์ธํด ๋์ค ํญ๋ชฉ์ด ๋ฐ์ํ ์ ์์ง๋ง ์ผ๋ฐ์ ์ธ ์์ธ ์ค ํ๋๋ ํซํค์ ์กด์ฌ์
๋๋ค. ํซํค๋ ๋์ผํ PCollection
์ ์๋ ๋ค๋ฅธ ํค๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ์์๋ฅผ ๋ํ๋ด๋ ํค์
๋๋ค. ํซํค๋ Dataflow๊ฐ ์์๋ฅผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ ์ ํํ๋ฏ๋ก ๋์ค ํญ๋ชฉ์ ๋ง๋ค ์ ์์ต๋๋ค.
Dataflow๊ฐ ํซํค๋ก ์ธํด ๋์ค ํญ๋ชฉ์ ๊ฐ์งํ๋ฉด ๋์ค ํญ๋ชฉ ์ธ๋ถ์ ๋ณด ํจ๋์ Hot Key
๊ฐ ์์ธ์ผ๋ก ํ์๋ฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก Dataflow๋ ํซํค์ ํค ๊ฐ์ ํ์ํ์ง ์์ต๋๋ค. ํค ๊ฐ์ ํ์ํ๋ ค๋ฉด ์์
์ ์คํํ ๋ hotKeyLoggingEnabled
ํ์ดํ๋ผ์ธ ์ต์
์ true
๋ก ์ค์ ํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ฐ์ดํฐ๊ฐ ๊ท ๋ฑํ๊ฒ ๋ถ์ฐ๋์๋์ง ํ์ธํฉ๋๋ค. ํค์ ๊ฐ์ด ๋ถ๊ท ํํ๋ค๋ฉด ๋ค์ ์กฐ์น ์คํ์ ๊ณ ๋ คํด ๋ณด์ธ์.
- ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์
๋ ฅํ์ธ์.
ParDo
๋ณํ์ ์ ์ฉํ์ฌ ์๋ก์ด ํค-๊ฐ ์์ ์ถ๋ ฅํฉ๋๋ค. - Java ์์
์ ๊ฒฝ์ฐ
Combine.PerKey.withHotKeyFanout
๋ณํ์ ์ฌ์ฉํฉ๋๋ค. - Python ์์
์ ๊ฒฝ์ฐ
CombinePerKey.with_hot_key_fanout
๋ณํ์ ์ฌ์ฉํฉ๋๋ค. - Dataflow Shuffle ์ฌ์ฉ ์ค์
์๋ฅผ ๋ค์ด, ํ์ดํ๋ผ์ธ์ด SQL ๋ณํ์ ์ผ๋ถ๋ก JOIN
์์
์ ์ํํ๋ ๊ฒฝ์ฐ, ํ์ฅ๋ JOIN
์์
์ ์ผ๋ถ๋ก ์ํ๋๋ GroupByKey
๋ก ์ง์ ๋ ํค๋ฅผ ์ ๋ฌํ ๋ ๊ณผ๋ํ ๋ฐ์ดํฐ ์์ด ํฌํจ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
์์ธํ ๋ด์ฉ์ beam-issue/28186์ ๊ธฐ๋ฅ ์์ฒญ์ ์ฐธ์กฐํ์ธ์.
๋๋ฆฐ ์์ ์๋ก ์ธํ ๋์ค ํญ๋ชฉ ์๋ ํด๊ฒฐ
๋๋ฆฐ ์์ ์๋ Dataflow์์ ์ผ๋ฐ์ ์ด์ง ์์ง๋ง ์์ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด Dataflow๋ ๋๋ฆฐ ์์ ์๊ฐ ๋ฐ๊ฒฌ๋์์ ๋ ์์ ์๋ก ์ธํด ๋์ค ํญ๋ชฉ์ด ๋ฐ์ํ๊ธฐ ์ ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ์๋ํฉ๋๋ค.
์๋ ํด๊ฒฐ์ ์๋ํ ๋๋ ํธ์คํธ ์ ์ง๋ณด์ ์ด๋ฒคํธ๋ฅผ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค. ์ด ์ด๋ฒคํธ๋ ์ ๊ธฐ์ ์ผ๋ก ์ํ๋๋ Compute Engine ์ ์ง๋ณด์ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ์์ ์์ ํธ์คํธ ์ ์ง๋ณด์ ์ ์ฑ ์ ๋ฐ๋ผ ์์ ์๋ ๋ผ์ด๋ธ ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ํ๋๊ฑฐ๋ ๋ค์ ์์๋ฉ๋๋ค. ๋ผ์ด๋ธ ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ํ๋ ๋๋ ์ํฌ๋ก๋๊ฐ ์ค๋จ๋์ง ์์ต๋๋ค. ์์ ์๊ฐ ๋ค์ ์์๋ ๊ฒฝ์ฐ์๋ ๋๋ฆฐ ์์ ์์์ ์งํ ์ค์ธ ์์ ์ด ์์ค๋๊ณ ์ฒ๋ฆฌ๊ฐ ๋ค์ ์์๋ฉ๋๋ค.
๋๋ฆฐ ์์ ์๊ฐ ๊ฐ์ง๋๊ณ ๋ฌธ์ ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ํด๊ฒฐ๋๋ฉด job-message ๋ก๊ทธ์ ๋ค์ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
Slow worker ... detected and automatically remediated ...
๋๋ฆฐ ์์ ์๊ฐ ๋์ค ํญ๋ชฉ์ด ์๋๋ฉด ์ถ๊ฐ ์กฐ์น๋ฅผ ์ํํ ํ์๊ฐ ์์ต๋๋ค.
ํด๊ฒฐ์ด ์คํจํ๋ฉด ๋๋ฆฐ ์์ ์๋ก ์ธํด Dataflow ๋ชจ๋ํฐ๋ง ์ธํฐํ์ด์ค์ ๋์ค ํญ๋ชฉ์ด ํ์๋ ์ ์์ต๋๋ค.
์ ์ง๋ณด์ ์ด๋ฒคํธ ์๋ฎฌ๋ ์ด์ ์์ฒญ๊ณผ ๊ฐ์ด ํ๋ก์ ํธ์ ํ ๋น๋์ด ๋ถ์กฑํ๋ฉด ์๋ ํด๊ฒฐ์ด ์คํจํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ ํ ๋น๋์ ๋ํ ์์ธํ ๋ด์ฉ์ '๋ฆฌ์์ค ์ฌ์ฉ ํ ๋น๋ ๋ฐ ๊ถํ ๊ด๋ฆฌ'์ ๋ฆฌ์ ์ธก์ ํญ๋ชฉ์ ๋ํ API ๋น์จ ์ ํ์ ์ฐธ์กฐํ์ธ์. ๋ ๋์ ํ ๋น๋ ๋น์จ์ ์์ฒญํ๋ ค๋ฉด 'ํ ๋น๋ ๋ณด๊ธฐ ๋ฐ ๊ด๋ฆฌ'์ ๋ ๋์ ํ ๋น๋ ํ๋ ์์ฒญ์ ์ฐธ์กฐํ์ธ์.
๋ค์ ๋จ๊ณ
- Dataflow ๋ชจ๋ํฐ๋ง ์ธํฐํ์ด์ค ์ฌ์ฉ ๋ฐฉ๋ฒ ์์๋ณด๊ธฐ
- ๋ชจ๋ํฐ๋ง ์ธํฐํ์ด์ค์ ์คํ ์ธ๋ถ์ ๋ณด ํญ ์ดํดํ๊ธฐ