AWS Kinesis

Collect, process, analyze stream data realtime, đầu vào có thể là application log, metrics, website clickstream, thiết bị IoT…

Kinesis Producers

Mỗi record bao gồm:

  • Sequence number (unique với partition key trong 1 shard)
  • Partition key (phải chỉ định khi put record)
  • Data blob (max 1MB)

Producer có thể là các nguồn sau

  • SDK
  • Kinesis Producer Library (KPL): C++, Java, Batch, Compression, retries
  • Kinesis Agent (Thường để monitor file log)

Có thể gửi 1MB/s hoặc 1000 record/s với mỗi Shard

Sử dụng API PutRecord hoặc PutRecords để gửi record, API PutRecords có thể giảm cost và tăng throughput.

Khi có nhiều hơn 1MB/s hoặc 1000record/s sẽ có ProvisionedThroughputExcceeded, giải quyết theo các cách sau

  • Use highly distributed partition key
  • Implement exponential backoff
  • Scale Shard

Consumer

Lấy record từ Stream và xử lý

  • Classic Fan-out ( Consumer Pull): limit 2MB/s cho mỗi Shard, chia đều cho các Consumer, giới hạn 5 req/s API GetRecord, latency ~200ms, return max 10MB (5s) hoặc 10.000 record.
  • Enhanced Fan-out(Shard push): limit 2MB/s cho mỗi Shard, mỗi Consumer, latency ~70ms, sử dụng HTTP/2 (SubscribeToShard) để push tới Consumer, giới hạn 5 consumer cho mỗi Stream
  • Lambda
    • Có thể xử lý 10 batch/Shard
    • Trường hợp sảy ra lỗi có thể thử lại cho tới khi thành công hoặc data hết hạn
    • Có thể config get Record theo batch
    • Có thể config batch size và batch window
  • Kinesis Data Analysis
  • Kinesis Data Firehose
  • Custom Consumer (SDK) – Classic hoặc Enhanced Fan-out
  • Kinesis Client Library (KCL): Library để đọc từ Stream

Scaling Consumer

  • Metric GetRecords.IteratorAgeMilliseconds: từ thời điểm hiện tại tới thởi điểm record cuối cùng được gọi bởi API GetRecords
    • IteratorAgeMilliseconds = 0: Đã đọc xong toàn bộ Stream
    • IteratorAgeMilliseconds > 0: Chưa được đọc hết toàn bộ Stream

Kinesis Client Library (KCL)

Java library support đọc record từ Data Stream. Mỗi Shard được đọc bởi chỉ 1 KCL.

  • Progress được lưu vào DynamoDB (cần IAM)
  • Track worker và share work sử dụng DynamoDB
  • Thứ tự của record khi đọc giữ theo từng Shard.
  • Version 1 support Shard consumer, version 2 support thêm Enhanced Fan-out consumer

Shard Splitting & Merging

  • Splitting: Chia 1 Shard thành 2 Shard (Nếu chia thành nhiều cần làm nhiều lần)
    • Shard sẽ bị xoá sau khi record hết hạn
    • Data sẽ hết hạn sau 1 khoảng thời gian (tuỳ config)
    • Không có Auto Scaling
  • Gộp 2 Shard thành 1
    • Shard sẽ bị xoá sau khi record hết hạn
    • Không merge được nhiều hơn 2 Shard trong 1 lần

Kinesis Data Stream

Có thể gửi data từ các nguồn khác nhau tới Data Stream, giới hạn message/size phụ thuộc vào số shard được cấu hình (có thể scale), 1000 record/s hoặc 1MB/s với mỗi shard

  • Giữ lại message từ 1-365 ngày
  • Có thể replay (re-process) data
  • Không thể xoá data khỏi Kinesis (immutable)
  • Partition Key giống nhau sẽ cùng đi tới cùng Shard (theo thứ tự)
  • Provisioned mode:
    • Chọn số Shard, có thể scale thủ công hoặc qua API
    • Mỗi Shard có 1 MB/s hoặc 1000 record/s In
    • 2MB/s cho mỗi Shard Out
    • Trả tiền theo số Shard, số giờ chạy
  • On-demand mode:
    • Không cần chọn capacity
    • Mặc định có 4MB/s, 4000 record/s
    • Tự scale dựa theo 30 ngày gần nhất
    • Trả theo số giờ chạy, số GB in/out
  • Sử dụng IAM Policy để authen
  • Sử dụng HTTPS/KMS để encrypt, có thể implement encrypt/decrypt ở phía client side
  • Có thể sử dụng VPC Endpoint
  • Monitor các API qua CloudTrail

Kinesis Data Firehose

Lấy data từ các nguồn khác nhau như Application, SDK, KPL, Agent, AWS IoT, CloudWatch… rồi transformation (nếu cần) rồi ghi data tới destination.

  • Trả phí theo data đi qua Firehose
  • Near Realtime: Đợi 60-900s, khi batch chưa full hoặc setting 1MB-128MB data
  • Support nhiều format, convenrsion, transofmation, compression
  • Support custom data transformation bằng Lambda
  • Có thể send all data hoặc chỉ data send fail tới S3.

Kinesis Data Analytics

For SQL Applicaion: thực hiện SQL từ Source để xử lý data realtime

  • Fully managed
  • Auto Scaling
  • Trả tiền theo lượng data đi qua
  • Output
    • Data Stream
    • Data FireHouse
  • Use case
    • Phân tích theo dòng thời gian (time-series)
    • Realtime dashboard, metric

For Apache Flink: Sử dụng Flink application on a managed cluster on AWS để analyze data, có nhiều option hơn do cần viết code, nhưng source sẽ hạn chế hơn, chỉ có từ Data Stream hoặc Amazon MSK

Machine Learning on Kinesis Data Analytics

  • RANDOM_CUT_FOREST
  • HOTSPOTS

Thứ tự Record trong Kinesis và SQS

Kinesis: Các record trong 1 Shard sẽ được giữ nguyên như thứ tự PUT record, miễn là chỉ định cùng Partition Key cho các lần push. Trường hợp sử dụng khác key sẽ send record tới các Shard khác nhau

SQS Standard: không có thứ tự

SQS FIFO: thứ tự được đảm bảo tuỳ theo chỉ định group ID hay không, có ID thì sẽ order theo từng Group, không chỉ định thì sẽ order theo tất cả message, nhưng chỉ được 1 consumer khi không group, số consumer tăng khi có group id.

SNS vs SQS vs Kinesis

Bài viết này được đăng trong AWS và được gắn thẻ .

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *