Logo Zephyrnet

Cách thực hành tốt nhất để triển khai phân tích gần thời gian thực bằng cách sử dụng Amazon Redshift Streaming Ingestion với Amazon MSK | Dịch vụ web của Amazon

Ngày:

Amazon RedShift là kho dữ liệu đám mây có thể mở rộng, được quản lý hoàn toàn, giúp tăng tốc thời gian của bạn để thu thập thông tin chi tiết bằng các phân tích nhanh chóng, đơn giản và an toàn trên quy mô lớn. Hàng chục nghìn khách hàng dựa vào Amazon Redshift để phân tích hàng exabyte dữ liệu và chạy các truy vấn phân tích phức tạp, khiến Amazon Redshift trở thành kho dữ liệu đám mây được sử dụng rộng rãi nhất. Bạn có thể chạy và mở rộng quy mô phân tích trong vài giây trên tất cả dữ liệu của mình mà không cần phải quản lý cơ sở hạ tầng kho dữ liệu của mình.

Bạn có thể sử dụng Nhập dữ liệu truyền trực tuyến Amazon Redshift khả năng cập nhật cơ sở dữ liệu phân tích của bạn trong thời gian gần như thực. Quá trình nhập vào luồng dữ liệu của Amazon Redshift đơn giản hóa đường dẫn dữ liệu bằng cách cho phép bạn tạo các chế độ xem cụ thể hóa ngay trên đầu luồng dữ liệu. Với khả năng này trong Amazon Redshift, bạn có thể sử dụng Ngôn ngữ truy vấn có cấu trúc (SQL) để kết nối và nhập trực tiếp dữ liệu từ các luồng dữ liệu, chẳng hạn như 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) luồng dữ liệu và kéo dữ liệu trực tiếp tới Amazon Redshift.

Trong bài đăng này, chúng tôi thảo luận về các phương pháp hay nhất để triển khai phân tích gần thời gian thực bằng cách sử dụng tính năng nhập phát trực tuyến của Amazon Redshift với Amazon MSK.

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

Chúng tôi đi qua một quy trình mẫu để nhập dữ liệu từ chủ đề MSK vào Amazon Redshift bằng cách nhập dữ liệu phát trực tuyến của Amazon Redshift. Chúng tôi cũng trình bày cách tách dữ liệu JSON bằng ký hiệu dấu chấm trong Amazon Redshift. Sơ đồ sau minh họa kiến ​​trúc giải pháp của chúng tôi.

Luồng quy trình bao gồm các bước sau:

  1. Tạo chế độ xem cụ thể hóa phát trực tuyến trong cụm Redshift của bạn để sử dụng dữ liệu phát trực tiếp từ các chủ đề MSK.
  2. Sử dụng quy trình được lưu trữ để triển khai thu thập dữ liệu thay đổi (CDC) bằng cách sử dụng kết hợp duy nhất giữa Phân vùng Kafka và Offset Kafka ở cấp bản ghi cho chủ đề MSK đã nhập.
  3. Tạo bảng hướng tới người dùng trong cụm Redshift và sử dụng ký hiệu dấu chấm để tách tài liệu JSON khỏi chế độ xem cụ thể hóa truyền trực tuyến thành các cột dữ liệu của bảng. Bạn có thể liên tục tải dữ liệu mới bằng cách gọi thủ tục được lưu trữ đều đặn.
  4. Thiết lập kết nối giữa một Amazon QuickSight bảng thông tin và Amazon Redshift để cung cấp hình ảnh trực quan và thông tin chi tiết.

Là một phần của bài đăng này, chúng tôi cũng thảo luận về các chủ đề sau:

  • Các bước để đặt cấu hình truyền tải nhiều tài khoản từ Amazon MSK sang Amazon Redshift
  • Các phương pháp hay nhất để đạt được hiệu suất tối ưu từ việc phát trực tuyến lượt xem cụ thể hóa
  • Kỹ thuật giám sát để theo dõi lỗi trong quá trình nhập luồng Amazon Redshift

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

Bạn phải có những thứ sau:

  • Tài khoản AWS.
  • Một trong những tài nguyên sau, tùy thuộc vào trường hợp sử dụng của bạn:
  • Một cụm MSK. Để biết hướng dẫn, hãy tham khảo Tạo cụm Amazon MSK.
  • một chủ đề trong cụm MSK nơi nhà sản xuất dữ liệu của bạn có thể xuất bản dữ liệu.
  • Nhà sản xuất dữ liệu để ghi dữ liệu vào chủ đề trong cụm MSK của bạn.

Những cân nhắc khi thiết lập chủ đề MSK của bạn

Hãy ghi nhớ những cân nhắc sau khi định cấu hình chủ đề MSK của bạn:

  • Đảm bảo rằng tên chủ đề MSK của bạn không dài quá 128 ký tự.
  • Tại thời điểm viết bài này, không thể truy vấn trực tiếp các bản ghi MSK chứa dữ liệu nén trong Amazon Redshift. Amazon Redshift không hỗ trợ bất kỳ phương pháp giải nén gốc nào cho dữ liệu nén phía máy khách trong chủ đề MSK.
  • Theo thực hành tốt nhất trong khi thiết lập cụm MSK của bạn.
  • Xem lại quá trình truyền trực tuyến hạn chế cho bất kỳ cân nhắc nào khác.

Thiết lập nhập trực tuyến

Để thiết lập tính năng nhập trực tuyến, hãy hoàn thành các bước sau:

  1. Thiết lập Quản lý truy cập và nhận dạng AWS (IAM) cần có chính sách tin cậy và vai trò để truyền trực tuyến. Để biết hướng dẫn, hãy tham khảo Thiết lập IAM và thực hiện quá trình nhập trực tuyến từ Kafka.
  2. Đảm bảo rằng dữ liệu đang chảy vào chủ đề MSK của bạn bằng cách sử dụng amazoncloudwatch số liệu (ví dụ, ByteOutPerSec).
  3. Khởi chạy trình soạn thảo truy vấn v2 từ bảng điều khiển Amazon Redshift hoặc sử dụng máy khách SQL ưa thích của bạn để kết nối với cụm Redshift cho các bước tiếp theo. Các bước sau đây được chạy trong trình soạn thảo truy vấn v2.
  4. Tạo một lược đồ bên ngoài để ánh xạ tới cụm MSK. Thay thế ARN vai trò IAM của bạn và ARN cụm MSK trong câu lệnh sau:
    CREATE EXTERNAL SCHEMA custschema
    FROM MSK
    IAM_ROLE  'iam-role-arn' 
    AUTHENTICATION { none | iam }
    CLUSTER_ARN 'msk-cluster-arn';
    

  5. Theo tùy chọn, nếu tên chủ đề của bạn phân biệt chữ hoa chữ thường, bạn cần bật enable_case_sensitive_identifier để có thể truy cập chúng trong Amazon Redshift. Để sử dụng mã định danh phân biệt chữ hoa chữ thường, hãy đặt enable_case_sensitive_identifier thành true ở cấp độ phiên, người dùng hoặc cụm:
    SET ENABLE_CASE_SENSITIVE_IDENTIFIER TO TRUE;

  6. Tạo chế độ xem cụ thể hóa để sử dụng dữ liệu luồng từ chủ đề MSK:
    CREATE MATERIALIZED VIEW Orders_Stream_MV AS
    SELECT kafka_partition, 
     kafka_offset, 
     refresh_time,
     JSON_PARSE(kafka_value) as Data
    FROM custschema."ORDERTOPIC"
    WHERE CAN_JSON_PARSE(kafka_value);
    

Cột siêu dữ liệu kafka_value đến từ Amazon MSK được lưu trữ trong VARBYTE định dạng trong Amazon Redshift. Đối với bài đăng này, bạn sử dụng JSON_PARSE chức năng chuyển đổi kafka_value đến một kiểu dữ liệu SUPER. Bạn cũng sử dụng CAN_JSON_PARSE trong điều kiện bộ lọc để bỏ qua các bản ghi JSON không hợp lệ và bảo vệ khỏi lỗi do lỗi phân tích cú pháp JSON. Chúng tôi thảo luận về cách lưu trữ dữ liệu không hợp lệ để gỡ lỗi trong tương lai trong bài đăng này.

  1. Làm mới chế độ xem cụ thể hóa phát trực tuyến, kích hoạt Amazon Redshift đọc từ chủ đề MSK và tải dữ liệu vào chế độ xem cụ thể hóa:
    REFRESH MATERIALIZED VIEW Orders_Stream_MV;

Bạn cũng có thể đặt chế độ xem cụ thể hóa phát trực tuyến của mình để sử dụng khả năng làm mới tự động. Điều này sẽ tự động làm mới chế độ xem cụ thể hóa của bạn khi dữ liệu đến luồng. Nhìn thấy TẠO CHẾ ĐỘ XEM VẬT CHẤT để biết hướng dẫn tạo chế độ xem cụ thể hóa với tính năng tự động làm mới.

Bỏ lồng tài liệu JSON

Sau đây là mẫu tài liệu JSON được nhập từ chủ đề MSK vào cột Dữ liệu thuộc loại SUPER trong chế độ xem cụ thể hóa phát trực tuyến Orders_Stream_MV:

{
   "EventType":"Orders",
   "OrderID":"103",
   "CustomerID":"C104",
   "CustomerName":"David Smith",
   "OrderDate":"2023-09-02",
   "Store_Name":"Store-103",
   "ProductID":"P004",
   "ProductName":"Widget-X-003",
   "Quatity":"5",
   "Price":"2500",
   "OrderStatus":"Initiated"
}

Sử dụng ký hiệu dấu chấm như trong đoạn mã sau để hủy tải trọng JSON của bạn:

SELECT 
    data."OrderID"::INT4 as OrderID
    ,data."ProductID"::VARCHAR(36) as ProductID
    ,data."ProductName"::VARCHAR(36) as ProductName
    ,data."CustomerID"::VARCHAR(36) as CustomerID
    ,data."CustomerName"::VARCHAR(36) as CustomerName
    ,data."Store_Name"::VARCHAR(36) as Store_Name
    ,data."OrderDate"::TIMESTAMPTZ as OrderDate
    ,data."Quatity"::INT4 as Quatity
    ,data."Price"::DOUBLE PRECISION as Price
    ,data."OrderStatus"::VARCHAR(36) as OrderStatus
    ,"kafka_partition"::BIGINT  
    ,"kafka_offset"::BIGINT
FROM orders_stream_mv;

Ảnh chụp màn hình sau đây cho thấy kết quả trông như thế nào sau khi bỏ lồng.

Nếu bạn có mảng trong tài liệu JSON, hãy cân nhắc việc hủy lồng dữ liệu của mình bằng cách sử dụng PartiQL các câu lệnh trong Amazon Redshift. Để biết thêm thông tin, hãy tham khảo phần Bỏ lồng tài liệu JSON trong bài Phân tích gần như thời gian thực bằng cách sử dụng tính năng truyền phát trực tiếp của Amazon Redshift với Amazon Kinesis Data Streams và Amazon DynamoDB.

Chiến lược tải dữ liệu gia tăng

Hoàn thành các bước sau để triển khai tải dữ liệu gia tăng:

  1. Tạo một bảng có tên Đơn hàng trong Amazon Redshift mà người dùng cuối sẽ sử dụng để trực quan hóa và phân tích hoạt động kinh doanh:
    CREATE TABLE public.Orders (
        orderid integer ENCODE az64,
        productid character varying(36) ENCODE lzo,
        productname character varying(36) ENCODE lzo,
        customerid character varying(36) ENCODE lzo,
        customername character varying(36) ENCODE lzo,
        store_name character varying(36) ENCODE lzo,
        orderdate timestamp with time zone ENCODE az64,
        quatity integer ENCODE az64,
        price double precision ENCODE raw,
        orderstatus character varying(36) ENCODE lzo
    ) DISTSTYLE AUTO;
    

Tiếp theo, bạn tạo một thủ tục lưu sẵn có tên SP_Orders_Load để triển khai CDC từ chế độ xem cụ thể hóa phát trực tuyến và tải vào bản cuối cùng Orders bàn. Bạn sử dụng kết hợp Kafka_PartitionKafka_Offset có sẵn trong chế độ xem cụ thể hóa phát trực tuyến dưới dạng cột hệ thống để triển khai CDC. Sự kết hợp của hai cột này sẽ luôn là duy nhất trong một chủ đề MSK, đảm bảo rằng không có bản ghi nào bị bỏ sót trong quá trình này. Thủ tục lưu trữ chứa các thành phần sau:

  • Để sử dụng mã định danh phân biệt chữ hoa chữ thường, hãy đặt enable_case_sensitive_identifier thành true ở cấp độ phiên, người dùng hoặc cụm.
  • Làm mới chế độ xem cụ thể hóa phát trực tuyến theo cách thủ công nếu tính năng tự động làm mới không được bật.
  • Tạo một bảng kiểm tra được gọi là Orders_Streaming_Audit nếu nó không tồn tại để theo dõi giá trị chênh lệch cuối cùng cho phân vùng đã được tải vào bảng Đơn hàng trong lần chạy cuối cùng của quy trình được lưu trữ.
  • Unnest và chỉ chèn dữ liệu mới hoặc đã thay đổi vào bảng phân tầng có tên Orders_Staging_Table, đọc từ chế độ xem được cụ thể hóa trực tuyến Orders_Stream_MV, Nơi Kafka_Offset lớn hơn lần xử lý cuối cùng Kafka_Offset ghi vào bảng kiểm toán Orders_Streaming_Audit cho Kafka_Partition đang được xử lý.
  • Khi tải lần đầu tiên bằng quy trình được lưu trữ này, sẽ không có dữ liệu trong Orders_Streaming_Audit bảng và tất cả dữ liệu từ Orders_Stream_MV sẽ được tải vào bảng Đơn hàng.
  • Chỉ chèn các cột có liên quan đến doanh nghiệp vào giao diện người dùng Orders bảng, chọn từ bảng phân tầng Orders_Staging_Table.
  • Chèn tối đa Kafka_Offset cho mỗi lần tải Kafka_Partition vào bảng kiểm toán Orders_Streaming_Audit

Chúng tôi đã thêm bảng phân tầng trung gian Orders_Staging_Table trong giải pháp này để giúp gỡ lỗi trong trường hợp xảy ra lỗi không mong muốn và có thể theo dõi. Bỏ qua bước dàn dựng và tải trực tiếp vào bảng cuối cùng từ Orders_Stream_MV có thể cung cấp độ trễ thấp hơn tùy thuộc vào trường hợp sử dụng của bạn.

  1. Tạo thủ tục lưu sẵn với đoạn mã sau:
    CREATE OR REPLACE PROCEDURE SP_Orders_Load()
        AS $$
        BEGIN
    
        SET ENABLE_CASE_SENSITIVE_IDENTIFIER TO TRUE;
        REFRESH MATERIALIZED VIEW Orders_Stream_MV;
    
        --create an audit table if not exists to keep track of Max Offset per Partition that was loaded into Orders table  
    
        CREATE TABLE IF NOT EXISTS Orders_Streaming_Audit
        (
        "kafka_partition" BIGINT,
        "kafka_offset" BIGINT
        )
        SORTKEY("kafka_partition", "kafka_offset"); 
    
        DROP TABLE IF EXISTS Orders_Staging_Table;  
    
        --Insert only newly available data into staging table from streaming View based on the max offset for new/existing partitions
      --When loading for 1st time i.e. there is no data in Orders_Streaming_Audit table then all the data gets loaded from streaming View  
        CREATE TABLE Orders_Staging_Table as 
        SELECT 
        data."OrderID"."N"::INT4 as OrderID
        ,data."ProductID"."S"::VARCHAR(36) as ProductID
        ,data."ProductName"."S"::VARCHAR(36) as ProductName
        ,data."CustomerID"."S"::VARCHAR(36) as CustomerID
        ,data."CustomerName"."S"::VARCHAR(36) as CustomerName
        ,data."Store_Name"."S"::VARCHAR(36) as Store_Name
        ,data."OrderDate"."S"::TIMESTAMPTZ as OrderDate
        ,data."Quatity"."N"::INT4 as Quatity
        ,data."Price"."N"::DOUBLE PRECISION as Price
        ,data."OrderStatus"."S"::VARCHAR(36) as OrderStatus
        , s."kafka_partition"::BIGINT , s."kafka_offset"::BIGINT
        FROM Orders_Stream_MV s
        LEFT JOIN (
        SELECT
        "kafka_partition",
        MAX("kafka_offset") AS "kafka_offset"
        FROM Orders_Streaming_Audit
        GROUP BY "kafka_partition"
        ) AS m
        ON nvl(s."kafka_partition",0) = nvl(m."kafka_partition",0)
        WHERE
        m."kafka_offset" IS NULL OR
        s."kafka_offset" > m."kafka_offset";
    
        --Insert only business relevant column to final table selecting from staging table
        Insert into Orders 
        SELECT 
        OrderID
        ,ProductID
        ,ProductName
        ,CustomerID
        ,CustomerName
        ,Store_Name
        ,OrderDate
        ,Quatity
        ,Price
        ,OrderStatus
        FROM Orders_Staging_Table;
    
        --Insert the max kafka_offset for every loaded Kafka partitions into Audit table 
        INSERT INTO Orders_Streaming_Audit
        SELECT kafka_partition, MAX(kafka_offset)
        FROM Orders_Staging_Table
        GROUP BY kafka_partition;   
    
        END;
        $$ LANGUAGE plpgsql;
    

  2. Chạy thủ tục được lưu trữ để tải dữ liệu vào Orders bàn:
    call SP_Orders_Load();

  3. Xác thực dữ liệu trong bảng Đơn hàng.

Thiết lập quá trình nhập dữ liệu trực tuyến trên nhiều tài khoản

Nếu cụm MSK của bạn thuộc về một tài khoản khác, hãy hoàn thành các bước sau để tạo vai trò IAM nhằm thiết lập quá trình nhập truyền trực tuyến trên nhiều tài khoản. Giả sử cụm Redshift nằm trong tài khoản A và cụm MSK nằm trong tài khoản B, như minh họa trong sơ đồ sau.

Hoàn thành các bước sau:

  1. Trong tài khoản B, tạo vai trò IAM có tên MyRedshiftMSKRole cho phép Amazon Redshift (tài khoản A) liên lạc với cụm MSK (tài khoản B) có tên MyTestCluster. Tùy thuộc vào việc cụm MSK của bạn sử dụng xác thực IAM hay quyền truy cập không được xác thực để kết nối, bạn cần tạo vai trò IAM bằng một trong các chính sách sau:
    • một IAM policAmazonAmazon MSK sử dụng quyền truy cập không được xác thực:
      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Sid": "RedshiftMSKPolicy",
                  "Effect": "Allow",
                  "Action": [
                      "kafka:GetBootstrapBrokers"
                  ],
                  "Resource": "*"
              }
          ]
      }

    • Chính sách IAM dành cho Amazon MSK khi sử dụng xác thực IAM:
      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Sid": "RedshiftMSKIAMpolicy",
                  "Effect": "Allow",
                  "Action": [
                      "kafka-cluster:ReadData",
                      "kafka-cluster:DescribeTopic",
                      "kafka-cluster:Connect"
                  ],
                  "Resource": [
                      "arn:aws:kafka:us-east-1:0123456789:cluster/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1",
                      "arn:aws:kafka:us-east-1:0123456789:topic/MyTestCluster/*"
                  ]
              },
              {
                  "Sid": "RedshiftMSKPolicy",
                  "Effect": "Allow",
                  "Action": [
                      "kafka:GetBootstrapBrokers"
                  ],
                  "Resource": "*"
              }
          ]
      }
      

Phần tài nguyên trong ví dụ trước cho phép truy cập vào tất cả các chủ đề trong MyTestCluster cụm MSK. Nếu cần hạn chế vai trò IAM đối với các chủ đề cụ thể, bạn cần thay thế tài nguyên chủ đề bằng chính sách tài nguyên hạn chế hơn.

  1. Sau khi bạn tạo vai trò IAM trong tài khoản B, hãy lưu ý đến ARN vai trò IAM (ví dụ: arn:aws:iam::0123456789:role/MyRedshiftMSKRole).
  2. Trong tài khoản A, hãy tạo vai trò IAM có thể tùy chỉnh Redshift được gọi là MyRedshiftRole, điều mà Amazon Redshift sẽ đảm nhận khi kết nối với Amazon MSK. Vai trò này phải có chính sách như sau, cho phép Vai trò IAM của Amazon Redshift trong tài khoản A đảm nhận vai trò Amazon MSK trong tài khoản B:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "RedshiftMSKAssumePolicy",
                "Effect": "Allow",
                "Action": "sts:AssumeRole",
                "Resource": "arn:aws:iam::0123456789:role/MyRedshiftMSKRole"        
           }
        ]
    }
    

  3. Hãy lưu ý đến vai trò ARN cho vai trò IAM của Amazon Redshift (ví dụ: arn:aws:iam::9876543210:role/MyRedshiftRole).
  4. Quay lại tài khoản B và thêm vai trò này vào chính sách tin cậy của vai trò IAM arn:aws:iam::0123456789:role/MyRedshiftMSKRole để cho phép tài khoản B tin cậy vai trò IAM từ tài khoản A. Chính sách tin cậy sẽ giống như mã sau:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "sts:AssumeRole",
          "Principal": {
            "AWS": "arn:aws:iam::9876543210:role/MyRedshiftRole"
          }
        }
      ]
    } 
    

  5. Đăng nhập vào bảng điều khiển Amazon Redshift bằng tài khoản A.
  6. Khởi chạy trình soạn thảo truy vấn v2 hoặc máy khách SQL ưa thích của bạn và chạy các câu lệnh sau để truy cập chủ đề MSK trong tài khoản B. Để ánh xạ tới cụm MSK, hãy tạo một lược đồ bên ngoài bằng cách sử dụng chuỗi vai trò bằng cách chỉ định các ARN vai trò IAM, được phân tách bằng dấu phẩy và không có khoảng trắng xung quanh. Vai trò gắn liền với cụm Redshift đứng đầu trong chuỗi.
    CREATE EXTERNAL SCHEMA custschema
    FROM MSK
    IAM_ROLE  
    'arn:aws:iam::9876543210:role/MyRedshiftRole,arn:aws:iam::0123456789:role/MyRedshiftMSKRole' 
    AUTHENTICATION { none | iam }
    CLUSTER_ARN 'msk-cluster-arn'; --replace with ARN of MSK cluster 
    

