Servisphere

Module 11 · SAA-C03

Phân tích dữ liệu

Kinesis, Firehose, Glue, Athena, EMR, Redshift, Lake Formation, OpenSearch: thu thập, xử lý và truy vấn dữ liệu lớn.

  • DomainThiết kế hiệu năng cao
  • DomainTối ưu chi phí
  • 8 sơ đồ
  • 11 tình huống
  • 12 dịch vụ

5 phút phải nhớ

  1. Kinesis Data Streams: luồng dữ liệu thời gian thực, bạn tự viết consumer, dữ liệu giữ lại 24 giờ (tăng được tới 365 ngày) và đọc lại được.Đề có "nhiều ứng dụng cùng đọc một luồng", "đọc lại dữ liệu cũ", "giữ thứ tự theo khoá" → Kinesis Data Streams.
  2. Amazon Data Firehose: nạp dữ liệu luồng vào S3, Redshift, OpenSearch, Splunk… gần thời gian thực, không có shard để quản lý.Firehose gom dữ liệu theo buffer (kích thước hoặc thời gian) rồi ghi; đổi sang Parquet và gọi Lambda biến đổi được. "Đổ log vào S3 ít vận hành nhất" → Firehose.
  3. Shard ở chế độ provisioned: ghi tối đa 1 MB/s hoặc 1.000 bản ghi/s, đọc 2 MB/s. Chế độ on-demand tự co giãn.Lỗi ProvisionedThroughputExceeded: thêm shard, chuyển on-demand, hoặc chọn partition key phân bố đều hơn (tránh shard nóng).
  4. Amazon MSK là Apache Kafka được quản lý.Đề nói "đang dùng Kafka", "cần API Kafka", "chuyển cụm Kafka lên AWS" → MSK, không phải Kinesis.
  5. Managed Service for Apache Flink xử lý luồng có trạng thái: lọc, gộp theo cửa sổ thời gian, phát hiện bất thường ngay trên Kinesis hoặc Kafka."Tính trung bình mỗi 5 phút trên luồng dữ liệu" → Flink.
  6. Athena: chạy SQL thẳng trên dữ liệu trong S3, serverless, tính tiền theo lượng dữ liệu quét.Giảm chi phí và tăng tốc: lưu dạng cột (Parquet / ORC), nén, chia partition (vd. theo ngày) để mỗi câu truy vấn quét ít dữ liệu.
  7. AWS Glue: Data Catalog (kho metadata dùng chung), crawler tự đoán schema, và ETL serverless chạy Spark.Athena, Redshift Spectrum và EMR đều đọc bảng từ Glue Data Catalog. "Tự phát hiện schema dữ liệu mới trong S3" → Glue crawler.
  8. Redshift là data warehouse lưu theo cột cho phân tích (OLAP) và BI trên dữ liệu có cấu trúc lớn.Join phức tạp, nhiều người phân tích đồng thời, báo cáo định kỳ → Redshift. Tải không đều, không muốn quản cụm → Redshift Serverless.
  9. Redshift Spectrum truy vấn dữ liệu trong S3 mà không cần nạp vào Redshift.Dữ liệu nóng nằm trong Redshift, dữ liệu lịch sử để rẻ trên S3, vẫn join chung được trong một câu SQL.
  10. Amazon EMR chạy cụm Hadoop / Spark / Hive / Presto do bạn cấu hình.Cần framework big data cụ thể hoặc tùy biến cụm → EMR. Task node không giữ dữ liệu HDFS nên chạy Spot được để giảm chi phí.
  11. Lake Formation dựng data lake trên S3 và phân quyền tập trung tới mức cột, hàng."Nhóm A chỉ thấy vài cột của bảng" khi truy vấn qua Athena / Redshift Spectrum / EMR → Lake Formation, không phải bucket policy.
  12. OpenSearch Service: tìm kiếm toàn văn, phân tích log và dashboard (OpenSearch Dashboards)."Tìm kiếm theo từ khoá trong catalog sản phẩm" hoặc "phân tích log gần thời gian thực có dashboard" → OpenSearch.
  13. Amazon Quick (trước là QuickSight) là công cụ BI dựng dashboard từ Athena, Redshift, S3, RDS…Đề hỏi "dashboard cho người dùng nghiệp vụ, serverless" → Quick / QuickSight.

