Logo Zephyrnet

Nâng cấp kiến ​​trúc dữ liệu của bạn bằng tính năng phát trực tuyến theo thời gian thực bằng Amazon Data Firehose và Snowflake | Dịch vụ web của Amazon

Ngày:

Thế giới có nhịp độ nhanh ngày nay đòi hỏi những hiểu biết và quyết định kịp thời, điều này đang thúc đẩy tầm quan trọng của việc truyền dữ liệu. Dữ liệu truyền trực tuyến đề cập đến dữ liệu được tạo liên tục từ nhiều nguồn khác nhau. Các nguồn dữ liệu này, chẳng hạn như các sự kiện dòng nhấp chuột, thu thập dữ liệu thay đổi (CDC), nhật ký ứng dụng và dịch vụ cũng như các luồng dữ liệu Internet of Things (IoT) đang ngày càng gia tăng. Snowflake cung cấp hai tùy chọn để đưa dữ liệu phát trực tuyến vào nền tảng của nó: Snowpipe và Snowflake Snowpipe Streaming. Snowpipe phù hợp cho các trường hợp sử dụng nhập tệp (theo khối), chẳng hạn như tải các tệp lớn từ Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3) tới Bông tuyết. Snowpipe Streaming, một tính năng mới hơn được phát hành vào tháng 2023 năm XNUMX, phù hợp với các trường hợp sử dụng nhập (phát trực tuyến) hàng, chẳng hạn như tải luồng dữ liệu liên tục từ Luồng dữ liệu Amazon Kinesis or Truyền trực tuyến được quản lý của Amazon cho Apache Kafka (Amazon MSK).

Trước Snowpipe Streaming, khách hàng AWS đã sử dụng Snowpipe cho cả hai trường hợp sử dụng: nhập tệp và nhập tập hợp hàng. Đầu tiên, bạn nhập dữ liệu phát trực tuyến vào Kinesis Data Streams hoặc Amazon MSK, sau đó sử dụng Amazon Data Firehose để tổng hợp và ghi luồng vào Amazon S3, sau đó sử dụng Snowpipe để tải dữ liệu vào Snowflake. Tuy nhiên, quy trình gồm nhiều bước này có thể dẫn đến độ trễ lên đến một giờ trước khi có dữ liệu để phân tích trong Snowflake. Hơn nữa, nó rất tốn kém, đặc biệt khi bạn có các tệp nhỏ mà Snowpipe phải tải lên cụm khách hàng Snowflake.

Để giải quyết vấn đề này, Amazon Data Firehose hiện đã tích hợp với Snowpipe Streaming, cho phép bạn thu thập, chuyển đổi và phân phối các luồng dữ liệu từ Kinesis Data Streams, Amazon MSK và Firehose Direct PUT tới Snowflake trong vài giây với chi phí thấp. Với một vài cú nhấp chuột trên bảng điều khiển Amazon Data Firehose, bạn có thể thiết lập luồng Firehose để phân phối dữ liệu tới Snowflake. Không có cam kết hoặc khoản đầu tư trả trước nào để sử dụng Amazon Data Firehose và bạn chỉ trả tiền cho lượng dữ liệu được truyền phát.

Một số tính năng chính của Amazon Data Firehose bao gồm:

  • Dịch vụ không có máy chủ được quản lý hoàn toàn – Bạn không cần quản lý tài nguyên và Amazon Data Firehose sẽ tự động thay đổi quy mô để phù hợp với thông lượng nguồn dữ liệu của bạn mà không cần quản trị liên tục.
  • Sử dụng đơn giản không cần mã – Bạn không cần phải viết đơn.
  • Cung cấp dữ liệu thời gian thực – Bạn có thể lấy dữ liệu đến đích một cách nhanh chóng và hiệu quả chỉ trong vài giây.
  • Tích hợp với hơn 20 dịch vụ AWS – Khả năng tích hợp liền mạch có sẵn cho nhiều dịch vụ AWS, chẳng hạn như Kinesis Data Streams, Amazon MSK, Amazon VPC Flow Logs, AWS WAF logs, Amazon CloudWatch Logs, Amazon EventBridge, AWS IoT Core, v.v.
  • Mô hình trả tiền khi bạn sử dụng – Bạn chỉ trả tiền cho khối lượng dữ liệu mà Amazon Data Firehose xử lý.
  • Kết nối – Amazon Data Firehose có thể kết nối với mạng con công khai hoặc riêng tư trong VPC của bạn.

