Zephyrnet Logosu

Amazon MSK ile Amazon Redshift Streaming Ingestion'ı kullanarak gerçek zamanlıya yakın analizleri uygulamaya yönelik en iyi uygulamalar | Amazon Web Hizmetleri

Tarih:

Amazon Kırmızıya Kaydırma geniş ölçekte hızlı, basit ve güvenli analizlerle içgörülere ulaşma sürenizi hızlandıran, tümüyle yönetilen, ölçeklenebilir bir bulut veri ambarıdır. On binlerce müşteri, eksabaytlarca veriyi analiz etmek ve karmaşık analitik sorgular yürütmek için Amazon Redshift'e güveniyor; bu da onu en yaygın kullanılan bulut veri ambarı haline getiriyor. Veri ambarı altyapınızı yönetmeye gerek kalmadan, tüm verileriniz üzerinde analitiği saniyeler içinde çalıştırabilir ve ölçeklendirebilirsiniz.

Sen kullanabilirsiniz Amazon Redshift Akış Alımı Analitik veritabanlarınızı neredeyse gerçek zamanlı olarak güncelleme yeteneği. Amazon Redshift akış alımı, doğrudan veri akışlarının üzerinde gerçekleştirilmiş görünümler oluşturmanıza olanak tanıyarak veri işlem hatlarını basitleştirir. Amazon Redshift'teki bu özellik sayesinde, Yapılandırılmış Sorgu Dili'ni (SQL) kullanarak veri akışlarına bağlanmak ve veri akışlarından doğrudan veri almak için kullanabilirsiniz. Amazon Kinesis Veri Akışları or Apache Kafka için Amazon Tarafından Yönetilen Akış (Amazon MSK) veri akışları gerçekleştirebilir ve verileri doğrudan Amazon Redshift'e çekebilirsiniz.

Bu yazıda Amazon MSK ile Amazon Redshift akış alımını kullanarak gerçek zamanlıya yakın analizler uygulamaya yönelik en iyi uygulamaları tartışıyoruz.

Çözüme genel bakış

Amazon Redshift akış alımını kullanarak bir MSK konusundan Amazon Redshift'e veri almak için örnek bir işlem hattını inceliyoruz. Ayrıca Amazon Redshift'te nokta gösterimini kullanarak JSON verilerinin iç içe nasıl çıkarılacağını da gösteriyoruz. Aşağıdaki diyagram çözüm mimarimizi göstermektedir.

Süreç akışı aşağıdaki adımlardan oluşur:

  1. MSK konularından canlı akış verilerini tüketmek için Redshift kümenizde akışla gerçekleştirilmiş bir görünüm oluşturun.
  2. Alınan MSK konusu için kayıt düzeyinde Kafka Bölümü ve Kafka Uzaklığının benzersiz kombinasyonunu kullanarak değişiklik verisi yakalamayı (CDC) uygulamak için saklı bir prosedür kullanın.
  3. Redshift kümesinde kullanıcıya yönelik bir tablo oluşturun ve JSON belgesini akışla gerçekleştirilmiş görünümden tablonun veri sütunlarına yerleştirmek için nokta gösterimini kullanın. Saklı yordamı düzenli aralıklarla çağırarak sürekli olarak yeni veriler yükleyebilirsiniz.
  4. Bağlantı kurun arasında Amazon QuickSight görselleştirme ve öngörüler sunmak için kontrol paneli ve Amazon Redshift.

Bu yazının bir parçası olarak aşağıdaki konuları da tartışıyoruz:

  • Amazon MSK'dan Amazon Redshift'e hesaplar arası akış alımını yapılandırma adımları
  • Gerçekleştirilmiş görünümlerin akışından optimize edilmiş performans elde etmek için en iyi uygulamalar
  • Amazon Redshift akış alımındaki hataları izlemeye yönelik izleme teknikleri

Önkoşullar

Aşağıdakilere sahip olmalısınız:

  • Bir AWS hesabı.
  • Kullanım durumunuza bağlı olarak aşağıdaki kaynaklardan biri:
  • Bir MSK kümesi. Talimatlar için bkz. Amazon MSK kümesi oluşturma.
  • Bir konu Veri üreticinizin verileri yayınlayabileceği MSK kümenizde.
  • MSK kümenizdeki konuya veri yazacak bir veri üreticisi.

MSK konunuzu ayarlarken dikkat edilmesi gereken noktalar