Cân nhắc về hiệu suất

Hãy ghi nhớ những cân nhắc về hiệu suất sau:

  • Giữ cho chế độ xem cụ thể hóa phát trực tuyến đơn giản và di chuyển các phép biến đổi như bỏ lồng, tổng hợp và biểu thức chữ hoa chữ thường sang bước sau—ví dụ: bằng cách tạo một chế độ xem cụ thể hóa khác ở trên cùng của chế độ xem cụ thể hóa phát trực tuyến.
  • Hãy cân nhắc việc chỉ tạo một chế độ xem cụ thể hóa phát trực tuyến trong một cụm hoặc nhóm làm việc Redshift duy nhất cho một chủ đề MSK nhất định. Việc tạo nhiều chế độ xem cụ thể hóa cho mỗi chủ đề MSK có thể làm chậm hiệu suất nhập vì mỗi chế độ xem cụ thể hóa sẽ trở thành người dùng cho chủ đề đó và chia sẻ băng thông Amazon MSK cho chủ đề đó. Dữ liệu phát trực tiếp trong chế độ xem cụ thể hóa phát trực tuyến có thể được chia sẻ trên nhiều cụm Redshift hoặc nhóm làm việc Redshift Serverless bằng cách sử dụng chia sẻ dữ liệu.
  • Trong khi xác định chế độ xem cụ thể hóa phát trực tuyến của bạn, hãy tránh sử dụng Json_Extract_Path_Text để cắt nhỏ dữ liệu trước, bởi vì Json_extract_path_text hoạt động trên từng hàng dữ liệu, điều này ảnh hưởng đáng kể đến thông lượng nhập. Tốt hơn là nên lấy dữ liệu nguyên gốc từ luồng và sau đó chia nhỏ dữ liệu đó.
  • Nếu có thể, hãy cân nhắc bỏ qua phím sắp xếp trong chế độ xem cụ thể hóa phát trực tuyến để tăng tốc độ nhập. Khi chế độ xem cụ thể hóa phát trực tuyến có khóa sắp xếp, thao tác sắp xếp sẽ diễn ra với mỗi lô dữ liệu được nhập từ luồng. Việc sắp xếp có hiệu suất vượt trội tùy thuộc vào loại dữ liệu khóa sắp xếp, số lượng cột khóa sắp xếp và lượng dữ liệu được nhập vào mỗi lô. Bước sắp xếp này có thể làm tăng độ trễ trước khi có sẵn dữ liệu phát trực tuyến để truy vấn. Bạn nên cân nhắc điều nào quan trọng hơn: độ trễ khi nhập hoặc độ trễ khi truy vấn dữ liệu.
  • Để tối ưu hóa hiệu suất của chế độ xem cụ thể hóa phát trực tuyến và để giảm mức sử dụng bộ nhớ, thỉnh thoảng hãy xóa dữ liệu khỏi chế độ xem cụ thể hóa bằng cách sử dụng xóa, cắt bớt, hoặc là thay đổi bảng nối thêm.
  • Nếu bạn cần nhập song song nhiều chủ đề MSK vào Amazon Redshift, hãy bắt đầu với số lượt xem cụ thể hóa phát trực tuyến nhỏ hơn và tiếp tục thêm nhiều lượt xem cụ thể hóa hơn để đánh giá hiệu suất nhập tổng thể trong một cụm hoặc nhóm làm việc.
  • Việc tăng số lượng nút trong cụm được cung cấp Redshift hoặc RPU cơ sở của nhóm làm việc Redshift Serverless có thể giúp tăng hiệu suất nhập của chế độ xem cụ thể hóa phát trực tuyến. Để có hiệu suất tối ưu, bạn nên đặt mục tiêu có nhiều lát trong cụm được cung cấp Redshift bằng số phân vùng trong chủ đề MSK của bạn hoặc 8 RPU cho mỗi bốn phân vùng trong chủ đề MSK của bạn.

Kỹ thuật giám sát

Các bản ghi trong chủ đề vượt quá kích thước của cột chế độ xem cụ thể hóa mục tiêu tại thời điểm nhập sẽ bị bỏ qua. Các bản ghi bị bỏ qua khi làm mới chế độ xem cụ thể hóa sẽ được ghi vào SYS_STREAM_SCAN_ERRORS bảng hệ thống.

Lỗi xảy ra khi xử lý bản ghi do tính toán hoặc chuyển đổi loại dữ liệu hoặc một số logic khác trong định nghĩa chế độ xem cụ thể hóa sẽ dẫn đến lỗi làm mới chế độ xem cụ thể hóa cho đến khi bản ghi vi phạm hết hạn khỏi chủ đề. Để tránh những loại vấn đề này, hãy kiểm tra tính logic của định nghĩa chế độ xem cụ thể hóa của bạn một cách cẩn thận; nếu không, hãy đưa bản ghi vào cột VARBYTE mặc định và xử lý chúng sau.

Sau đây là các chế độ xem giám sát có sẵn:

  • SYS_MV_REFRESH_HISTORY – Sử dụng chế độ xem này để thu thập thông tin về lịch sử làm mới của các chế độ xem được cụ thể hóa khi phát trực tuyến của bạn. Kết quả bao gồm loại làm mới, chẳng hạn như thủ công hoặc tự động và trạng thái làm mới gần đây nhất. Truy vấn sau đây hiển thị lịch sử làm mới cho chế độ xem cụ thể hóa phát trực tuyến:
    select mv_name, refresh_type, status, duration  from SYS_MV_REFRESH_HISTORY where mv_name='mv_store_sales'

  • SYS_STREAM_SCAN_ERRORS – Sử dụng chế độ xem này để kiểm tra lý do tại sao bản ghi không tải được thông qua quá trình nhập trực tuyến từ chủ đề MSK. Khi viết bài đăng này, khi nhập từ Amazon MSK, chế độ xem này chỉ ghi lại lỗi khi bản ghi lớn hơn kích thước cột của chế độ xem cụ thể hóa. Chế độ xem này cũng sẽ hiển thị mã định danh duy nhất (độ lệch) của bản ghi MSK trong cột vị trí. Truy vấn sau đây hiển thị mã lỗi và lý do lỗi khi bản ghi vượt quá giới hạn kích thước tối đa:
    select mv_name, external_schema_name, stream_name, record_time, query_id, partition_id, "position", error_code, error_reason
    from SYS_STREAM_SCAN_ERRORS  where mv_name='test_mv' and external_schema_name ='streaming_schema'	;
    

  • SYS_STREAM_SCAN_STATES – Sử dụng chế độ xem này để theo dõi số lượng bản ghi được quét tại một record_time nhất định. Chế độ xem này cũng theo dõi độ lệch của bản ghi cuối cùng được đọc trong lô. Truy vấn sau đây hiển thị dữ liệu chủ đề cho một chế độ xem cụ thể:
    select mv_name,external_schema_name,stream_name,sum(scanned_rows) total_records,
    sum(scanned_bytes) total_bytes 
    from SYS_STREAM_SCAN_STATES where mv_name='test_mv' and external_schema_name ='streaming_schema' group by 1,2,3;
    

  • SYS_QUERY_HISTORY – Sử dụng chế độ xem này để kiểm tra số liệu tổng thể để làm mới chế độ xem cụ thể hóa phát trực tuyến. Điều này cũng sẽ ghi lại các lỗi trong cột error_message đối với các lỗi không hiển thị trong SYS_STREAM_SCAN_ERRORS. Truy vấn sau đây hiển thị lỗi gây ra lỗi làm mới của chế độ xem cụ thể hóa phát trực tuyến:
    select  query_id, query_type, status, query_text, error_message from sys_query_history where status='failed' and start_time>='2024-02-03 03:18:00' order by start_time desc

Những cân nhắc bổ sung cho việc thực hiện

Bạn có thể tùy ý tạo chế độ xem cụ thể hóa bên trên chế độ xem cụ thể hóa phát trực tuyến, cho phép bạn tách và tính toán trước kết quả cho người dùng cuối. Cách tiếp cận này loại bỏ nhu cầu lưu trữ kết quả trong bảng cuối cùng bằng cách sử dụng quy trình được lưu trữ.