Sơ đồ

Luồng thời gian thực: Kinesis Data Streams và nhiều consumer

Luồng thời gian thực: Kinesis Data Streams và nhiều consumerRegionPutRecords122233App / thiết bịKinesis Data Streamsgiữ 24 giờ – 365 ngàyLambdaxử lý từng lôFlinkcửa sổ 5 phútFirehoseDynamoDBS3 (bản thô)
Nhiều nguồn ghi vào một luồng. Mỗi consumer đọc độc lập theo tốc độ riêng: Lambda xử lý từng lô, Flink tính theo cửa sổ thời gian, Firehose lưu bản thô xuống S3.

Từng bước

  1. Nguồn ghi bản ghi kèm partition key; cùng key thì vào cùng shard và giữ thứ tự.
  2. Ba consumer đọc cùng luồng một cách độc lập; ai lỗi thì đọc lại từ vị trí cũ trong thời gian giữ dữ liệu.
  3. Lambda ghi kết quả vào DynamoDB; Firehose gom buffer rồi lưu bản thô xuống S3.

Firehose: đổ log vào S3 dạng Parquet rồi truy vấn bằng Athena

Firehose: đổ log vào S3 dạng Parquet rồi truy vấn bằng AthenaRegionPutRecord12Parquet32SQL4Ứng dụngFirehosebuffer 1–128 MiB / 0–900 sLambdabiến đổi (tuỳ chọn)Glue Data Catalogschema để đổi ParquetS3logs/dt=2026-10-16/Athena
Không có máy chủ nào phải quản lý: Firehose gom buffer, gọi Lambda biến đổi (tuỳ chọn), đổi sang Parquet theo schema trong Glue Data Catalog, ghi S3 theo prefix ngày.

Từng bước

  1. Ứng dụng gửi log tới Firehose.
  2. Firehose gọi Lambda làm sạch dữ liệu và dùng schema trong Glue Data Catalog để đổi sang Parquet.
  3. Đủ kích thước hoặc hết thời gian buffer thì ghi một file xuống S3.
  4. Athena truy vấn bằng SQL, chỉ đọc các cột cần.

Partition key quyết định shard: tránh shard nóng

Partition key quyết định shard: tránh shard nóngKinesis Data Streams (provisioned)11Throttled2333key = user-17key = user-42key = "all"key nóngShard 11 MB/s ghiShard 21 MB/s ghiShard 3quá tảiConsumer
Kinesis băm partition key để chọn shard. Một key chiếm phần lớn lưu lượng thì shard đó vượt 1 MB/s ghi dù các shard khác rảnh.

Từng bước

  1. Key có nhiều giá trị (vd. user ID) chia đều tải ra các shard.
  2. Một key cố định dồn hết vào một shard: vượt 1 MB/s hoặc 1.000 bản ghi/s thì bị ProvisionedThroughputExceeded.
  3. Cách sửa: partition key phân tán hơn, thêm shard, hoặc chuyển sang on-demand.

Data lake trên S3: Glue Data Catalog và Lake Formation

Data lake trên S3: Glue Data Catalog và Lake FormationData lake (S3)11quét22cấp quyền3333raw/JSON, CSV gốcGlue job (ETL)curated/Parquet, partitionGlue crawlerData CatalogLake Formationquyền cột / hàngAthenaRedshift SpectrumEMR
Dữ liệu đi qua các vùng raw → processed → curated. Crawler cập nhật Data Catalog; Lake Formation cấp quyền tới cột và hàng cho Athena, Redshift Spectrum, EMR.

Từng bước

  1. Glue job làm sạch dữ liệu thô, ghi ra Parquet chia partition.
  2. Crawler quét S3, tạo / cập nhật bảng và partition trong Data Catalog.
  3. Athena, Redshift Spectrum, EMR đọc schema từ Data Catalog; Lake Formation quyết định ai thấy bảng / cột / hàng nào.

Athena chỉ quét partition có trong WHERE

Athena chỉ quét partition có trong WHEREs3://logs/SQL1quét2bỏ qua3Nhà phân tíchAthenaWHERE dt='2026-10-16'dt=2026-10-14/dt=2026-10-15/dt=2026-10-16/chỉ quét phần này
Bảng chia theo ngày (dt=…). Câu truy vấn có WHERE dt = '2026-10-16' chỉ đọc thư mục của ngày đó; cộng thêm Parquet thì chỉ đọc các cột cần.

Từng bước

  1. Câu truy vấn lọc theo cột partition dt.
  2. Athena chỉ đọc thư mục dt=2026-10-16: ít dữ liệu quét, ít tiền.
  3. Các partition khác bị bỏ qua hoàn toàn.

Redshift + Spectrum: dữ liệu nóng trong cụm, dữ liệu cũ trên S3

Redshift + Spectrum: dữ liệu nóng trong cụm, dữ liệu cũ trên S3RegionSQL1bảng ngoài222Dashboard BIRedshift3 tháng gần nhấtLớp SpectrumGlue Data CatalogS35 năm dữ liệu cũ
Bảng trong Redshift chứa dữ liệu gần đây; bảng ngoài (external table) trỏ vào S3 qua Glue Data Catalog. Một câu SQL join được cả hai.

Từng bước

  1. Dashboard gửi một câu SQL join bảng trong Redshift với bảng ngoài.
  2. Phần của bảng ngoài được Spectrum xử lý song song thẳng trên S3, schema lấy từ Data Catalog; dữ liệu không phải nạp vào cụm.

Cụm EMR: core node On-Demand, task node Spot

Cụm EMR: core node On-Demand, task node SpotCụm EMR1122Primary nodeCore nodeOn-Demand, HDFSTask nodeSpot, không HDFSS3 (EMRFS)dữ liệu vào / ra
Primary node điều phối. Core node chạy tác vụ và giữ HDFS nên cần ổn định. Task node chỉ tính toán, mất cũng không mất dữ liệu: hợp chạy Spot.

Từng bước

  1. Primary node chia việc cho core và task node.
  2. Dữ liệu chính để trên S3 (EMRFS): cụm có thể tắt khi xong việc mà không mất dữ liệu.

Phân tích log gần thời gian thực với OpenSearch

Phân tích log gần thời gian thực với OpenSearchRegion112backup3Ứng dụngFirehoseOpenSearchindex logDashboardsS3bản sao lưu
Log từ ứng dụng đi qua Firehose vào OpenSearch để tìm kiếm và vẽ dashboard; bản sao lưu toàn bộ để rẻ trên S3.

Từng bước

  1. Firehose gom log và nạp vào OpenSearch.
  2. Tìm kiếm toàn văn và dashboard trên OpenSearch Dashboards.
  3. Firehose sao lưu bản ghi (toàn bộ hoặc chỉ bản ghi lỗi) xuống S3.

So sánh nhanh

Kinesis Data Streams, Firehose, MSK

Kinesis Data StreamsAmazon Data FirehoseAmazon MSK
Độ trễThời gian thực (mili giây)Gần thời gian thực (gom buffer)Thời gian thực
Ai đọc dữ liệuConsumer bạn viết (Lambda, KCL, Flink…)Firehose tự ghi tới đíchConsumer Kafka
Đọc lại dữ liệu cũCó, trong thời gian giữ (24 giờ – 365 ngày)KhôngCó, theo cấu hình retention của Kafka
Quản lý dung lượngShard (provisioned) hoặc on-demandTự co giãnBroker / chế độ serverless
Hợp vớiNhiều consumer, xử lý tuỳ biếnĐổ dữ liệu vào S3 / Redshift / OpenSearchHệ thống đã dùng Kafka

Chọn công cụ truy vấn và phân tích