MSK konunuzu yapılandırırken aşağıdaki hususları aklınızda bulundurun:

  • MSK konunuzun adının 128 karakterden uzun olmadığından emin olun.
  • Bu yazının yazıldığı an itibarıyla, sıkıştırılmış veri içeren MSK kayıtları Amazon Redshift'te doğrudan sorgulanamamaktadır. Amazon Redshift, bir MSK konusundaki istemci tarafında sıkıştırılmış veriler için herhangi bir yerel sıkıştırmayı açma yöntemini desteklemez.
  • Takip Edin en iyi uygulamalar MSK kümenizi kurarken.
  • Akış beslemesini inceleyin sınırlamaları diğer hususlar için.

Akış alımını ayarla

Akış alımını ayarlamak için aşağıdaki adımları tamamlayın:

  1. Ayarla AWS Kimlik ve Erişim Yönetimi Akış beslemesi için (IAM) rolü ve güven politikası gereklidir. Talimatlar için bkz. IAM kurulumu ve Kafka'dan akış alımının gerçekleştirilmesi.
  2. Verilerin MSK konunuza aktığından emin olun. Amazon Bulut İzleme metrikleri (Örneğin, BaytOutPerSec).
  3. Amazon Redshift konsolundan sorgu düzenleyici v2'yi başlatın veya sonraki adımlar için Redshift kümenize bağlanmak üzere tercih ettiğiniz SQL istemcisini kullanın. Aşağıdaki adımlar sorgu düzenleyici v2'de çalıştırıldı.
  4. MSK kümesiyle eşlenecek harici bir şema oluşturun. Aşağıdaki ifadede IAM rolünüz ARN'yi ve MSK kümesi ARN'nizi değiştirin:
    CREATE EXTERNAL SCHEMA custschema
    FROM MSK
    IAM_ROLE  'iam-role-arn' 
    AUTHENTICATION { none | iam }
    CLUSTER_ARN 'msk-cluster-arn';
    

  5. İsteğe bağlı olarak, konu adlarınız büyük/küçük harfe duyarlıysa etkinleştirmeniz gerekir. enable_case_sensitive_identifier Amazon Redshift'te bunlara erişebilmek için. Büyük/küçük harfe duyarlı tanımlayıcıları kullanmak için enable_case_sensitive_identifier oturum, kullanıcı veya küme düzeyinde true değerine ayarlamak için:
    SET ENABLE_CASE_SENSITIVE_IDENTIFIER TO TRUE;

  6. MSK konusundan akış verilerini tüketmek için gerçekleştirilmiş bir görünüm oluşturun:
    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);
    

Meta veri sütunu kafka_value Amazon MSK'dan gelen veriler şurada depolanır: VARBİT Amazon Redshift'te biçimi. Bu yazı için şunu kullanacaksınız: JSON_PARSE dönüştürme işlevi kafka_value a SÜPER veri türü. Ayrıca şunları kullanırsınız: CAN_JSON_PARSE Geçersiz JSON kayıtlarını atlamak ve JSON ayrıştırma hatalarından kaynaklanan hatalara karşı koruma sağlamak için filtre koşulundaki işlev. Bu yazının ilerleyen kısımlarında gelecekteki hata ayıklama için geçersiz verilerin nasıl saklanacağını tartışacağız.

  1. Amazon Redshift'in MSK konusundan okumasını ve verileri materyalleştirilmiş görünüme yüklemesini tetikleyen akış materyalleştirilmiş görünümünü yenileyin:
    REFRESH MATERIALIZED VIEW Orders_Stream_MV;

Ayrıca akışla gerçekleştirilmiş görünümünüzü otomatik yenileme özelliklerini kullanacak şekilde de ayarlayabilirsiniz. Bu, akışa veri geldiğinde materyalleştirilmiş görünümünüzü otomatik olarak yenileyecektir. Görmek MATERYALİZE GÖRÜNÜM OLUŞTUR Otomatik yenilemeyle gerçekleştirilmiş bir görünüm oluşturmaya yönelik talimatlar için.

JSON belgesini iç içe yerleştirme

Aşağıda, MSK konusundan akış materyalleştirilmiş görünümündeki SUPER türünün Veri sütununa alınan bir JSON belgesi örneği yer almaktadır. 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"
}

JSON verinizi iç içe yerleştirmek için aşağıdaki kodda gösterildiği gibi nokta gösterimini kullanı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;

Aşağıdaki ekran görüntüsü, yerleştirmeden sonra sonucun nasıl göründüğünü gösterir.

JSON belgenizde diziler varsa, şunu kullanarak verilerinizi iç içe yerleştirmeyi düşünün: PartiQL Amazon Redshift'teki ifadeler. Daha fazla bilgi için bölüme bakın JSON belgesini iç içe yerleştirme gönderide Amazon Kinesis Data Streams ve Amazon DynamoDB ile Amazon Redshift akış alımını kullanan neredeyse gerçek zamanlı analizler.

Artımlı veri yükleme stratejisi

Artımlı veri yüklemeyi uygulamak için aşağıdaki adımları tamamlayın:

  1. Amazon Redshift'te son kullanıcıların görselleştirme ve iş analizi için kullanacağı Siparişler adlı bir tablo oluşturun:
    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;
    

Daha sonra, adı verilen bir saklı yordam oluşturursunuz. SP_Orders_Load CDC'yi akışla gerçekleştirilmiş bir görünümden uygulamak ve finale yüklemek için Orders masa. kombinasyonunu kullanırsınız Kafka_Partition ve Kafka_Offset akış materyalleştirilmiş görünümünde CDC'yi uygulamak için sistem sütunları olarak mevcuttur. Bu iki sütunun birleşimi, bir MSK konusu içinde her zaman benzersiz olacaktır; bu, işlem sırasında hiçbir kaydın gözden kaçırılmamasını sağlar. Saklı yordam aşağıdaki bileşenleri içerir:

  • Büyük/küçük harfe duyarlı tanımlayıcıları kullanmak için enable_case_sensitive_identifier oturum, kullanıcı veya küme düzeyinde true değerini alır.
  • Otomatik yenileme etkin değilse akışla gerçekleştirilmiş görünümü manuel olarak yenileyin.
  • adında bir denetim tablosu oluşturun. Orders_Streaming_Audit saklı yordamın son çalıştırılması sırasında Siparişler tablosuna yüklenen bir bölümün son uzaklığını takip etmek mevcut değilse.
  • Yuvadan çıkarın ve yalnızca yeni veya değiştirilmiş verileri adlı bir hazırlama tablosuna ekleyin. Orders_Staging_Table, akışla gerçekleştirilmiş görünümden okuma Orders_Stream_MV, Burada Kafka_Offset son işlenenden daha büyük Kafka_Offset Denetim tablosuna kaydedilen Orders_Streaming_Audit için Kafka_Partition işlenmekte olan.
  • Bu saklı yordamı kullanarak ilk kez yükleme yaparken, dosyada hiçbir veri olmayacaktır. Orders_Streaming_Audit tablo ve tüm veriler Orders_Stream_MV Siparişler tablosuna yüklenecektir.
  • Kullanıcıya yönelik sütunlara yalnızca işle ilgili sütunlar ekleyin Orders tablo, hazırlama tablosundan seçim yapma Orders_Staging_Table.
  • Maksimum değeri girin Kafka_Offset her yüklenen için Kafka_Partition denetim masasına Orders_Streaming_Audit

Ara aşama tablosunu ekledik Orders_Staging_Table Beklenmedik arızalar ve izlenebilirlik durumunda hata ayıklamaya yardımcı olmak için bu çözümde. Aşama aşamasını atlayıp doğrudan final masasına yükleme Orders_Stream_MV kullanım durumunuza bağlı olarak daha düşük gecikme sağlayabilir.

  1. Saklı yordamı aşağıdaki kodla oluşturun:
    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. Verileri belleğe yüklemek için saklı yordamı çalıştırın. Orders tablosu:
    call SP_Orders_Load();

  3. Siparişler tablosundaki verileri doğrulayın.

Hesaplar arası akış alımı oluşturma

MSK kümeniz farklı bir hesaba aitse hesaplar arası akış alımını ayarlamak amacıyla IAM rolleri oluşturmak için aşağıdaki adımları tamamlayın. Aşağıdaki diyagramda gösterildiği gibi Redshift kümesinin A hesabında ve MSK kümesinin B hesabında olduğunu varsayalım.

Aşağıdaki adımları tamamlayın:

  1. B hesabında adlı bir IAM rolü oluşturun MyRedshiftMSKRole Amazon Redshift'in (A hesabı) adlı MSK kümesiyle (B hesabı) iletişim kurmasına olanak tanır MyTestCluster. MSK kümenizin bağlanmak için IAM kimlik doğrulamasını mı yoksa kimlik doğrulamasız erişimi mi kullandığına bağlı olarak aşağıdaki politikalardan biriyle bir IAM rolü oluşturmanız gerekir:
    • Bir IAM policAmazonAmazon Kimliği doğrulanmamış erişim kullanan MSK:
      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Sid": "RedshiftMSKPolicy",
                  "Effect": "Allow",
                  "Action": [
                      "kafka:GetBootstrapBrokers"
                  ],
                  "Resource": "*"
              }
          ]
      }

    • IAM kimlik doğrulamasını kullanırken Amazon MSK için bir IAM politikası:
      {
          "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": "*"
              }
          ]
      }
      