Bài đăng này giải thích cách bạn có thể đưa dữ liệu phát trực tuyến từ AWS vào Snowflake trong vòng vài giây để thực hiện phân tích nâng cao. Chúng tôi khám phá các kiến ​​trúc phổ biến và minh họa cách thiết lập giải pháp mã ngắn, không có máy chủ, tiết kiệm chi phí để truyền dữ liệu có độ trễ thấp.

Tổng quan về giải pháp

Sau đây là các bước triển khai giải pháp truyền dữ liệu từ AWS sang Snowflake:

  1. Tạo cơ sở dữ liệu, lược đồ và bảng Snowflake.
  2. Tạo luồng dữ liệu Kinesis.
  3. Tạo luồng phân phối Firehose với Kinesis Data Streams làm nguồn và Snowflake làm đích bằng cách sử dụng liên kết riêng an toàn.
  4. Để kiểm tra thiết lập, hãy tạo dữ liệu luồng mẫu từ Trình tạo dữ liệu Amazon Kinesis (KDG) với luồng phân phối Firehose là đích.
  5. Truy vấn bảng Snowflake để xác thực dữ liệu được tải vào Snowflake.

Giải pháp được mô tả trong sơ đồ kiến ​​trúc sau.

Điều kiện tiên quyết

Bạn nên có các điều kiện tiên quyết sau:

Tạo cơ sở dữ liệu, lược đồ và bảng Snowflake

Hoàn thành các bước sau để thiết lập dữ liệu của bạn trong Snowflake:

  • Đăng nhập vào tài khoản Snowflake của bạn và tạo cơ sở dữ liệu:
    create database adf_snf;

  • Tạo một lược đồ trong cơ sở dữ liệu mới:
    create schema adf_snf.kds_blog;

  • Tạo một bảng trong lược đồ mới:
    create or replace table iot_sensors
    (sensorId number,
    sensorType varchar,
    internetIP varchar,
    connectionTime timestamp_ntz,
    currentTemperature number
    );

Tạo luồng dữ liệu Kinesis

Hoàn tất các bước sau để tạo luồng dữ liệu của bạn:

  • Trên bảng điều khiển Kinesis Data Streams, chọn luồng dữ liệu trong khung điều hướng.
  • Chọn Tạo luồng dữ liệu.
  • Đối với Tên luồng dữ liệu, hãy nhập tên (ví dụ: KDS-Demo-Stream).
  • Để các cài đặt còn lại làm mặc định.
  • Chọn Tạo luồng dữ liệu.

Tạo luồng phân phối Firehose

Hoàn thành các bước sau để tạo luồng phân phối Firehose với Luồng dữ liệu Kinesis làm nguồn và Snowflake làm đích:

  • Trên bảng điều khiển Amazon Data Firehose, chọn Tạo luồng Firehose.
  • Trong nguồn, chọn Luồng dữ liệu Amazon Kinesis.
  • Trong Nơi đến, chọn Snowflake.
  • Trong Luồng dữ liệu Kinesis, duyệt đến luồng dữ liệu bạn đã tạo trước đó.
  • Trong Tên luồng Firehose, để lại tên được tạo mặc định hoặc nhập tên theo sở thích của bạn.
  • Theo Cài đặt kết nối, cung cấp thông tin sau để kết nối Amazon Data Firehose với Snowflake:
    • Trong URL tài khoản bông tuyết, hãy nhập URL tài khoản Bông tuyết của bạn.
    • Trong người sử dang, hãy nhập tên người dùng được tạo trong điều kiện tiên quyết.
    • Trong Khóa riêng, hãy nhập khóa riêng được tạo trong điều kiện tiên quyết. Đảm bảo khóa riêng có định dạng PKCS8. Không bao gồm PEM header-BEGIN tiền tố và footer-END hậu tố như một phần của khóa riêng. Nếu khóa được chia thành nhiều dòng, hãy xóa ngắt dòng.
    • Trong Vai trò, lựa chọn Sử dụng vai trò Bông tuyết tùy chỉnh và nhập vai trò IAM có quyền truy cập để ghi vào bảng cơ sở dữ liệu.

Bạn có thể kết nối với Snowflake bằng kết nối công cộng hoặc riêng tư. Nếu bạn không cung cấp điểm cuối VPC thì chế độ kết nối mặc định sẽ là công khai. Để cho phép liệt kê IP Firehose trong chính sách mạng Snowflake của bạn, hãy tham khảo Chọn bông tuyết cho điểm đến của bạn. Nếu bạn đang sử dụng URL liên kết riêng tư, hãy cung cấp ID VPCE bằng cách sử dụng HỆ THỐNG$GET_PRIVATELINK_CONFIG:

select SYSTEM$GET_PRIVATELINK_CONFIG();

