Data Engineering
162 bài viết
Đọc theo series
Data Engineering là gì, vai trò trong vòng đời dữ liệu, và bức tranh hệ sinh thái công cụ.
CSV/JSON/Parquet/Avro, lưu trữ theo hàng vs cột, nén, và OLTP vs OLAP.
ETL vs ELT, thiết kế data pipeline, Airflow/DAG, batch vs streaming và idempotency.
Vì sao xử lý phân tán, mô hình Spark (RDD/DataFrame), lazy evaluation, shuffle và tối ưu.
Streaming vs batch, Apache Kafka (topic/partition/consumer group), exactly-once và stream processing.
Định lý CAP, nhất quán (consistency), partitioning, replication và đánh đổi trong hệ phân tán.
Phân biệt Data Warehouse, Data Lake và Lakehouse; table format (Delta/Iceberg) và medallion architecture.
Data governance, chất lượng dữ liệu, lineage & catalog, và bảo mật/quyền riêng tư (PII, GDPR).
dbt cho ELT: model, materialization, test, documentation, lineage và phát triển warehouse như phần mềm.
Kimball vs Inmon vs Data Vault, fact các loại, SCD chi tiết, grain, surrogate key và mô hình hoá cho ngân hàng.
So sánh Snowflake, BigQuery, Databricks, Redshift; tách compute–storage, MPP, pricing và cách chọn.
Change Data Capture (Debezium), streaming ETL, Lambda vs Kappa, exactly-once và đồng bộ core→warehouse realtime.
Vì sao CDC, cơ chế redo/archive log của Oracle, so sánh GoldenGate vs Debezium (LogMiner/XStream), và lộ trình lab.
Lab: chạy Oracle bằng Docker, bật ARCHIVELOG, supplemental logging, tạo user CDC và cấp quyền cho LogMiner/GoldenGate.
Extract, Trail, Distribution/Replicat, Manager; Microservices Architecture (MA) vs Classic; integrated vs parallel Replicat.
Lab từng bước: cài GoldenGate Microservices, tạo Integrated Extract, trail, Distribution Path và Replicat để replicate Oracle→Oracle.
Lab: dùng GoldenGate for Big Data đẩy thay đổi từ trail sang Apache Kafka; Kafka Handler, format JSON/Avro, ánh xạ topic.
Lab: dựng Kafka + Kafka Connect + Debezium, cấu hình Oracle connector (LogMiner), snapshot & streaming, đọc message CDC.
Kiến trúc Kafka Connect (source/sink, worker, converter), Schema Registry (Avro/JSON Schema), SMT và sink connector JDBC.
Chọn GoldenGate hay Debezium, schema evolution, exactly-once vs at-least-once, giám sát độ trễ, bảo mật và use case ngân hàng.
Lab hoàn chỉnh với docker-compose: Oracle XE + Kafka + Connect (Debezium + JDBC sink) đồng bộ near-real-time sang Postgres, kiểm thử & dọn dẹp.
Broker, topic, partition, offset, replication, ISR, controller; mô hình log phân tán và KRaft vs ZooKeeper.
Cơ chế gửi, key & partitioner, acks, idempotent producer, batching/linger/compression, retries và delivery semantics.
Consumer group & phân phối partition, commit offset, rebalance, delivery semantics và consumer lag.
Log segment, retention theo thời gian/dung lượng, log compaction, replication & độ bền, min.insync.replicas, tiered storage.
Framework Connect: source/sink connector, worker distributed, converter, SMT, REST API và xử lý lỗi/DLQ.
Xử lý luồng ngay trên Kafka: KStream vs KTable, stateful ops, windowing, joins, exactly-once và ksqlDB bằng SQL.
Sizing cluster, giám sát (JMX/lag), bảo mật (TLS/SASL/ACL), tối ưu hiệu năng, nâng cấp và sự cố thường gặp.
Airflow là gì, vì sao 'pipeline as code', kiến trúc Airflow 3 (API server, scheduler, DAG processor, workers, triggerer, metadata DB) và Task Execution API, khác biệt với Airflow 2, khi nào nên/không nên dùng.
Mổ xẻ DAG và Task: khai báo bằng @dag/@task (TaskFlow) và cách cổ điển, thiết lập phụ thuộc (>>, chain), tham số schedule/start_date/catchup/backfill, data interval, retries và cấu trúc một DAG production.
Các khối xây dựng task: Operators (Bash/Python/SQL/transfer), Sensors (poke vs reschedule, deferrable), Hooks kết nối hệ ngoài, hệ sinh thái Providers, và cách viết custom operator/hook đúng chuẩn.
Truyền dữ liệu giữa các task: TaskFlow API (@task) và XCom hoạt động thế nào, custom XCom backend cho payload lớn, Jinja templating & params, và Dynamic Task Mapping (.expand/.partial) để sinh task theo runtime.
Các executor trong Airflow 3 (Local, Celery, Kubernetes, Edge), khác biệt so với Airflow 2 (bỏ Sequential/hybrid), điều khiển đồng thời (parallelism, pools, max_active_runs/tasks), và chiến lược scale + gỡ nút thắt.
Bên trong bộ lập lịch Airflow: DAG run & data interval, cron/timedelta/preset, custom Timetables, và Assets (tên mới của Datasets) cho lập lịch theo dữ liệu + scheduling hướng sự kiện tích hợp messaging trong Airflow 3.
Đưa Airflow lên production: các cách triển khai (Docker Compose, Helm/Kubernetes, dịch vụ managed MWAA/Cloud Composer/Astronomer), CI/CD cho DAG, quản lý Connections/Variables/Secrets backend, logging, giám sát metrics và bảo mật/RBAC.
Nguyên tắc viết DAG bền vững: idempotency & atomicity, task nhỏ có mục đích rõ, mẫu ETL/ELT, tích hợp Spark/dbt/Kafka, kiểm thử DAG, kiểm tra chất lượng dữ liệu, các anti-pattern cần tránh và điểm mới đáng dùng của Airflow 3.
Apache Spark là gì và vì sao thắng MapReduce: mô hình in-memory, kiến trúc Driver–Executor–Cluster Manager, DAG & lazy evaluation, và các thành phần (Spark SQL, Structured Streaming, MLlib).
Ba tầng API của Spark: RDD (điều khiển thấp), DataFrame/Dataset (khai báo, tối ưu tự động), bộ tối ưu Catalyst và engine Tungsten, cùng transformation vs action và vai trò của schema.
Xử lý dữ liệu với Spark SQL: DataFrame API (select/filter/withColumn/groupBy/agg), join các loại, hàm dựng sẵn & window, UDF (và vì sao hạn chế), đọc/ghi phân vùng, và catalog/Hive metastore.
Hiểu nút thắt lớn nhất của Spark: shuffle là gì và vì sao đắt, narrow vs wide transformation, số partition (spark.sql.shuffle.partitions), data skew và cách xử lý, repartition vs coalesce, và Adaptive Query Execution.
Làm Spark job chạy nhanh & ổn định: mô hình bộ nhớ executor, cache/persist đúng cách, broadcast join, chỉnh số partition & AQE, xử lý spill/OOM, và cách kích cỡ executor/core hợp lý.
Xử lý dòng dữ liệu bằng Spark: mô hình unbounded table & micro-batch, đọc/ghi Kafka, event time vs processing time, watermark & windowing, output modes, checkpoint và đảm bảo exactly-once.
Đưa độ tin cậy của kho vào data lake: Delta Lake mang giao dịch ACID, time travel, schema evolution và MERGE lên file Parquet; kiến trúc medallion (bronze/silver/gold); OPTIMIZE/Z-order; so sánh Iceberg & Hudi.
Đưa Spark vào production: các cách chạy (YARN, Kubernetes, Databricks/EMR), spark-submit & cấu hình, đọc Spark UI để chẩn đoán, PySpark best practices, điều phối bằng Airflow, và các lỗi thường gặp.
dbt là gì và vì sao là 'chữ T' của ELT hiện đại: triết lý analytics engineering, dbt Core vs dbt Cloud, cách dbt biên dịch SQL & chạy trên warehouse, cấu trúc project và vòng đời một lần chạy.
Đơn vị cốt lõi của dbt: model là một câu SELECT, cách ref()/source() dựng DAG, và bốn kiểu materialization (view, table, incremental, ephemeral) — chọn đúng để cân bằng chi phí, độ tươi và tốc độ.
Điểm vào và lịch sử dữ liệu trong dbt: khai báo sources & kiểm tra độ tươi (freshness), seeds cho dữ liệu tĩnh nhỏ, và snapshots để lưu lịch sử thay đổi theo kiểu Slowly Changing Dimension Type 2.
Đảm bảo chất lượng & minh bạch dữ liệu bằng dbt: data tests dựng sẵn (unique, not_null, relationships, accepted_values), singular test, unit test, và tài liệu tự sinh kèm lineage graph.
Sức mạnh lập trình của dbt: Jinja biến SQL thành template động, macros để tái dùng logic (DRY), biến & môi trường, hooks, và hệ sinh thái packages (dbt_utils) — cùng cảnh báo đừng lạm dụng.
Xử lý bảng lớn hiệu quả trong dbt: cơ chế incremental (chỉ nạp dữ liệu mới), câu is_incremental(), các chiến lược (merge/insert_overwrite/append/delete+insert), unique_key, xử lý late data, và tối ưu chi phí trên warehouse.