Önceki örnekteki kaynak bölümü, bölümdeki tüm konulara erişim sağlar. MyTestCluster MSK kümesi. IAM rolünü belirli konularla sınırlamanız gerekiyorsa konu kaynağını daha kısıtlayıcı bir kaynak politikasıyla değiştirmeniz gerekir.

  1. B hesabında IAM rolünü oluşturduktan sonra IAM rolü ARN'sini not edin (örneğin, arn:aws:iam::0123456789:role/MyRedshiftMSKRole).
  2. A hesabında, adında özelleştirilebilir bir Redshift IAM rolü oluşturun. MyRedshiftRoleAmazon Redshift'in Amazon MSK'ya bağlanırken üstleneceği şey. Rol, A hesabındaki Amazon Redshift IAM Rolünün B hesabındaki Amazon MSK rolünü üstlenmesine olanak tanıyan aşağıdaki gibi bir politikaya sahip olmalıdır:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "RedshiftMSKAssumePolicy",
                "Effect": "Allow",
                "Action": "sts:AssumeRole",
                "Resource": "arn:aws:iam::0123456789:role/MyRedshiftMSKRole"        
           }
        ]
    }
    

  3. Amazon Redshift IAM rolü için ARN rolünü not edin (örneğin, arn:aws:iam::9876543210:role/MyRedshiftRole).
  4. B hesabına geri dönün ve bu rolü IAM rolünün güven politikasına ekleyin arn:aws:iam::0123456789:role/MyRedshiftMSKRole B hesabının, A hesabındaki IAM rolüne güvenmesine izin vermek için. Güven politikası aşağıdaki kod gibi görünmelidir:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "sts:AssumeRole",
          "Principal": {
            "AWS": "arn:aws:iam::9876543210:role/MyRedshiftRole"
          }
        }
      ]
    } 
    

  5. Amazon Redshift konsolunda A hesabı olarak oturum açın.
  6. Sorgu düzenleyici v2'yi veya tercih ettiğiniz SQL istemcisini başlatın ve B hesabındaki MSK konusuna erişmek için aşağıdaki ifadeleri çalıştırın. MSK kümesiyle eşlemek için şunu kullanarak harici bir şema oluşturun: rol zincirleme IAM rolü ARN'lerini çevresinde boşluk olmadan virgülle ayırarak belirterek. Redshift kümesine eklenen rol zincirde ilk sırada gelir.
    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 
    

Performans konuları

Aşağıdaki performans hususlarını aklınızda bulundurun:

  • Akışla materyalleştirilmiş görünümü basit tutun ve yuvalama, toplama ve vaka ifadeleri gibi dönüşümleri daha sonraki bir adıma taşıyın (örneğin, akışla materyalleştirilmiş görünümün üzerinde başka bir materyalleştirilmiş görünüm oluşturarak).
  • Belirli bir MSK konusu için tek bir Redshift kümesinde veya çalışma grubunda yalnızca bir akışla gerçekleştirilmiş görünüm oluşturmayı düşünün. MSK konusu başına birden fazla materyalleştirilmiş görünümün oluşturulması, her materyalleştirilmiş görünümün o konu için bir tüketici haline gelmesi ve bu konu için Amazon MSK bant genişliğini paylaşması nedeniyle besleme performansını yavaşlatabilir. Akış gerçekleştirilmiş bir görünümdeki canlı akış verileri, birden fazla Redshift kümesi veya Redshift Sunucusuz çalışma grubu arasında paylaşılabilir. bilgi paylaşımı.
  • Gerçekleştirilmiş akış görünümünüzü tanımlarken şunu kullanmaktan kaçının: Json_Extract_Path_Text verileri önceden parçalamak için, çünkü Json_extract_path_text veri üzerinde satır satır çalışır ve bu da alım verimini önemli ölçüde etkiler. Verilerin akıştan olduğu gibi alınması ve daha sonra parçalanması tercih edilir.
  • Mümkün olduğunda, besleme hızını artırmak için akışla gerçekleştirilmiş görünümde sıralama anahtarını atlamayı düşünün. Akışla gerçekleştirilmiş görünümün bir sıralama anahtarı olduğunda, akıştan alınan her veri kümesinde bir sıralama işlemi gerçekleştirilecektir. Sıralamanın, sıralama anahtarı veri türüne, sıralama anahtarı sütunlarının sayısına ve her grupta alınan veri miktarına bağlı olarak duyulabilecek bir performansı vardır. Bu sıralama adımı, akış verilerinin sorgulanmaya hazır hale gelmesinden önceki gecikmeyi artırabilir. Hangisinin daha önemli olduğunu tartmalısınız: veri alma sırasındaki gecikme veya verileri sorgulama sırasındaki gecikme.
  • Akışla gerçekleştirilmiş görünümün optimize edilmiş performansı için ve depolama kullanımını azaltmak için, ara sıra kullanarak verileri gerçekleştirilmiş görünümden temizleyin. silmek, kesmekya da tablo eklemeyi değiştir.
  • Birden fazla MSK konusunu paralel olarak Amazon Redshift'e aktarmanız gerekiyorsa, daha az sayıda akışla gerçekleştirilmiş görünümle başlayın ve bir küme veya çalışma grubu içindeki genel alma performansını değerlendirmek için daha fazla gerçekleştirilmiş görünüm eklemeye devam edin.
  • Redshift tarafından sağlanan bir kümedeki düğüm sayısını veya Redshift Sunucusuz çalışma grubunun temel RPU'sunu artırmak, akışla gerçekleştirilmiş bir görünümün alım performansının artırılmasına yardımcı olabilir. Optimum performans için, Redshift tarafından sağlanan kümenizde MSK konunuzdaki bölüm sayısı kadar dilim veya MSK konunuzdaki her dört bölüm için 8 RPU olmasını hedeflemelisiniz.

İzleme teknikleri

Konuyla ilgili, besleme sırasında hedef gerçekleştirilmiş görünüm sütununun boyutunu aşan kayıtlar atlanacaktır. Gerçekleştirilmiş görünüm yenilemesi tarafından atlanan kayıtlar, SYS_STREAM_SCAN_ERRORS sistem tablosu.

Gerçekleştirilmiş görünüm tanımındaki bir hesaplama veya veri türü dönüştürmesi veya başka bir mantık nedeniyle bir kayıt işlenirken ortaya çıkan hatalar, rahatsız edici kaydın konudan süresi dolana kadar materyalleştirilmiş görünüm yenileme hatasıyla sonuçlanacaktır. Bu tür sorunlardan kaçınmak için materyalleştirilmiş görünüm tanımınızın mantığını dikkatli bir şekilde test edin; aksi takdirde kayıtları varsayılan VARBYTE sütununa yerleştirin ve daha sonra işleyin.

Aşağıdaki izleme görünümleri mevcuttur:

  • SYS_MV_REFRESH_HISTORY – Akışla gerçekleştirilmiş görünümlerinizin yenileme geçmişi hakkında bilgi toplamak için bu görünümü kullanın. Sonuçlar, manuel veya otomatik gibi yenileme türünü ve en son yenilemenin durumunu içerir. Aşağıdaki sorgu, akışla gerçekleştirilmiş bir görünümün yenileme geçmişini gösterir:
    select mv_name, refresh_type, status, duration  from SYS_MV_REFRESH_HISTORY where mv_name='mv_store_sales'

  • SYS_STREAM_SCAN_ERRORS – Bir kaydın bir MSK konusundan akış alımı yoluyla yüklenememe nedenini kontrol etmek için bu görünümü kullanın. Bu gönderiyi yazarken, Amazon MSK'dan besleme yaparken bu görünüm, yalnızca kaydın gerçekleştirilmiş görünüm sütunu boyutundan büyük olması durumunda hataları günlüğe kaydeder. Bu görünüm aynı zamanda konum sütununda MSK kaydının benzersiz tanımlayıcısını (ofsetini) gösterecektir. Aşağıdaki sorgu, bir kaydın maksimum boyut sınırını aşması durumunda hata kodunu ve hata nedenini gösterir:
    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 – Belirli bir kayıt zamanında taranan kayıt sayısını izlemek için bu görünümü kullanın. Bu görünüm aynı zamanda grupta okunan son kaydın uzaklığını da izler. Aşağıdaki sorgu, belirli bir gerçekleştirilmiş görünüme ilişkin konu verilerini gösterir:
    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 – Akışla gerçekleştirilmiş bir görünümün yenilenmesine ilişkin genel ölçümleri kontrol etmek için bu görünümü kullanın. Bu aynı zamanda hata_message sütununda görünmeyen hatalara ilişkin hataları da günlüğe kaydeder. SYS_STREAM_SCAN_ERRORS. Aşağıdaki sorgu, akışla gerçekleştirilmiş bir görünümün yenileme hatasına neden olan hatayı gösterir:
    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