AthenaRedshiftEMROpenSearch
KiểuSQL serverless trên S3Data warehouseCụm Hadoop / SparkTìm kiếm và phân tích log
Dữ liệu nằm ởS3Bảng Redshift (+ S3 qua Spectrum)S3 (EMRFS) hoặc HDFSIndex OpenSearch
Tính tiềnTheo dữ liệu quétTheo node hoặc Redshift ServerlessTheo EC2 của cụm + phí EMRTheo node / serverless
Dùng khiTruy vấn ad-hoc, không muốn hạ tầngBI, join lớn, nhiều người dùng đồng thờiJob big data tuỳ biến, nhiều frameworkTìm kiếm toàn văn, log, dashboard

Làm Athena rẻ và nhanh hơn

CáchVì sao
Định dạng cột Parquet / ORCChỉ đọc các cột câu truy vấn cần
Nén (Snappy, GZIP…)Ít byte phải quét
Chia partition (vd. year/month/day)WHERE theo partition thì chỉ quét đúng thư mục đó
Gộp file nhỏ thành file lớnÍt request S3, đọc hiệu quả hơn
Workgroup giới hạn dữ liệu quétChặn câu truy vấn quét quá nhiều

Glue, Lake Formation, EMR: ai làm gì

Dịch vụVai trò trong data lake
Glue Data CatalogDanh mục bảng / schema dùng chung
Glue crawlerQuét S3, tự tạo / cập nhật bảng trong Data Catalog
Glue jobETL serverless (Spark, Python)
Lake FormationPhân quyền tập trung theo database / bảng / cột / hàng
EMRCụm big data tuỳ biến khi Glue không đủ

Tình huống đề hay gặp

1Dữ liệu clickstream cần được 3 ứng dụng khác nhau xử lý độc lập, và phải đọc lại được dữ liệu của 7 ngày trước khi có lỗi xử lý.

Xem đáp án

Đúng: Kinesis Data Streams, tăng thời gian giữ dữ liệu lên 7 ngày, mỗi ứng dụng là một consumer
Nhiều consumer đọc cùng luồng, đọc lại theo vị trí trong thời gian giữ dữ liệu.

Sai: Amazon Data Firehose
Firehose ghi thẳng tới đích, không có consumer tuỳ biến và không đọc lại được.

Sai: Một hàng đợi SQS
Tin nhắn đọc xong là xoá; nhiều ứng dụng cùng đọc thì phải dùng nhiều hàng đợi, và không replay được.

2Cần đưa log ứng dụng vào S3 dạng Parquet để Athena truy vấn, ít vận hành nhất.

Xem đáp án

Đúng: Amazon Data Firehose với chuyển định dạng sang Parquet, đích là S3
Firehose tự gom buffer, đổi định dạng, ghi S3; không có máy chủ.

Sai: Kinesis Data Streams + consumer tự viết chuyển Parquet
Chạy được nhưng phải tự viết và vận hành consumer.

Sai: EC2 chạy script gom log mỗi giờ
Phải tự quản máy, chịu lỗi kém.

3Thỉnh thoảng nhóm vận hành cần chạy SQL trên log ALB đang nằm trong S3; không muốn dựng hạ tầng.

Xem đáp án

Đúng: Athena với bảng trỏ vào thư mục log trên S3
Serverless, trả theo dữ liệu quét, không phải nạp dữ liệu.

Sai: Dựng cụm Redshift và nạp log vào
Tốn tiền cụm chạy liên tục cho nhu cầu thỉnh thoảng.

Sai: Cụm EMR
Phải tạo và quản cụm.

4Hoá đơn Athena tăng mạnh; dữ liệu là file CSV lớn, câu truy vấn hay lọc theo ngày.

Xem đáp án

Đúng: Chuyển dữ liệu sang Parquet có nén và chia partition theo ngày
Athena tính theo dữ liệu quét: định dạng cột + nén + partition làm giảm mạnh lượng quét.