Trong bài đăng này, bạn sử dụng Hàm CAN_JSON_PARSE để bảo vệ khỏi mọi lỗi nhằm nhập dữ liệu thành công hơn—trong trường hợp này, các bản ghi phát trực tuyến không thể phân tích cú pháp sẽ bị Amazon Redshift bỏ qua. Tuy nhiên, nếu bạn muốn theo dõi các bản ghi lỗi của mình, hãy cân nhắc việc lưu trữ chúng trong một cột bằng cách sử dụng SQL sau khi tạo chế độ xem cụ thể hóa phát trực tuyến:

CREATE MATERIALIZED VIEW Orders_Stream_MV AS 
SELECT
kafka_partition, 
kafka_offset, 
refresh_time, 
JSON_PARSE(kafka_value) as Data 
case when CAN_JSON_PARSE(kafka_value) = true then json_parse(kafka_value) end Data,
case when CAN_JSON_PARSE(kafka_value) = false then kafka_value end Invalid_Data
FROM custschema."ORDERTOPIC";

Bạn cũng có thể xem xét dỡ dữ liệu từ góc nhìn SYS_STREAM_SCAN_ERRORS vào một Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3) và nhận thông báo bằng gửi báo cáo qua email sử dụng Dịch vụ thông báo đơn giản của Amazon (Amazon SNS) thông báo bất cứ khi nào đối tượng S3 mới được tạo.

Cuối cùng, dựa trên yêu cầu làm mới dữ liệu của bạn, bạn có thể sử dụng Sự kiện Amazon để lên lịch các công việc trong kho dữ liệu của bạn để gọi các công việc nói trên SP_Orders_Load thủ tục lưu trữ một cách thường xuyên. EventBridge thực hiện việc này theo những khoảng thời gian cố định và bạn có thể cần phải có một cơ chế (ví dụ: một Chức năng bước AWS state machine) để theo dõi xem lệnh gọi thủ tục trước đó có hoàn thành hay không. Để biết thêm thông tin, hãy tham khảo Tạo quy tắc Amazon EventBridge chạy theo lịch biểu. Bạn cũng có thể tham khảo Tăng tốc điều phối quy trình ELT bằng cách sử dụng AWS Step Functions và Amazon Redshift Data API. Một tùy chọn khác là sử dụng Trình chỉnh sửa truy vấn Amazon Redshift v2 để lên lịch làm mới. Để biết chi tiết, hãy tham khảo Lập lịch truy vấn với trình soạn thảo truy vấn v2.

Kết luận

Trong bài đăng này, chúng tôi đã thảo luận về các phương pháp hay nhất để triển khai phân tích gần thời gian thực bằng cách sử dụng tính năng nhập phát trực tuyến của Amazon Redshift với Amazon MSK. Chúng tôi đã giới thiệu cho bạn một quy trình mẫu để nhập dữ liệu từ chủ đề MSK vào Amazon Redshift bằng cách nhập trực tuyến. Chúng tôi cũng đã trình bày một chiến lược đáng tin cậy để thực hiện tải dữ liệu truyền phát gia tăng vào Amazon Redshift bằng cách sử dụng Phân vùng Kafka và Kafka Offset. Ngoài ra, chúng tôi đã trình bày các bước đặt cấu hình truyền tải qua nhiều tài khoản từ Amazon MSK sang Amazon Redshift và thảo luận về các cân nhắc về hiệu suất để tối ưu hóa tốc độ truyền dẫn. Cuối cùng, chúng tôi đã thảo luận về các kỹ thuật giám sát để theo dõi lỗi trong quá trình nhập luồng Amazon Redshift.

Nếu bạn có bất kỳ câu hỏi nào, hãy để lại chúng trong phần bình luận.


Về các tác giả

Poulomi Dasgupta là Kiến trúc sư giải pháp phân tích cấp cao của AWS. Cô ấy đam mê giúp khách hàng xây dựng các giải pháp phân tích dựa trên đám mây để giải quyết các vấn đề kinh doanh của họ. Ngoài công việc, cô thích đi du lịch và dành thời gian cho gia đình.

Adekunle Adedotun là Kỹ sư cơ sở dữ liệu cấp cao với dịch vụ Amazon Redshift. Anh ấy đã làm việc trên cơ sở dữ liệu MPP được 6 năm với trọng tâm là điều chỉnh hiệu suất. Ông cũng cung cấp hướng dẫn cho nhóm phát triển về các tính năng dịch vụ mới và hiện có.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img