Amazon Kinesis là gì? Data Streams, Firehose và Analytics

Amazon Kinesis là gì? Tìm hiểu Kinesis Data Streams, Data Firehose, Data Analytics, shard và khi nào nên dùng từng dịch vụ xử lý dữ liệu luồng.

5 phút

Amazon Kinesis là nhóm dịch vụ của AWS dùng để thu thập, xử lý và phân tích dữ liệu dạng luồng theo thời gian thực. Dữ liệu luồng là thứ liên tục được sinh ra. Ví dụ là nhật ký ứng dụng, lượt nhấp chuột trên website hay số đo từ cảm biến. Bài này giải thích các thành phần chính của Kinesis và cách chọn đúng dịch vụ cho từng nhu cầu.

Dữ liệu luồng và vì sao cần Kinesis

Dữ liệu luồng và vì sao cần Kinesis
Dữ liệu luồng và vì sao cần Kinesis

Với cách xử lý theo lô truyền thống, dữ liệu được gom lại rồi mới xử lý. Ví dụ, mỗi đêm chạy một lần. Cách này không hợp khi bạn muốn phát hiện giao dịch bất thường ngay lập tức. Nó cũng không hợp khi cần bảng số liệu cập nhật từng giây. Kinesis cho phép nhận dữ liệu ngay khi nó phát sinh và để nhiều ứng dụng cùng đọc.

Đây là dịch vụ được quản lý. Bạn không phải tự dựng và vận hành cụm máy chủ nhận tin nhắn. AWS lo việc mở rộng, sao lưu qua nhiều vùng khả dụng và bảo mật.

Kinesis Data Streams

Kinesis Data Streams
Kinesis Data Streams

Data Streams là dịch vụ lõi. Dữ liệu được lưu tạm trong một luồng để các ứng dụng tiêu thụ. Luồng được chia thành các shard. Mỗi shard có giới hạn thông lượng cố định, cỡ vài megabyte mỗi giây khi ghi. Muốn nhiều dung lượng hơn, bạn thêm shard. Ở chế độ on-demand, AWS tự điều chỉnh số shard giúp bạn.

Mỗi bản ghi gồm một khóa phân vùng (partition key) và dữ liệu. Kinesis băm khóa để quyết định bản ghi vào shard nào. Các bản ghi cùng khóa luôn vào cùng shard và giữ nguyên thứ tự. Vì vậy hãy chọn khóa như mã người dùng. Khi đó thứ tự sự kiện của từng người luôn đúng.

# Ghi một bản ghi vào luồng bằng AWS CLI
aws kinesis put-record \
  --stream-name nhat-ky-click \
  --partition-key user-42 \
  --data "$(echo -n '{"trang":"/gioi-thieu"}' | base64)"

Dữ liệu được giữ mặc định 24 giờ và có thể kéo dài tới 365 ngày với chi phí thêm. Điều này cho phép ứng dụng đọc lại nếu xử lý lỗi. Nếu một shard bị dồn quá nhiều dữ liệu do chọn khóa kém, bạn sẽ gặp lỗi vượt thông lượng. Đây gọi là hot shard, một vấn đề thiết kế thường gặp.

Kinesis Data Firehose

Kinesis Data Firehose
Kinesis Data Firehose

Firehose dùng khi bạn chỉ muốn đưa dữ liệu luồng tới một nơi lưu trữ mà không muốn tự viết ứng dụng đọc. Nó nhận dữ liệu và có thể biến đổi bằng Lambda. Sau đó nó đệm theo kích thước hoặc thời gian. Cuối cùng nó ghi vào S3, Redshift, OpenSearch hoặc một số điểm đến khác. Nó tự mở rộng và không cần quản lý shard.

Đổi lại, Firehose không thực sự là thời gian thực. Do cơ chế đệm, dữ liệu thường tới đích sau từ vài chục giây tới vài phút. Nếu bạn cần phản ứng trong mili giây, hãy dùng Data Streams.

Kinesis Data Analytics

Kinesis Data Analytics
Kinesis Data Analytics

Dịch vụ này cho phép chạy truy vấn hoặc ứng dụng xử lý trực tiếp trên luồng dữ liệu. Ví dụ, tính số lượt nhấp trong từng cửa sổ một phút. Hiện nay AWS cung cấp nó dựa trên Apache Flink. Bạn có thể viết ứng dụng bằng Java, Python hoặc SQL. Kết quả có thể được đẩy ngược lại một luồng khác hoặc sang kho lưu trữ.

So sánh nhanh và cách chọn

  • Cần nhiều ứng dụng cùng đọc, xử lý độ trễ thấp, kiểm soát chi tiết: chọn Data Streams.
  • Chỉ cần chuyển dữ liệu vào S3 hoặc kho phân tích, ít muốn vận hành: chọn Firehose.
  • Cần tính toán theo cửa sổ thời gian ngay trên luồng: chọn Data Analytics.

Trong thực tế bạn hay kết hợp cả ba. Dữ liệu vào Data Streams. Một ứng dụng Analytics tính thống kê. Firehose lưu bản gốc xuống S3 để phân tích về sau.

Lưu ý khi bắt đầu

Hãy bắt đầu với một luồng nhỏ ở chế độ on-demand để tránh tính nhầm số shard. Chú ý chi phí: Kinesis tính tiền theo giờ cho luồng đang chạy, cùng lượng dữ liệu. Luồng thử nghiệm bỏ quên vài tuần vẫn tốn tiền. Cuối mỗi buổi thực hành hãy xóa luồng. Bảo mật cũng quan trọng: dùng IAM để giới hạn ai được ghi và đọc, và bật mã hóa phía máy chủ nếu dữ liệu nhạy cảm.

Khi hệ thống của bạn cần tên miền và định tuyến ra bên ngoài, hãy xem bài về Amazon Route 53. Còn nếu ứng dụng cần chia sẻ tệp giữa nhiều máy chủ, Amazon FSx là lựa chọn đáng cân nhắc. Tài liệu đầy đủ của dịch vụ có tại tài liệu Kinesis của AWS.

Hỏi đáp nhanh

Kinesis khác gì so với SQS? SQS là hàng đợi tin nhắn, mỗi tin thường được một bên xử lý rồi xóa đi. Kinesis lưu bản ghi theo thứ tự trong luồng, cho phép nhiều ứng dụng cùng đọc và đọc lại. Cần thứ tự và đọc lại thì chọn Kinesis. Chỉ cần tách các thành phần ra thì SQS đơn giản hơn.

Dùng Kinesis có cần biết lập trình không? Bạn có thể bắt đầu bằng AWS CLI hoặc bảng điều khiển. Để xây ứng dụng thật sự, hãy dùng SDK của một ngôn ngữ như Java hay Python. SDK giúp ghi và đọc bản ghi.

Bạn có thể xem lộ trình học để nắm thứ tự học các mảng khác. Hãy thử gửi vài bản ghi bằng AWS CLI như ví dụ trên. Sau đó đọc lại chúng để hiểu vòng đi của dữ liệu.

Chuyên mục

Có thể bạn muốn đọc

Xem thêm bài