Sai: Chuyển sang Redshift cho rẻ
Không giải quyết gốc vấn đề là quét quá nhiều dữ liệu, lại thêm chi phí cụm.

5Hàng trăm nhà phân tích chạy báo cáo BI với nhiều phép join trên hàng chục TB dữ liệu bán hàng có cấu trúc.

Xem đáp án

Đúng: Amazon Redshift
Data warehouse lưu theo cột, song song hoá truy vấn, dành cho OLAP / BI.

Sai: RDS for PostgreSQL
Database OLTP, không hợp phân tích quy mô TB với nhiều người dùng đồng thời.

Sai: DynamoDB
NoSQL key-value, không hỗ trợ join.

6Dữ liệu 3 tháng gần nhất ở Redshift, 5 năm dữ liệu cũ ở S3; thỉnh thoảng cần báo cáo gộp cả hai mà không tốn chi phí lưu trên Redshift.

Xem đáp án

Đúng: Redshift Spectrum: bảng ngoài trỏ vào S3, join với bảng trong Redshift
Truy vấn dữ liệu S3 mà không phải nạp.

Sai: Nạp hết 5 năm vào Redshift
Tốn dung lượng và chi phí cho dữ liệu ít dùng.

7Cần chạy job Spark, Hive và HBase hiện có, tuỳ chỉnh phiên bản và cấu hình cụm, và giảm chi phí tính toán.

Xem đáp án

Đúng: Amazon EMR, dữ liệu trên S3, task node chạy Spot
EMR cho chọn framework và cấu hình; task node không giữ dữ liệu HDFS nên dùng Spot an toàn.

Sai: AWS Glue
Glue chạy ETL Spark / Python serverless, không chạy Hive / HBase và ít tuỳ biến cụm.

Sai: Athena
Chỉ là SQL trên S3.

8Data lake trên S3: nhóm marketing chỉ được xem một số cột của bảng khách hàng khi truy vấn bằng Athena.

Xem đáp án

Đúng: Lake Formation cấp quyền mức cột cho nhóm marketing
Phân quyền tập trung, áp dụng cho Athena, Redshift Spectrum, EMR.

Sai: Bucket policy chặn theo prefix
Bucket policy chỉ kiểm soát tới mức đối tượng, không tới cột.

Sai: Tạo bản sao dữ liệu bỏ bớt cột
Trùng lặp dữ liệu, khó đồng bộ.

9Dữ liệu mới được đổ vào S3 hằng ngày với schema có thể thay đổi; cần bảng luôn cập nhật để truy vấn.

Xem đáp án

Đúng: Glue crawler chạy theo lịch, cập nhật Glue Data Catalog
Crawler tự đoán schema và partition mới.

Sai: Sửa DDL bảng bằng tay mỗi lần
Dễ quên, dễ sai.

10Website thương mại điện tử cần ô tìm kiếm sản phẩm theo từ khoá, có gợi ý và xếp hạng kết quả.

Xem đáp án

Đúng: Amazon OpenSearch Service
Tìm kiếm toàn văn, xếp hạng theo độ liên quan.

Sai: Athena
Truy vấn batch trên S3, không dành cho tìm kiếm tương tác độ trễ thấp.

Sai: DynamoDB scan
Không có tìm kiếm toàn văn, scan chậm và tốn.

11Ứng dụng ghi vào Kinesis Data Streams gặp ProvisionedThroughputExceeded, dù tổng lưu lượng thấp hơn tổng dung lượng các shard.

Xem đáp án

Đúng: Chọn partition key có nhiều giá trị để phân bố đều, hoặc dùng chế độ on-demand
Một partition key "nóng" dồn hết vào một shard dù các shard khác còn trống.

Sai: Đổi sang SQS
Mất các đặc tính của luồng (thứ tự, nhiều consumer, replay).

Chọn nhanh

Dữ liệu của bạn cần đi đâu, xử lý thế nào?