Uygulamaya ilişkin ek hususlar

İsteğe bağlı olarak, akışla gerçekleştirilmiş bir görünümün üzerinde, son kullanıcılar için sonuçları ayırmanıza ve önceden hesaplamanıza olanak tanıyan, gerçekleştirilmiş bir görünüm oluşturma seçeneğiniz vardır. Bu yaklaşım, sonuçların saklı prosedür kullanılarak nihai tabloda saklanması ihtiyacını ortadan kaldırır.

Bu yayında, CAN_JSON_PARSE işlevi verileri daha başarılı bir şekilde almak için herhangi bir hataya karşı koruma sağlamak; bu durumda ayrıştırılamayan akış kayıtları Amazon Redshift tarafından atlanır. Ancak hata kayıtlarınızı takip etmek istiyorsanız akışla gerçekleştirilmiş görünümü oluştururken bunları aşağıdaki SQL'i kullanarak bir sütunda saklamayı düşünü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";

Ayrıca düşünebilirsiniz veri boşaltılıyor görünümden SYS_STREAM_SCAN_ERRORS Içine Amazon Basit Depolama Hizmeti (Amazon S3) paketleyin ve şu şekilde uyarı alın: e-postayla rapor gönderme kullanma Amazon Basit Bildirim Servisi (Amazon SNS) yeni bir S3 nesnesi oluşturulduğunda bildirim alır.

Son olarak veri güncelliği ihtiyacınıza göre şunları kullanabilirsiniz: Amazon EventBridge yukarıda belirtilenleri çağırmak üzere veri ambarınızdaki işleri planlamak için SP_Orders_Load Saklı yordamı düzenli olarak EventBridge bunu sabit aralıklarla yapar ve bir mekanizmaya (örneğin, bir AWS Basamak İşlevleri prosedüre yapılan önceki çağrının tamamlanıp tamamlanmadığını izlemek için durum makinesi). Daha fazla bilgi için bkz. Belirli bir zamanlamaya göre çalışan bir Amazon EventBridge kuralı oluşturma. Ayrıca şuraya da başvurabilirsiniz: AWS Step Functions ve Amazon Redshift Data API kullanarak bir ELT sürecinin orkestrasyonunu hızlandırın. Başka bir seçenek kullanmaktır Amazon Redshift sorgu düzenleyicisi v2 yenilemeyi planlamak için. Ayrıntılar için bkz. Sorgu düzenleyici v2 ile sorgu planlama.

Sonuç

Bu yazıda Amazon MSK ile Amazon Redshift akış alımını kullanarak gerçek zamanlıya yakın analizler uygulamaya yönelik en iyi uygulamaları tartıştık. Akış alımını kullanarak bir MSK konusundan Amazon Redshift'e veri almak için size örnek bir işlem hattı gösterdik. Ayrıca Kafka Partition ve Kafka Offset'i kullanarak Amazon Redshift'e artımlı akış verisi yüklemeyi gerçekleştirmek için güvenilir bir strateji gösterdik. Ayrıca Amazon MSK'dan Amazon Redshift'e hesaplar arası akış alımını yapılandırma adımlarını gösterdik ve optimize edilmiş alım hızına yönelik performans hususlarını tartıştık. Son olarak Amazon Redshift akış alımındaki hataları izlemeye yönelik izleme tekniklerini tartıştık.

Sorularınız varsa yorum kısmına bırakın.


Yazarlar Hakkında

Poulomi Dasgupta AWS'li Kıdemli Analitik Çözümler Mimarıdır. Müşterilerin iş sorunlarını çözmeleri için bulut tabanlı analitik çözümler oluşturmasına yardımcı olma konusunda tutkulu. İş dışında seyahat etmeyi ve ailesiyle vakit geçirmeyi seviyor.

Adekunle Adedotun Amazon Redshift hizmetinde Kıdemli Veritabanı Mühendisidir. Performans ayarlama odaklı olarak 6 yıldır MPP veritabanları üzerinde çalışmaktadır. Ayrıca geliştirme ekibine yeni ve mevcut hizmet özellikleri konusunda rehberlik sağlar.

spot_img

En Son İstihbarat

spot_img