ํ๊ตญ์์ ๋๋ผ ๊ฑฐ์ผ? ์์ด๋ก ์ธ๊ณ ์์ฅ์ ๋ซ์ด๋ผ! ๐๐
์๋ ํ์ธ์. UC Berkeley์์ ๐ป ์ปดํจํฐ ๊ณตํ(EECS)์ ์ ๊ณตํ๊ณ , ์ค๋ฆฌ์ฝ ๋ฐธ๋ฆฌ์์ 15๋ ์ด์์ ์ํํธ์จ์ด ์์ง๋์ด๋ก ์ผํด์์ผ๋ฉฐ, ํ์ฌ๋ ์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ ๋น ํ ํฌ ๋ณธ์ฌ์์ ๋น ๋ฐ์ดํฐ์ DevOps๋ฅผ ๋ค๋ฃจ๋ Staff Software Engineer๋ก ์์ต๋๋ค.
๐งญ ์ค๋ฆฌ์ฝ ๋ฐธ๋ฆฌ์ ํ์ ํ์ฅ์์ ์ง์ ๋ฐฐ์ด ๊ธฐ์ ๊ณผ ๋ ธํ์ฐ๋ฅผ ์จ๋ผ์ธ ๊ฐ์๋ฅผ ํตํด ์ด์ ์ฌ๋ฌ๋ถ๊ณผ ํจ๊ป ๋๋๊ณ ์ ํฉ๋๋ค.
๐ ๊ธฐ์ ํ์ ์ ์ต์ ์ ์์ ๋ฐฐ์ฐ๊ณ ์ฑ์ฅํด ์จ ์ ์ ํจ๊ป, ์ฌ๋ฌ๋ถ๋ ๊ธ๋ก๋ฒ ๋ฌด๋์์ ๊ฒฝ์ํ ์ ์๋ ์ญ๋์ ํค์๋ณด์ธ์!
๐ซก ๋๋ํ์ง๋ ์์ง๋ง, ํฌ๊ธฐํ์ง ์๊ณ ๊พธ์คํ ํ๋ฉด ๋ญ๋ ์ง ์ด๋ฃฐ์ ์๋ค๋ ์ ์ ๊ผญ ๋ง์๋๋ฆฌ๊ณ ์ถ์ต๋๋ค. ํญ์ ์ข์ ์๋ฃ๋ก ์์์ ๋์์ ๋๋ฆฌ๊ฒ ์ต๋๋ค
Courses
Reviews
- Gradle with Silicon Valley Engineers
- Python from Basics to Advanced Taught by Silicon Valley Engineers
- Kubernetes for SWE, learned from Silicon Valley engineers
- Apache Flink with Silicon Valley Engineers
- Learn Python Apache Spark from Silicon Valley Engineers
Posts
Q&A
S3 ํด๋ ๊ตฌ์กฐ์ ๋ฐ๋ฅธ Static Partition Pruning, DPP ์ง๋ฌธ
์๋ ํ์ธ์ sgjeong1108๋,Dynamic Partition Pruning(DPP)์ด ์ ๋๋ก ๋์ํ๋ ค๋ฉด ์คํํฌ๊ฐ "ํํฐ์ ์ปฌ๋ผ -> ๋๋ ํฐ๋ฆฌ ์์น" ๋งคํ์ ๋ฉํ๋ฐ์ดํฐ๋ก ์๊ณ ์์ด์ผ ํฉ๋๋ค.์ด ๋งคํ์ ์๋ฆฌ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ด ๋ง์ํ์ Hive-style ๋๋ ํฐ๋ฆฌ(col=value/โฆ) ์ด๊ณ , ์ด ๊ฒฝ์ฐ ๋ฉํ์คํ ์ด๊ฐ ์์ด๋(๊ทธ๋ฅ spark.read.parquet๋ง ํด๋) ์๋ "ํํฐ์ ๋์ค์ปค๋ฒ๋ฆฌ"๊ฐ ๋ฉ๋๋ค๊ทผ๋ฐ, Hive-style์ด ์๋์ด๋ ๋ฉ๋๋ค. ๋ค๋ง ๊ทธ ๊ฒฝ์ฐ์ ๋ฉํ์คํ ์ด(๋๋ Delta/Iceberg ์นดํ๋ก๊ทธ) ์ ํํฐ์ ์ ๋ฑ๋กํด ์คํํฌ๊ฐ ๋งคํ์ ์๊ฒ ํด์ค์ผ SPP/DPP๊ฐ ์๋ํฉ๋๋ค๋ง์ฝ ๋๋ ํ ๋ฆฌ๊ฐ /year=2024/data.parquet๋ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉด ๋ฉ๋๋ค.df.write .partitionBy("year") .mode("overwrite") .parquet("/path/to/data")๊ทธ๊ฒ ์๋๋ผ๋ฉด location์ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค.CREATE EXTERNAL TABLE events ( user_id BIGINT, ts TIMESTAMP, ... ) PARTITIONED BY (year INT) STORED AS PARQUET LOCATION 's3://bucket/events'; -- ์ด๊ฑฐ๋ ์์ ๋ฃจํธ -- ํด๋๋ช ์ด 'year=2024'๊ฐ ์๋์ด๋ ๋์ ALTER TABLE events ADD PARTITION (year=2024) LOCATION 's3://bucket/events/2024'; ALTER TABLE events ADD PARTITION (year=2025) LOCATION 's3://bucket/events/2025';
- 0
- 2
- 24
Q&A
Top Queue Interview Questions ์ง๋ฌธ
์๋ ํ์ธ์ ์ด์์ฐ๋,์๊ฐ์๋์ ์๊ฐ์ด ์์ฃผ ์ข์ต๋๋ค. "๋ฌผ๋ฆฌ์ ์ผ๋ก ํ์ฒ๋ผ ๋ง๋๋ ๊ฑด ์ด๋ ต๋ค"๋ ๋ถ๋ถ์ ์ ํํด์.๋ค๋ง, ์คํ ๋ ๊ฐ๋ฅผ ํตํด ๋ ผ๋ฆฌ์ ์ผ๋ก ํ์ ๋์์ ํ๋ด๋ผ ์ ์๋ค๋ ์ ์ด ํต์ฌ์ด์์.์ฆ, ๊ตฌํ ๊ด์ ์์๋ ์์ ํ ๊ฐ๋ฅํ๋ฉฐ ์ค์ ๋ก ์์ฃผ ์ฌ์ฉ๋๋ ์ธํฐ๋ทฐ ๋ฌธ์ ์ด๊ธฐ๋ ํฉ๋๋ค.
- 0
- 1
- 21
Q&A
Queue ๊ฐ์๋ฅผ ๋ฃ๊ณ ๋ ํ์ ๋ํ ์ง์
์๋ ํ์ธ์ ๊น์ ์๋,์ข์ ์ง๋ฌธ๋ค์ด ๋ง๋ค์.ํ๋ฅผ ์ง์ ํ ๋๋ ๋ฌด์กฐ๊ฑด ํ์ ์ด๋ฆ์ ์ง์ ํด ์ค์ผ ํ๋์? ์๋์ผ๋ก ๋น์ด ์๋ woker์ ํ๋ฅผ ํ ๋นํ๋ ๋ฐฉ๋ฒ์ ์๋์?=> ๊ผญ ์ง์ ํ ํ์๋ ์์ต๋๋ค.. BaseOperator(queue="...")๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ(default) ํ๋ก ๊ฐ๋๋ค. Airflow/Celery ์ค์ ์ default_queue๋ฅผ ๋ฐ๊พธ๋ฉด ๊ธฐ๋ณธ ํ ์ด๋ฆ์ ๋ฐ๊ฟ ์ ์์ด์.=> โ๋น ์์ปคโ๋ก์ ์๋ ๋ฐฐ์ ์ ํ ๋จ์๋ก๋ง ์ด๋ค์ง๋๋ค. Celery๋ โ๊ฐ์ ํ๋ฅผ ๊ตฌ๋ ํ๋(worker -q) ์์ปค๋คโ ์ฌ์ด์์ ์์ ์ ๋ถ๋ฐฐํฉ๋๋ค. โํ์ฌ ๊ฐ์ฅ ํ๊ฐํ ์์ปค๋ฅผ ์๋์ผ๋ก ์ฐพ์์โ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ์ ํ๋ฅผ ๊ณต์ ํ ๋์๋ง ์์ฐ์ค๋ฝ๊ฒ ์ผ์ด๋ฉ๋๋ค(๋ผ์ด๋๋ก๋น+prefetch ์์ค). cpu_intensive๋ผ๋ woker์ ์ฌ๋ฌ๊ฐ์ ํ๊ฐ ๋์์ ์์ฒญ์ด ์์ ๊ฒฝ์ฐ ๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๋์?=> ๋๊ธฐ์ ์ด๋ผ๋ ๋ง์ด.. ์ง๋ ฌ ์ฒ๋ฆฌ๋ฅผ ๋ง์ ํ์๋ ๊ฑด๊ฐ์? Celery ์์ปค๋ ๊ธฐ๋ณธ์ ์ผ๋ก worker_concurrency(ํ๋ก์ธ์ค/์ค๋ ๋ ์)๋งํผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ํ ์์ปค๊ฐ ์ฌ๋ฌ ํ(-q cpu,gpu,io)๋ฅผ ๊ตฌ๋ ํ๋ฉด ๊ฐ ํ์์ ๋ค์ด์จ ์์ ์ ํ๋์ ์์ ๋๊ธฐ์ด๋ก ํฉ์ณ ์์ ์ ๋์์ฑ๋งํผ ๋ณ๋ ฌ ์คํํด์. ์ง๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ํ์ ๋ค๋ฉด, ๊ทธ ์์ปค๋ฅผ worker_concurrency=1๋ก ์ธํ ํ์๋ฉด ๋ ๊ฒ๋๋ค. ํ๋ฅผ ์์ฑํ๋ฉด ํด๋น ํ์ ๋ฌผ๋ฆฌ์ ์์์ ์ด๋ป๊ฒ ํ ๋น ๋๋ ๊ฒ์ธ๊ฐ์?=> ํ๋ "๋ ผ๋ฆฌ์ ๋ผ์ฐํ ํค"์ผ ๋ฟ, ์์์ ์ง์ ํ ๋นํ์ง ์์ต๋๋ค. ์์์ Worker์์ ์์์ ํฉ๋๋ค.. ์์ปค ํ๋ก์ธ์ค ์(concurrency), ๋จธ์ vCPU/RAM, ์ปจํ ์ด๋ ๋ฆฌ์์ค ์ ํ(์์ฒญ/์ ํ), ์ฟ ๋ฒ ๋ผ๋ฉด ๋ ธ๋/๋ค์์คํ์ด์ค ๋ฑ์์ ๊ฒฐ์ ๋ฉ๋๋ค. ๋์ฒด๋ก ํ๋์ DAG์์ ๊ฐ์์ ์์์ ๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ ํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์์๊น์?=> ๊ฐ๋ฅ์ ํ์ง๋ง, ๋๋ฌด ๋ง์ด ํ๋๋ก ๋ฃ๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฌ์ง ์์ต๋๋ค.. ์ผ๋ฐ์ ์ผ๋ก๋ โ๋ฆฌ์์ค ํด๋์ค๋ณโ ์์ ํ๋ก ์ถฉ๋ถํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด cpu_intensive, io_heavy, gpu, external_api ์ด๋ฐ ์์ผ๋ก ๋ง์ ๋๋ค. ์์ปค๋ฅผ ๋ง์ด ๋ง๋ค์ด ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ ์ฌ๋ก๋ ์ด๋ค ์ฌ๋ก๊ฐ ์๋์ง ์ ์ ์์๊น์?=> Work Load๋ฅผ ๋ถ๋ฆฌํ ๋ CPU ๋ฐ์ด๋/IO ๋ฐ์ด๋/GPU/๋์ฉ๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์๋ก ๋ค๋ฅธ ์์ปค ๊ทธ๋ฃน์ผ๋ก ๊ฒฉ๋ฆฌํ ๋๊ฐ ์์ ์ ์๊ฒ ๊ณ ...๋ฉํฐ ํ ๋์/ํ ๋ถ๋ฆฌ๊ฐ ํ์ํ ๋ ํ๋ณ ํ/์์ปค๋ก ๋๋ ์์(๋ ธ์ด์ฆ ๋ค์ด๋ฒ) ๋ฐฉ์ง ๋ฐ ์ด์ ์ฑ ์ ๋ถ๋ฆฌ๋ฅผ ์ํ ๋? ์ฏค์ด ์์ ๊ฒ ๊ฐ์ต๋๋ค.
- 0
- 1
- 26
Q&A
broadcast Join๊ณผ boradcast + UDF ์ฐจ์ด
์๋ ํ์ธ์ sgjeong1108๋,์ข์ ์ง๋ฌธ์ด๋ค์. ์ผ๋จ ์คํ ๊ณ์ธต ์ธก๋ฉด์์ ๋ดค์๋, broadcast join์ JVM ๋ด๋ถ์์ ํด์ ์กฐ์ธ, Whole-Stage Codegen ์ต์ ํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ์ง๋ง UDF + broadcast(ํ์ด์ฌ UDF)๋ JVM์ Python๋ฅผ ๊ณ์ ์๋ณตํด์ ๋นํจ์จ์ ์ด๋ฉฐ, ์ฝ๋์ /์ปฌ๋ผ๋ ์คํ๋ ๋นํ์ฑํ๋์ด์์ต๋๋ค.๋ํ broadcast join๋ ์นดํ๋ฆฌ์คํธ ์ต์ ํ, ํต๊ณ, AQE ํ์ฉ ๊ฐ๋ฅํด์ ๋์ฒด๋ก ๋น ๋ฅธ ๋ฐ๋ฉด์, UDF + broadcast๋ ํํฐ,ํ๋ฃจ๋,ํ๋ ๋ํท ํธ์๋ค์ด ๋ฑ ๋๋ถ๋ถ ๋งํ์ ๋๋ฆฝ๋๋ค.๊ฒฐ๊ณผ์ ์ผ๋ก ๊ธฐ๋ณธ์ ํญ์ broadcast join๋ก ์ค๊ณ๋ฅผ ํ์๋, Lookup ์์ฒด๊ฐ ํจ์ํ ๋ณํ์ด์ด์ผ ํ๊ฑฐ๋, ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ผญ ์จ์ผ ํ ๋๋... ์กฐ์ธ์ผ๋ก ํํ์ด ์ด๋ ค์ธ ๋๋ UDF + broadcast๋ฅผ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค.
- 0
- 2
- 23
Q&A
Replit์ ์ฌ์ฉํด๋ณด๋ ค๊ณ ํ๋๋ฐ ์์์ฒ๋ผ ์งํ์ด ์๋๋ค์
์๋ ํ์ธ์ admin๋,์ง๊ธ ๋ค์ด๊ฐ ๋ณด๋ ๋ฆฌํ๋ฆฟ(โ Replitโ )์ ํ๋ฉด ๊ตฌ์ฑ์ด ๋ง์ด ๋ฐ๋์๋ค์. ๊ณง ๋์์ด ๋ ์์์ ์ฌ๋ฆฌ๊ฒ ์ต๋๋ค.ํ์ฌ ๋ฒ์ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:๋ก๊ทธ์ธ์ ํฉ๋๋ค.์ผ์ชฝ ๋ฉ๋ด์์ โExplore moreโ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.โDeveloper Frameworksโ โ โLanguagesโ โ โPythonโ ์์๋ก ๋ค์ด๊ฐ๋๋ค.โRemixโ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.ํ์ ์ฐฝ์ด ๋จ๋ฉด ์ด๋ฆ๊ณผ ์ค๋ช ์ ์ ๋ ฅํ๊ณ โUse Frameworkโ ๋ฒํผ์ ๋๋ฆ ๋๋ค.์๋จ ํญ์์ Console ์์ ์๋ โ+ Tools & filesโ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.main.py ํ์ผ์ ์ ํํ๊ฑฐ๋ ์๋ก ๋ง๋ญ๋๋ค.์ํ๋ ํ์ด์ฌ ์ฝ๋๋ฅผ ์ ๋ ฅํ ๋คโถ (ํ๋ ์ด) ๋ฒํผ์ ๋๋ฅด๊ฑฐ๋Command + Enter ํค๋ฅผ ๋๋ฌ ์คํํฉ๋๋ค.
- 0
- 2
- 62
Q&A
Flink 2.0 ๋ฒ์ ๋ถํฐ ์ค์นผ๋ผ๋ฅผ ๋์ด์ ์ง์ํ์ง ์๋ค์
์๋ ํ์ธ์ ์ด์ฌํ ํ์๋,๋ณด๋ด์ฃผ์ ๋งํฌ๋ฅผ ๋ณด์๋ฉด, ๊ณํ์ ๋ณด๋ฉด Scala API๊ฐ ์ ๊ฑฐ๊ฐ ๋์ด๋ Scala ์ฌ์ฉ์๋ค์ Java API๋ฅผ ํตํด Flink ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ด ๋ณด์ ๋๋ค. ๋ณ๋ก ๊ฑฑ์ ์ ํ์ง ์์ผ์ ๋ ๋ ๋ฏ ํฉ๋๋ค.์ด์ฐจํผ ๋ณด์ฌ์ฃผ๋ ์์ ์ค์นผ๋ผ API๊ฐ ์์ด์ง๋ ๊ฑฐ์ง, Scala ์์ฒด๊ฐ Java๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ผ๋ ์๊ด์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.๊ทธ๋ฆฌ๊ณ ํ๋ง๋ค ๋ค๋ฅธ๋ฐ, ์๋ฐ๋ฅผ ๋๋ถ๋ถ ์ฌ์ฉํฉ๋๋ค.
- 0
- 2
- 29
Q&A
Data Sink Topology ์ง๋ฌธ ์์ต๋๋ค
์๋ ํ์ธ์ ์ด์ฌํํ์๋,ํด๊ฐ ์ถ๋ฐ์ ์ ใ ใ ใ ๋ ๋ต๋ณ ๋๋ฆฝ๋๋ค.์ผ๋จ SinkWriter๊ฐ ๋ก์ปฌ์ ์์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ Committer๊ฐ ์ปค๋ฐ์ ์ํํ๋ค๋ ๊ฒ ๋ง๋์?๋ค, ๋ง์ต๋๋ค. ๋ค๋ง Committer๋ ๋จ์ํ โ์ปค๋ฐํ๋คโ๋ณด๋ค๋ โ์ฒดํฌํฌ์ธํธ ์ฑ๊ณต ์์ ์ ํธ๋์ญ์ ์ ์์ ํ๊ฒ ๋ง๋ฌด๋ฆฌํ๋ ์ญํ โ๋ก ์ดํดํ์๋ฉด ์ ํํด์. Topology ์ฉ์ด๋ ๊ถ๊ธํ๋ฐ์ Topology๊ฐ ๋คํธ์ํฌ ์๊ฐ์ ๋ ธ๋๋ค์ ์ฐ๊ฒฐํด๋์ ๋ฐฉ์์ด๋ผ๊ณ ๋ฐฐ์ ์๋๋ฐ์ ์ฌ๊ธฐ์ Topology๊ฐ ์ด๋ค ๋ป์ผ๋ก ์ฌ์ฉ๋๋์?๋ง์ํ์ ๋๋ก, ๋คํธ์ํฌ ๋ถ์ผ์์ Topology๋ ๋ ธ๋ ๊ฐ ์ฐ๊ฒฐ ๊ตฌ์กฐ๋ฅผ ์๋ฏธํ์ฃ . Flink์์๋ ๊ฑฐ์ ๊ฐ์ ๊ฐ๋ ์ ์ฐจ์ฉํ๊ณ ์์ต๋๋ค. ๋ค๋ง Flink์์์ โTopologyโ๋ ๋ค์์ฒ๋ผ ํด์๋ฉ๋๋ค:Flink Job์ด ์คํ๋ ๋, ์ฐ์ฐ์(operators) ๊ฐ์ ๋ฐ์ดํฐ ํ๋ฆ ๊ตฌ์กฐ ์ ์ฒด์ฆ, Source -> Transformation -> Sink ๋ก ์ด์ด์ง๋ ์ ์ฒด ๋ฐ์ดํฐ ํ๋ก์ฐ ๊ทธ๋ํ๊ฐ ๋ฐ๋ก Flink์ Topology์ ๋๋ค. Flink๋ ๋ด๋ถ์ ์ผ๋ก ์ด Topology๋ฅผ Directed Acyclic Graph (DAG) ํํ๋ก ๊ตฌ์ฑํ๊ณ , ๊ฐ ์ฐ์ฐ์ ๊ฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ด ์ด๋ค ๋ณ๋ ฌ๋(parallelism)์ ๋คํธ์ํฌ ๊ฒฝ๋ก๋ฅผ ํตํด ์ฐ๊ฒฐ๋๋์ง๋ฅผ ๋ํ๋ ๋๋ค. ๋ง์ง๋ง์ผ๋ก flink ๋ฌธ์๋ฅผ ์ฐพ์๋ณด๋ SinkWriter, Committer, Global Committer ํด๋์ค๊ฐ ์ญ์ ๋์๋ค๊ณ ๋์ค๋๋ฐ์, ๋ฒ์ ์ ์ด ๋๋ฉด์ ์ด์ ๋ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋์ํ์ง ์๋ ๊ฑด๊ฐ์?ํ์... ์ด๋ ๊ทธ๋ ๊ฒ ๋์์์ฃ ? ์ ๊ฐ ์ต์ 2.0 ~ 2.2 ์ค์ฌ์ผ๋ก ๊ฐ์ ํ์๋๋ฐ... ์ง๊ธ ์ฐพ์๋ณด๋ ๊ทธ๋ฐ ๋ด์ฉ์ด ์๋๋ฐ ํ๋ฒ ๋งํฌ ๋จ๊ฒจ์ฃผ์๋ฉด ์์๋ณด๊ฒ ์ต๋๋ค.https://nightlies.apache.org/flink/flink-docs-master/docs/dev/datastream/sinks/ ๋ง์ง๋ง์ผ๋ก ์ ๊ฐ ์ฌ๋ฌ ๊ฐ์์์ ๊ฐ์กฐํ๋ฏ์ด ์์ด๋ก ๊ณต๋ถํ์ ์ผ ๋ณด๋ค ๊น๊ณ ์์ธํ ์์ค์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํ์๋ก ๋ณํ๋ ๋จ์ด๋ฅผ ์ธ์ฐ๋ค์ํผ ํด์ผ๋๋๋ฐ, ๊ทธ๋ ๊ฒ ๋๋ฉด ๊ธ๋ก๋ฒ ๊ฒฝ์๋ ฅ(๋์ค์ ํด์ธ ์ทจ์ง ํฌ๋ง์)๋ ๋ฎ์์ง๊ณ ์ดํด๋๋ ๋ฎ์์ง ์ ์์ต๋๋ค.๊ทธ๋ผ ์ฆ๊ณตํ์ธ์!
- 0
- 2
- 27
Q&A
State Management & Fault Tolerance ๋ถ๋ถ ์ค๋ช ์ด ํ๋๋ ์ดํด๊ฐ ์ ๋ผ์
์๋ ํ์ธ์ ์ด์ฌํํ์๋,์ง๋ฌธ ์ข๋ค์!First Class Support์ ๋ํด์ ๊ถ๊ธํฉ๋๋ค. ์ First Class๋ผ๋ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๋์?First-Class๋ผ๋ ํํ์ "์ธ์ด์ , ์์คํ ์ ํต์ฌ ๊ฐ๋ ์ผ๋ก์ ์์ ํ๊ฒ ์ง์๋๋ค"๋ ๋ป์ด์์.์๋ฅผ ๋ค์ด, Python์์ ํจ์(Function)๊ฐ ์ผ๊ธ ๊ฐ์ฒด(First-Class Citizen)๋ผ๊ณ ํ์ฃ . ์ด๋ ํจ์ ์์ฒด๋ฅผ ๋ณ์๋ก ๋๊ธฐ๊ฑฐ๋ ๋ฆฌํดํ ์ ์์ ๋ ์ฐ๋ ํํ์ด์์.๊ฐ์ ๋งฅ๋ฝ์ผ๋ก, Flink๋ Stateful Stream Processing์ First-Class Support๋ก ์ ๊ณตํ๋ค๋ ๋ง์, ์ํ(State) ๊ด๋ฆฌ๊ฐ ์ต์ ์ด ์๋๋ผ ํ๋ ์์ํฌ์ ๊ธฐ๋ณธ ์ฒ ํ๊ณผ ๊ตฌ์กฐ์ ์์ ํ ๋ น์ ์๋ค๋ ๋ป์ ๋๋ค.์ฆ, Flink์ ๋ฐํ์, API, ์ฒดํฌํฌ์ธํธ, ๋ฐฑํ๋ ์ ๋ฑ ๋ชจ๋ ๊ตฌ์ฑ์์๊ฐ โ์ํ ์ ์งโ๋ฅผ ์ ์ ๋ก ์ค๊ณ๋์ด ์์ต๋๋ค. ๋ฐ๋๋ก Spark๋ Stateless ๋ชจ๋ธ์ด ๊ธฐ๋ณธ์ด๊ณ , Stateful์ ๋ถ๊ฐ ๊ธฐ๋ฅ ์์ค์ผ๋ก๋ง ์ง์ํฉ๋๋ค.Periodic checkpointing, Robust์ ์ฐจ์ด๊ฐ ๊ถ๊ธํฉ๋๋ค. ์ ์ถ์.. Periodic checkpointing์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ฒดํฌํฌ์ธํธ๋ฅผ ์ง์ ํด์ ์ฒดํฌํฌ์ธํธ ๊ธฐ์ค์ผ๋ก ๋ค์ ๋์์ํค๊ธฐ ๋๋ฌธ์ ์ค๋ณต ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋๋ฐ, Flink๋ exactly once๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๋ฌด์กฐ๊ฑด ํ ๋ฒ๋ง ์คํํจ์ ๋ณด์ฅํ๋ ๊ฑด๊ฐ์?Spark์ Flink๋ ๋ ๋ค ์ํ(state)๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ์ฅํ๋ ์ฒดํฌํฌ์ธํธ(Checkpoint) ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ง๋ง, ์ด ๊ธฐ๋ฅ์ด ์ด๋ค ์์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ผ๊ด์ฑ ์๊ฒ ๋ณต์ํ ์ ์๋๋์์ ํฐ ์ฐจ์ด๊ฐ ์์ต๋๋ค.Spark์ ๊ฒฝ์ฐ์๋ Periodic Checkpointing ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. ์ฆ, ์ผ์ ์๊ฐ ๊ฐ๊ฒฉ(์: 10์ด๋ง๋ค, 1๋ถ๋ง๋ค)์ผ๋ก ํ์ฌ์ ์ํ๋ฅผ ์ ์ฅํด๋๊ณ , ์ฅ์ ๊ฐ ๋ฐ์ํ์ ๋ ๊ทธ ์์ ์ผ๋ก ๋ณต๊ตฌํ๋ ๋ฐฉ์์ด์์. ์ด ์ ๊ทผ๋ฒ์ ๋จ์ํ๊ณ ๊ตฌํ์ด ์ฌ์ด ๋์ , ๊ทธ ์ฌ์ด์ ์ฒ๋ฆฌ ์ค์ด๋ ์ผ๋ถ ๋ฐ์ดํฐ๋ ๋ค์ ์ฌ์คํ๋ ์ ์์ต๋๋ค.๊ทธ๋์ ๊ฒฐ๊ณผ์ ์ผ๋ก at-least-once ์์ค์ ๋ณด์ฅ๋ง ๊ฐ๋ฅํฉ๋๋ค. ์ฆ, ์ด๋ค ์ด๋ฒคํธ๊ฐ ์ค๋ณต์ผ๋ก ์ฒ๋ฆฌ๋ ๊ฐ๋ฅ์ฑ์ด ๋จ์์๋ค๋ ๋ป์ด์ฃ . ๋ฐ๋ฉด Flink๋ Robustํ๊ณ Exactly-once๋ฅผ ๋ณด์ฅํ๋ Checkpointing์ ์ ๊ณตํฉ๋๋ค. ์ฌ๊ธฐ์ Robust๋ ์์คํ ์ ๋ฐ์ด ์ฅ์ ๋ ๋คํธ์ํฌ ์ง์ฐ์๋ ์์ ์ ์ผ๋ก ๋์ํ๋๋ก ์ค๊ณ๋์ด ์๋ค๋ ์๋ฏธ์ด๊ณ , Exactly-once๋ ๋ฐ์ดํฐ๊ฐ ๋จ ํ ๋ฒ๋ง, ์ ํํ๊ฒ ์ฒ๋ฆฌ๋๋ค๋ ๊ฒ์ ๋ณด์ฅํฉ๋๋ค.์ฆ, ์ค๋ณต๋ ์๊ณ ๋๋ฝ๋ ์๋ ์์ ํ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๊ฑฐ์ฃ . ์ด๊ฒ ๊ฐ๋ฅํ ์ด์ ๋ Flink๊ฐ ๋ด๋ถ์ ์ผ๋ก ๋ถ์ฐ ์ค๋ ์ท(distributed snapshot) ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ฐ ์ฐ์ฐ์(operator)์ ์ํ๋ฅผ ์ด๋ฒคํธ ์คํธ๋ฆผ์ ํน์ ์ง์ ๊ณผ ํจ๊ป ์ผ๊ด๋๊ฒ ์ ์ฅํ๊ณ , ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ๊ทธ ์์ ์ ์ค๋ ์ท์์๋ถํฐ ์ ํํ ์ด์ด์ ์ฌ์คํํฉ๋๋ค. ์ด ๋ฐฉ์์ Spark๋ณด๋ค ํจ์ฌ ์ ๊ตํ๊ณ ์ค๋ฒํค๋๊ฐ ๋ฎ์ผ๋ฉฐ, ๋ณต๊ตฌ ์ ์ ํ์ฑ์ด ๋ฐ์ด๋ฉ๋๋ค. Backpressure๋ ๋ฐ์ดํฐ๊ฐ ๋ง์ด ๋ค์ด์ ๋ณ๋ชฉ์ด ์๊ธธ ๋ ์ฒ๋ฆฌ์ธ๋ฐ, Spark๋ ์ง์ ๋ฒ์๊ฐ ์ข๊ณ Flink๋ ์ธ๋ฐํ๊ฒ ์ง์ ๊ฐ๋ฅํ๊ฑด๊ฐ์?Backpressure๋ ๋ฐ์ดํฐ ์ ์ ์๋๊ฐ ์ฒ๋ฆฌ ์๋๋ฅผ ์ด๊ณผํ ๋ ์๊ธฐ๋ ๋ณ๋ชฉ ํ์์ ์ ์ดํ๋ ๋ฉ์ปค๋์ฆ์ด์์. Spark๋ ๊ฐ๋จํ ํ ๊ธฐ๋ฐ ๋ฒํผ๋ง๋ง ์ง์ (coarse-grained) ์ด๋ ์ ๋ ๋ฐ๋ฆฌ๋ฉด ์ ์ฒด ์คํธ๋ฆผ ์ฒ๋ฆฌ ์๋๊ฐ ๋ฆ์ด์ง๋๋ฐ... ์ด์ ๋ฐํด Flink๋ ์ฐ์ฐ์(operator) ๋จ์๋ก fine-grained (์ธ๋ฐํ ๋จ์) ์กฐ์ ํ์ฌ, ๊ฐ ์ฐ์ฐ์๊ฐ ์ฒ๋ฆฌ ์๋์ ๋ง์ถฐ upstream ์๋๋ฅผ ์กฐ์ ํด์ ๋ถ๋๋ฝ๊ณ ์์ ์ ์ธ ํ๋ฆ ์ ์งํฉ๋๋ค. ์ฆ, fine-grained๋ ์ธ๋ฐํ ๋จ์๋ก ์กฐ์ ๊ฐ๋ฅํ๋ค๋ ๋ป์ด์์.์งง๊ฒ ๋งํ์๋ฉด ... Spark๋ coarse-grained(๊ฑฐ์น ๋จ์), Flink๋ fine-grained(์ธ๋ฐํ ๋จ์)๋ผ๊ณ ์๊ฐํ๋ฉด ๋๊ฒ ์ต๋๋ค. ํ๊ธ๊ณผ ์์ด๋ฅผ ์์ด์ ์๊ธฐํ๋ค๋ณด๋ ์ฅํฉํ๋ค์ ใ ใ ใ ... ๋ง์ง๋ง์ผ๋ก ...maintain state across events: flink๊ฐ event ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๊ณ , ์ด๋ฒคํธ๊ฐ์ ์ํ๋ฅผ ์๊ณ ์๋ค๋ ๋ป์ธ๊ฐ์?๋ค, ๋ง์ต๋๋ค!Flink๋ ์ด๋ฒคํธ ์คํธ๋ฆผ์ ์ฒ๋ฆฌํ๋ฉด์, ์ด์ ์ด๋ฒคํธ์ ์ํ๋ฅผ ๊ณ์ ์ ์งํ๋ฉฐ ๊ณ์ฐ์ ์ด์ด๊ฐ ์ ์๋ค๋ ๋ป์ ๋๋ค. Spark์ด Standaloneํ๊ณ ์๋์ฐ ์ฌ์ด์ ์ฐ๊ฒฐ์ด ์๋ค: ์ถ์ธก์ ๋ฐ์ดํฐ๋ฅผ ์๋์ฐ ๋จ์๋ก ์๋ผ์ ์ฒ๋ฆฌํ๊ณ , ์๋์ฐ๋ผ๋ฆฌ ์ํ๋ฅผ ๊ณต์ ํ์ง ์๋๋ค๋ ๋ป ๋ง์๊น์? ์ญ์ ์ ์ดํดํ์ จ์ต๋๋ค!!Spark Structured Streaming์ ์๋์ฐ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ๋๋๊ณ , ๊ทธ ์๋์ฐ ๊ฐ์ ์ํ(State)๋ฅผ ์ง์ ์ฐ๊ฒฐํ์ง ์์ต๋๋ค. ์ฆ, ์ด์ ์๋์ฐ์์์ ๋์ ์ํ๋ฅผ ์ ์งํ๊ฑฐ๋ ์ธ์ ๊ธฐ๋ฐ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ค๋ฉด ๊ฐ๋ฐ์๊ฐ ์ง์ ์ธ๋ถ ์ ์ฅ์(State Store, Redis ๋ฑ)์ ์ ์ฅํ๊ณ ๋ถ๋ฌ์์ผ ํด์. ๋ฐ๋ฉด Flink๋ ๊ทธ ์ํ ๊ด๋ฆฌ๊ฐ ๋ด๋ถ์ ์ด๋ฏธ ํตํฉ๋์ด ์์ฃ . ๋์์ด ๋์ จ์ผ๋ฉด ์ข๊ฒ ๋ค์! - ์ฐธ๊ณ ๋ก ์ ๊ฐ ๋ด์ผ๋ถํฐ 3์ผ๊ฐ ํด๊ฐ๋ผ... ๋ค์ ์ง๋ฌธ์ ํ์ค๋๋ ๋ฆ๊ฒ ๋ต๋ณ๋๋ฆด์ ์์ต๋๋ค(๋ฉํ์ ์๊ฐ์ ธ๊ฐ๊บผ๋ผ...)
- 0
- 2
- 30
Q&A
dns ๊ด๋ จํ์ฌ ์ง๋ฌธ์ด ์์ต๋๋ค.
์๋ ํ์ธ์ Domini๋,์ ๊ฐ ์ ์ดํดํ๋์ง ๋ชจ๋ฅด๊ฒ ๋๋ฐ, ๋ฐ์ AI๊ฐ ๋งํ ๋๋ก AWS ๊ฐ์ ๊ณณ์์ ํ์ ๋ค๋ฉด ๋ฑ๋กํ์ Customํ ๋๋ฉ์ธ์ Route53์์ Ingress ์ฃผ์์ ์ฐ๊ฒฐํ์๋ฉด ๋ฉ๋๋ค.
- 0
- 2
- 19
Q&A
kafka ๋จ๋ ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ณด๋ค flink๋ฅผ ์ถ๊ฐ๋ก ๊ตฌ์ถํ๊ณ ์ฌ์ฉ์์ ์ฅ์ ์ ๋ํด ์ง๋ฌธ ๋๋ฆฝ๋๋ค.
์๋ ํ์ธ์, ๋ฐฑ์งํ๋,์ข์ ์ง๋ฌธ์ด์์. ์์ฝํ์๋ฉด...Kafka ๋จ๋ ์ผ ๊ฒฝ์ฐ์๋ ๋ฉ์์ง ๋ฒ์ค + ๊ฐ๋จํ ์๋น/์์ฐ์ ์ต์ ์ด๋ผ ํ ์ ์๊ณ , ์ํ๊ฐ ์๊ณ , ์๋์ฐ/์กฐ์ธ/์ง์ฐ ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ฐ ๋จ์ํ ๊ฒฝ์ฐ ๊ด์ฐฎ์ต๋๋ค.Flink ์ถ๊ฐํ์๋ฉด ๋๊ท๋ชจ ์ํ, ์ด๋ฒคํธํ์ ์ ํ์ฑ, ๋ณต์กํ ์๋์ฐ ์กฐ์ธ, ์ฌ์ฒ๋ฆฌ ๋ฐ Backfill, ์ ํํ ํ ๋ฒ ์ฒ๋ฆฌ๊น์ง ๋ ๋ง์ ์ฅ์ ์ด ์์ต๋๋ค.์ ๊ฐ ์ค์ ์์ ๋๊ผ๋ ์ข์ ์ ์ผ๋ก๋ ์ง์ฐ ์ด๋ฒคํธ ๋ณด์ , ์ธ์ ์ข ๋ฃ ํ์ด๋จธ ๊ฐ์ ๊ฒ์ ์ ์ฐ๊ณ ์์ต๋๋ค.
- 0
- 1
- 27