Khi cầnDùng
Luồng thời gian thực, nhiều consumer, đọc lại đượcKinesis Data Streams · xem sơ đồ
Đổ luồng vào S3 / Redshift / OpenSearch, không viết consumerAmazon Data Firehose · xem sơ đồ
Đang dùng Apache KafkaAmazon MSK
Phân tích luồng theo cửa sổ thời gianManaged Service for Apache Flink · xem sơ đồ
SQL ad-hoc trên S3, không hạ tầngAthena (+ Parquet, partition) · xem sơ đồ
Danh mục schema, ETL serverlessAWS Glue (Data Catalog, crawler, job) · xem sơ đồ
BI / OLAP trên dữ liệu có cấu trúc lớnAmazon Redshift (hoặc Redshift Serverless) · xem sơ đồ
Join dữ liệu Redshift với dữ liệu cũ trong S3Redshift Spectrum · xem sơ đồ
Hadoop / Spark / Hive tuỳ biếnAmazon EMR (task node Spot) · xem sơ đồ
Phân quyền data lake tới cột / hàngLake Formation · xem sơ đồ
Tìm kiếm toàn văn, phân tích log có dashboardOpenSearch Service · xem sơ đồ
Dashboard BI cho người dùng nghiệp vụAmazon Quick (QuickSight)

Bẫy hay gặp

  • Chọn Firehose khi đề cần nhiều consumer tuỳ biến hoặc đọc lại dữ liệu: đó là Kinesis Data Streams.
  • Coi Firehose là thời gian thực: dữ liệu được gom theo buffer nên là gần thời gian thực.
  • Chọn Kinesis khi đề nói hệ thống đang dùng Kafka: đó là MSK.
  • Dùng partition key có ít giá trị: một shard bị quá tải trong khi shard khác rảnh.
  • Để Athena quét CSV không nén, không partition rồi than hoá đơn cao.
  • Dựng Redshift cho vài câu truy vấn thỉnh thoảng trên S3: Athena rẻ và đơn giản hơn.
  • Nạp toàn bộ dữ liệu lịch sử vào Redshift trong khi Spectrum đọc được thẳng từ S3.
  • Chạy core node của EMR bằng Spot: core node giữ dữ liệu HDFS, mất node là mất dữ liệu; Spot hợp với task node.
  • Dùng bucket policy để phân quyền theo cột: không làm được, cần Lake Formation.
  • Dùng Athena hoặc DynamoDB cho ô tìm kiếm sản phẩm: tìm kiếm toàn văn là việc của OpenSearch.
  • Nhầm RDS (OLTP) với Redshift (OLAP) khi đề nói báo cáo phân tích trên khối dữ liệu lớn.

Dịch vụ trong module

Số liệu dễ thay đổi (đã kiểm với tài liệu AWS)

  • Kinesis Data Streams (provisioned): mỗi shard ghi tới 1 MB/s hoặc 1.000 bản ghi/s, đọc tới 2 MB/s. kiểm ngày 2026-10-16 ↗
  • Kinesis Data Streams giữ dữ liệu tối thiểu 24 giờ, tăng được tới 8.760 giờ (365 ngày). kiểm ngày 2026-10-16 ↗
  • Kinesis Data Streams on-demand: luồng mới mặc định 4 MB/s ghi và 8 MB/s đọc, tự co giãn. kiểm ngày 2026-10-16 ↗
  • Firehose ghi S3: buffer 1–128 MiB (mặc định 5) và 0–900 giây (mặc định 300); điều kiện nào tới trước thì ghi. kiểm ngày 2026-10-16 ↗
  • Athena tính theo dữ liệu quét; trang giá dùng ví dụ 5 USD mỗi TB. Nén và định dạng cột (Parquet) giảm lượng quét. kiểm ngày 2026-10-16 ↗
  • Athena: khi WHERE có cột partition, chỉ quét dữ liệu của partition đó. kiểm ngày 2026-10-16 ↗
  • Redshift Spectrum truy vấn dữ liệu trong S3 mà không cần nạp vào bảng Redshift; nhiều cụm cùng truy vấn một bộ dữ liệu được. kiểm ngày 2026-10-16 ↗
Luyện câu hỏi module này →