Hàm này trả về bản trình bày JSON của thông tin tài khoản Snowflake cần thiết để hỗ trợ cấu hình tự phục vụ của kết nối riêng tư với dịch vụ Snowflake, như minh họa trong ảnh chụp màn hình sau.

  • Đối với bài đăng này, chúng tôi đang sử dụng một liên kết riêng tư, vì vậy đối với ID VPCE, nhập ID VPCE.
  • Theo Cài đặt cấu hình cơ sở dữ liệu, nhập cơ sở dữ liệu Snowflake, lược đồ và tên bảng của bạn.
  • Trong tạp chí Cài đặt sao lưu phần, cho Xô sao lưu S3, hãy nhập nhóm bạn đã tạo như một phần của điều kiện tiên quyết.
  • Chọn Tạo luồng Firehose.

Ngoài ra, bạn có thể sử dụng Hình thành đám mây AWS mẫu để tạo luồng phân phối Firehose với Snowflake là đích thay vì sử dụng bảng điều khiển Amazon Data Firehose.

Để sử dụng ngăn xếp CloudFormation, hãy chọn

BDB-4100-CFN-Launch-Stack

Tạo dữ liệu luồng mẫu
Tạo dữ liệu luồng mẫu từ KDG bằng luồng dữ liệu Kinesis mà bạn đã tạo:

{ 
"sensorId": {{random.number(999999999)}}, 
"sensorType": "{{random.arrayElement( ["Thermostat","SmartWaterHeater","HVACTemperatureSensor","WaterPurifier"] )}}", 
"internetIP": "{{internet.ip}}", 
"connectionTime": "{{date.now("YYYY-MM-DDTHH:m:ss")}}", 
"currentTemperature": {{random.number({"min":10,"max":150})}} 
}

Truy vấn bảng Snowflake

Truy vấn bảng Snowflake:

select * from adf_snf.kds_blog.iot_sensors;

Bạn có thể xác nhận rằng dữ liệu do KDG tạo ra và gửi tới Kinesis Data Streams đã được tải vào bảng Snowflake thông qua Amazon Data Firehose.

Xử lý sự cố

Nếu dữ liệu không được tải vào Kinesis Data Steams sau khi KDG gửi dữ liệu đến luồng phân phối Firehose, hãy làm mới và đảm bảo bạn đã đăng nhập vào KDG.

Nếu bạn thực hiện bất kỳ thay đổi nào đối với định nghĩa bảng đích Snowflake, hãy tạo lại luồng phân phối Firehose.

Làm sạch

Để tránh phát sinh phí trong tương lai, hãy xóa tài nguyên bạn đã tạo như một phần của bài tập này nếu bạn không định sử dụng chúng thêm.

Kết luận

Amazon Data Firehose cung cấp một cách đơn giản để phân phối dữ liệu đến Snowpipe Streaming, cho phép bạn tiết kiệm chi phí và giảm độ trễ xuống còn vài giây. Để dùng thử Amazon Kinesis Firehose với Snowflake, hãy tham khảo Amazon Data Firehose với Snowflake làm phòng thí nghiệm đích.


Về các tác giả

Swapna Bandla là Kiến trúc sư giải pháp cấp cao trong Nhóm SA Chuyên gia phân tích AWS. Swapna có niềm đam mê tìm hiểu nhu cầu phân tích và dữ liệu của khách hàng, đồng thời trao quyền cho họ phát triển các giải pháp có kiến ​​trúc tốt dựa trên đám mây. Ngoài công việc, cô thích dành thời gian cho gia đình.

Dinh Thự Mostafa là Giám đốc sản phẩm chính – Công nghệ tại Amazon Web Services, nơi ông làm việc trên Amazon Kinesis Data Firehose. Ông chuyên phát triển trải nghiệm sản phẩm trực quan để giải quyết những thách thức phức tạp cho khách hàng trên quy mô lớn. Khi anh ấy không làm việc chăm chỉ trên Amazon Kinesis Data Firehose, bạn có thể sẽ tìm thấy Mostafa trên sân bóng quần, nơi anh ấy thích đối đầu với những người thách đấu và hoàn thiện những cú ném của mình.

Bosco Albuquerque là Kiến trúc sư Giải pháp Đối tác Cấp cao tại AWS và có hơn 20 năm kinh nghiệm làm việc với cơ sở dữ liệu và các sản phẩm phân tích từ các nhà cung cấp cơ sở dữ liệu doanh nghiệp và nhà cung cấp đám mây. Ông đã giúp các công ty công nghệ thiết kế và triển khai các giải pháp và sản phẩm phân tích dữ liệu.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img