์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- CI/CD
- DataFrame Hint
- Spark
- Docker
- ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ
- Airflow
- Kubernetes
- Kafka
- Salting
- Dag
- Spark SQL
- backfill
- spark executor memory
- redshift
- Spark ์ค์ต
- k8s
- KDT_TIL
- Speculative Execution
- mysql
- ๋น ๋ฐ์ดํฐ
- off heap memory
- colab
- topic
- disk spill
- AQE
- Spark Partitioning
- SQL
- Spark Caching
- aws
- etl
- Today
- Total
JUST DO IT!
๋น ๋ฐ์ดํฐ์ ์ค์๊ฐ ์ฒ๋ฆฌ -TIL230710 ๋ณธ๋ฌธ
๐ KDT WEEK 15 DAY 1 TIL
- ๋น ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ
๐ฅ ๋น ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ
์ฒ์์๋ ๋ฐฐ์น ์ฒ๋ฆฌ์ ์ด์ > ์ฒ๋ฆฌํ ์ ์๋ ๋ฐ์ดํฐ์ ์์ด ์ค์
์๋น์ค๊ฐ ๊ณ ๋ํ๋๋ฉด์ ์ ์ ๋ ์ค์๊ฐ ์ฒ๋ฆฌ ์๊ตฌ๊ฐ ์๊ธฐ๊ธฐ ์์ํ๋ค.
๋ฐ์ดํฐ ์ฒ๋ฆฌ์์ ์ฌ์ฉํ๋ ์ฃผ์ ์ฉ์ด 4๊ฐ
- ์ฒ๋ฆฌ๋(Throughput) : ๋จ์ ์๊ฐ๋์ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐ์ดํฐ์ ์, ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค์ ๋ฐฐ์น ์์คํ ์์ ์ค์
- ์ง์ฐ์๊ฐ(Latency) : ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ, ํ๋ก๋์ DB์ฒ๋ผ ์ค์๊ฐ ์์คํ ์์ ์ค์
- ๋์ญํญ(Bandwidth) : ์ฒ๋ฆฌ๋ x ์ง์ฐ์๊ฐ
- SLA(Service Level Argreement) : ์๋น์ค ์ ๊ณต์
์ฒด์ ๊ณ ๊ฐ ๊ฐ์ ๊ณ์ฝ ๋๋ ํฉ์
- ์ฌ๋ด ์์คํ ๋ค๊ฐ์์๋ ์ง์ฐ์๊ฐ์ด๋ ์ ํ์๋ฑ์ด SLA๋ก ์ฌ์ฉ๋๊ธฐ๋ ํ๋ค.
- ๋ฐ์ดํฐ ์์คํ ์ด๋ผ๋ฉด ๋ฐ์ดํฐ์ ์์์ฑ(Freshness)๋ ์ค์ํ ํฌ์ธํธ๊ฐ ๋๋ค.
- ex) API์ ํ๊ท ์๋ต ์๊ฐ์ด 0.5์ด์์ ์๋ต ๋์ด์ผํ๋ค
โ ๋ฐ์ดํฐ์ ์ค์๊ฐ ์ฒ๋ฆฌ
๋ฐ์ดํฐ์ ๋ฐฐ์น ์ฒ๋ฆฌ
- ๋ณดํต ๋ถ์์ ์๊ฐ, ์ผ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ๋ชจ์์ ์ฒ๋ฆฌ ๋ฐ ์ ์ฅ
- ํ๋ฒ์ ๋ชจ์์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ถ์ฐ ํ์ผ ์์คํ (HDFS, S3 ๋ฑ)์ ์ฌ์ฉ
- ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ๋ถ์ฐ ์ฒ๋ฆฌ ์์คํ (MapReduce, Hive, Spark ๋ฑ) ๋ฐ ์ค์ผ์ค๋ง์ผ๋ก Airflow๋ฅผ ์ฌ์ฉ
๋ฐ์ดํฐ ์ค์๊ฐ ์ฒ๋ฆฌ
- ๋ถ๋ณด๋ค ๋ ๋ฎ์ ์ฃผ๊ธฐ(micro batch)๋ก ์ฐ์์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ => semi-realtime
- ํน์ ํ ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐ๋ก ์ฆ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ ๋ฐ ์ ์ฅ => realtime
- ์ฒ๋ฆฌ๋๋ณด๋ค ์ง์ฐ์๊ฐ(์ฒ๋ฆฌ์๋, Latency)๊ฐ ์ค์
- ๋ฐฐ์น ์ฒ๋ฆฌ ๋ค์์ ๊ณ ๋ํ ๋จ๊ณ๋ก, ์์คํ ๊ด๋ฆฌ ๋ฑ์ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๋ค.
์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ
1. ๋ฐ์ดํฐ ์์ฑ์(Producer, Publisher)๊ฐ ๋ฐ์ดํฐ ์์ฑ
2. ์ฐ์ํด์ ๋ฐ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์๊ฐ์์ผ๋ก ์ ๋ ฌ๋์ด Message Queue(or Event Stream)์ ์ ์ฅ
3. ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ ์๋น์(Consumer, Subscriber)๊ฐ ์ฝ๊ฒ ๋จ
์ด ์ด๋จ์์ ๊ณ์์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฅผ Event๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, Immutableํ ํน์ฑ์ด ์๋ค.
++) ์ด ์ค์๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ์๋น์ค๋ค
์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ์์ง ํ๋ค : Kafka, Kinesis..
์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ฒ๋ฆฌ ์์คํ : Spark Streaming, Samza...
์ค์๊ฐ ๋ฐ์ดํฐ ๋ถ์ ๋์๋ณด๋ : Druid(์คํ์์ค)
๐ ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ฅ๋จ์
์ค์๊ฐ ์ฒ๋ฆฌ์ ์ฅ์
- ์ฆ์์ ์ธ ์ธ์ฌ์ดํธ ๋ฐ๊ฒฌ ๋ฐ ์ด๋ฒคํธ์ ๋ํ ์ ์ ๋์
- ์ด์์ ํจ์จ์ฑ ํฅ์๊ณผ ํจ์จ์ ์ธ ๊ฐ์ธํ๋ ์ฌ์ฉ์ ๊ฒฝํ
- IoT ๋ฐ ์ผ์ ๋ฐ์ดํฐ์ ํ์ฉ ๋ฐ ํ์ง์ ๋ณด์ ๊ธฐ๋ฅ์ฑ
์ค์๊ฐ ์ฒ๋ฆฌ์ ๋จ์
- ๋ฐฐ์น ์์คํ ๊ณผ ๋ค๋ฅด๊ฒ ์ค์ ์ฌ์ฉ์์ ๊ด๋ จ๋ ์ผ์ ์ฌ์ฉ๋ ํ๋ฅ ์ด ๋์ ์์คํ ์ฅ์ ๋์์ด ์ค์
- ์ด์ ๋ฐ๋ฅธ ์ด์ ๋น์ฉ ์ฆ๊ฐ : ๋ฐ์ดํฐ ์ ์ค ๊ฐ๋ฅ์ฑ์ด ์ปค์ง์ ๋ฐ๋ผ ํญ์ ๋ฐฑ์ ์ ์ ๊ฒฝ์จ์ผํจ
๐ Realtime vs Semi-Realtime
Realtime
- ์งง์ Latency, ๊ฑฐ์ ์ฆ๊ฐ ๋ฐ์
- ์ฐ์์ ์ธ ๋ฐ์ดํฐ ์คํธ๋ฆผ
- ์ด๋ฒคํธ ์ค์ฌ ์ํคํ ์ฒ : ์์ ๋ฐ์ดํฐ ์ด๋ฒคํธ์ ์ํด ์์ ์ด๋ ๊ณ์ฐ์ด ํธ๋ฆฌ๊ฑฐ๋๋ ๊ตฌ์กฐ ex) ์ ์ฉ์นด๋์ ์ฌ์ฉ
- ๋์ ๋ฐ ๋ฐ์ํ : ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๋ณํ์ ๋์ ์ผ๋ก ๋์ํ์ฌ ์ค์๊ฐ ๋ถ์
Semi-Realtime
- ํฉ๋ฆฌ์ ์ธ Latency, ์ผ๋ฐ์ ์ธ ๋ฐฐ์น๋ณด๋ค๋ ์งง์ ์ฃผ๊ธฐ
- ๋ฐฐ์น์ ์ ์ฌํ ์ฒ๋ฆฌ(ํ์ง๋ง micro-batch)
- ์ ์์ฑ๊ณผ ํจ์จ์ฑ ์ฌ์ด์ ๊ท ํ์ ๋ง์ถฐ ์ฌ์ฉ > ๋ฆฌ์์ค ํ์ฉ๋๋ฅผ ๋์ด๊ธฐ ์ํ ์ฆ๊ฐ์ฑ์ ํฌ์
๐ ๋๋ค ์ํคํ ์ฒ(Lambda Architecture)
๋ฐฐ์น ๋ ์ด์ด์ ์ค์๊ฐ ๋ ์ด์ด ๋ ๊ฐ๋ฅผ ๋ณ๋๋ก ์ด์ํ๋ ์ํคํ ์ฒ
๐ ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ ๋ ๊ฐ์ง
1. Point to Point
Producer๊ฐ Consumer์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ๋ณด๋ด๋ ํํ
- Throughput๋ ์ค์ํ์ง๋ง Latency๊ฐ ์ค์ํ ์์คํ ์์ ์ฌ์ฉ ๊ฐ๋ฅ (๋ณดํต API)
- ๋ค์์ Consumer๋ค์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ์ค๋ณตํด์ ๋ณด๋ด์ผํจ
- BackPressure์ ์ทจ์ฝํจ
2. Messaging Queue
Producer๊ฐ ์์ฑํ ๋ฐ์ดํฐ๊ฐ Message Queue๋ฅผ ๊ฑฐ์ณ Consumer๊ฐ ์๋นํ๋ ํํ
- Producer์ Consumer๊ฐ ๋ ๋ฆฝ์ ์ธ ํํ๋ก ์ฌ๊ณ ์ํ์ด ์ ์
- ์์ฃผ ์งง์ ์ฃผ๊ธฐ(micro-batch)๋ก ๋ฐ์ดํฐ๋ฅผ ๋ชจ์์ ์ฒ๋ฆฌ > ex) Spark Streaming
- ๋ค์์ Consumer๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์์ผ๋ฉฐ Point-to-Point๋ณด๋ค ์ด์์ด ์ฉ์ด
♠ BackPressure
๋ฐ์ดํฐ ์์ฑ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๋น๋๊ฐ ๋ฐ์ดํฐ ์๋น์์ ๋ฐ์ดํฐ ์๋น ๋น๋๋ณด๋ค ๋์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ฆฌ๋ ๋ฌธ์
Message Queue๋ฅผ ์ค๊ฐ์ ๋์ ํ๋ ๊ฒ์ผ๋ก ์ด๋์ ๋ ๋ฐฉ์ง ๊ฐ๋ฅ >> Kafka
Consumer์๊ฒ Buffer๋ผ๋ ์์ ๊ณต๊ฐ์ด ์๊ธดํ์ง๋ง, ์ด๊ฑด ๊ธ๋ฐฉ์ฐธ