जेफिरनेट लोगो

अमेज़ॅन एमएसके के साथ अमेज़ॅन रेडशिफ्ट स्ट्रीमिंग इंजेस्टियन का उपयोग करके लगभग वास्तविक समय विश्लेषण लागू करने की सर्वोत्तम प्रथाएं | अमेज़न वेब सेवाएँ

दिनांक:

अमेज़न रेडशिफ्ट एक पूरी तरह से प्रबंधित, स्केलेबल क्लाउड डेटा वेयरहाउस है जो बड़े पैमाने पर तेज, सीधे और सुरक्षित एनालिटिक्स के साथ अंतर्दृष्टि के लिए आपके समय को तेज करता है। हजारों ग्राहक डेटा के एक्साबाइट का विश्लेषण करने और जटिल विश्लेषणात्मक क्वेरी चलाने के लिए अमेज़ॅन रेडशिफ्ट पर भरोसा करते हैं, जिससे यह सबसे व्यापक रूप से उपयोग किया जाने वाला क्लाउड डेटा वेयरहाउस बन जाता है। आप अपने डेटा वेयरहाउस इंफ्रास्ट्रक्चर को प्रबंधित किए बिना, अपने सभी डेटा पर सेकंडों में एनालिटिक्स चला सकते हैं और स्केल कर सकते हैं।

आप का उपयोग कर सकते हैं अमेज़ॅन रेडशिफ्ट स्ट्रीमिंग अंतर्ग्रहण आपके एनालिटिक्स डेटाबेस को लगभग वास्तविक समय में अपडेट करने की क्षमता। अमेज़ॅन रेडशिफ्ट स्ट्रीमिंग अंतर्ग्रहण आपको सीधे डेटा स्ट्रीम के शीर्ष पर भौतिक दृश्य बनाने की सुविधा देकर डेटा पाइपलाइनों को सरल बनाता है। अमेज़ॅन रेडशिफ्ट में इस क्षमता के साथ, आप डेटा स्ट्रीम से कनेक्ट करने और सीधे डेटा प्राप्त करने के लिए स्ट्रक्चर्ड क्वेरी लैंग्वेज (एसक्यूएल) का उपयोग कर सकते हैं, जैसे कि अमेज़न Kinesis डेटा स्ट्रीम or Apache Kafka के लिए Amazon प्रबंधित स्ट्रीमिंग (अमेज़ॅन एमएसके) डेटा स्ट्रीम, और डेटा को सीधे अमेज़ॅन रेडशिफ्ट पर खींचें।

इस पोस्ट में, हम Amazon MSK के साथ Amazon Redshift स्ट्रीमिंग अंतर्ग्रहण का उपयोग करके वास्तविक समय के विश्लेषण को लागू करने की सर्वोत्तम प्रथाओं पर चर्चा करते हैं।

समाधान का अवलोकन

हम Amazon Redshift स्ट्रीमिंग अंतर्ग्रहण का उपयोग करके MSK विषय से Amazon Redshift में डेटा अंतर्ग्रहण करने के लिए एक उदाहरण पाइपलाइन से गुजरते हैं। हम यह भी दिखाते हैं कि Amazon Redshift में डॉट नोटेशन का उपयोग करके JSON डेटा को कैसे अननेस्ट किया जाए। निम्नलिखित चित्र हमारे समाधान आर्किटेक्चर को दर्शाता है।

प्रक्रिया प्रवाह में निम्नलिखित चरण शामिल हैं:

  1. MSK विषयों से लाइव स्ट्रीमिंग डेटा का उपभोग करने के लिए अपने रेडशिफ्ट क्लस्टर में एक स्ट्रीमिंग भौतिक दृश्य बनाएं।
  2. सम्मिलित एमएसके विषय के लिए रिकॉर्ड स्तर पर काफ्का विभाजन और काफ्का ऑफसेट के अद्वितीय संयोजन का उपयोग करके परिवर्तन डेटा कैप्चर (सीडीसी) को लागू करने के लिए संग्रहीत प्रक्रिया का उपयोग करें।
  3. रेडशिफ्ट क्लस्टर में एक उपयोगकर्ता-सामना वाली तालिका बनाएं और तालिका के डेटा कॉलम में स्ट्रीमिंग भौतिक दृश्य से JSON दस्तावेज़ को अननेस्ट करने के लिए डॉट नोटेशन का उपयोग करें। आप संग्रहीत प्रक्रिया को नियमित अंतराल पर कॉल करके लगातार ताज़ा डेटा लोड कर सकते हैं।
  4. कनेक्टिविटी स्थापित करें एक के बीच अमेज़न क्विकसाइट विज़ुअलाइज़ेशन और अंतर्दृष्टि प्रदान करने के लिए डैशबोर्ड और अमेज़ॅन रेडशिफ्ट।

इस पोस्ट के भाग के रूप में, हम निम्नलिखित विषयों पर भी चर्चा करते हैं:

  • Amazon MSK से Amazon Redshift तक क्रॉस-अकाउंट स्ट्रीमिंग अंतर्ग्रहण को कॉन्फ़िगर करने के चरण
  • भौतिक दृश्यों की स्ट्रीमिंग से अनुकूलित प्रदर्शन प्राप्त करने के लिए सर्वोत्तम अभ्यास
  • अमेज़ॅन रेडशिफ्ट स्ट्रीमिंग अंतर्ग्रहण में विफलताओं को ट्रैक करने के लिए निगरानी तकनीक

.. पूर्वापेक्षाएँ

आपके पास निम्नलिखित होना चाहिए:

  • एक एडब्ल्यूएस खाता.
  • आपके उपयोग के मामले के आधार पर, निम्नलिखित संसाधनों में से एक:
  • एक MSK क्लस्टर. निर्देशों के लिए, देखें एक Amazon MSK क्लस्टर बनाएं.
  • एक विषय आपके MSK क्लस्टर में जहां आपका डेटा निर्माता डेटा प्रकाशित कर सकता है।
  • आपके MSK क्लस्टर में विषय पर डेटा लिखने के लिए एक डेटा निर्माता।

अपना MSK विषय सेट करते समय विचार

अपने MSK विषय को कॉन्फ़िगर करते समय निम्नलिखित बातों को ध्यान में रखें:

  • सुनिश्चित करें कि आपके MSK विषय का नाम 128 अक्षरों से अधिक न हो।
  • इस लेखन के समय, संपीड़ित डेटा वाले MSK रिकॉर्ड को सीधे Amazon Redshift में क्वेरी नहीं किया जा सकता है। Amazon Redshift MSK विषय में क्लाइंट-साइड संपीड़ित डेटा के लिए किसी भी मूल डीकंप्रेसन विधियों का समर्थन नहीं करता है।
  • का पालन करें सर्वोत्तम प्रथाओं अपना MSK क्लस्टर सेट करते समय।
  • स्ट्रीमिंग अंतर्ग्रहण की समीक्षा करें सीमाओं किसी अन्य विचार के लिए.

स्ट्रीमिंग अंतर्ग्रहण सेट करें

स्ट्रीमिंग अंतर्ग्रहण सेट करने के लिए, निम्न चरणों को पूरा करें:

  1. सेट अप करें AWS पहचान और अभिगम प्रबंधन स्ट्रीमिंग अंतर्ग्रहण के लिए (IAM) भूमिका और विश्वास नीति आवश्यक है। निर्देशों के लिए, देखें IAM की स्थापना करना और काफ्का से स्ट्रीमिंग अंतर्ग्रहण करना.
  2. सुनिश्चित करें कि डेटा आपके MSK विषय में प्रवाहित हो रहा है अमेज़ॅन क्लाउडवॉच मेट्रिक्स (उदाहरण के लिए, बाइट्सआउटपरसेक).
  3. अमेज़ॅन रेडशिफ्ट कंसोल से क्वेरी एडिटर v2 लॉन्च करें या अगले चरणों के लिए अपने रेडशिफ्ट क्लस्टर से कनेक्ट करने के लिए अपने पसंदीदा SQL क्लाइंट का उपयोग करें। क्वेरी संपादक v2 में निम्नलिखित चरण चलाये गये।
  4. MSK क्लस्टर में मैप करने के लिए एक बाहरी स्कीमा बनाएं। अपनी IAM भूमिका ARN और MSK क्लस्टर ARN को निम्नलिखित कथन में बदलें:
    CREATE EXTERNAL SCHEMA custschema
    FROM MSK
    IAM_ROLE  'iam-role-arn' 
    AUTHENTICATION { none | iam }
    CLUSTER_ARN 'msk-cluster-arn';
    

  5. वैकल्पिक रूप से, यदि आपके विषय के नाम केस संवेदनशील हैं, तो आपको सक्षम करने की आवश्यकता है enable_case_sensitive_identifier अमेज़ॅन रेडशिफ्ट में उन तक पहुंचने में सक्षम होने के लिए। केस-संवेदी पहचानकर्ताओं का उपयोग करने के लिए, सेट करें enable_case_sensitive_identifier सत्र, उपयोगकर्ता या क्लस्टर स्तर पर सही करने के लिए:
    SET ENABLE_CASE_SENSITIVE_IDENTIFIER TO TRUE;

  6. 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);
    

मेटाडेटा स्तंभ kafka_value जो अमेज़ॅन MSK से आता है उसे संग्रहीत किया जाता है वरबाइटे अमेज़ॅन रेडशिफ्ट में प्रारूप। इस पोस्ट के लिए आप इसका उपयोग करें JSON_PARSE परिवर्तित करने का कार्य kafka_value एक करने के लिए सुपर डेटा प्रकार. आप भी उपयोग करें CAN_JSON_PARSE अमान्य JSON रिकॉर्ड को छोड़ने और JSON पार्सिंग विफलताओं के कारण त्रुटियों से बचाव के लिए फ़िल्टर स्थिति में कार्य करें। हम इस पोस्ट में बाद में चर्चा करेंगे कि भविष्य में डिबगिंग के लिए अमान्य डेटा को कैसे संग्रहीत किया जाए।

  1. स्ट्रीमिंग भौतिक दृश्य को ताज़ा करें, जो अमेज़ॅन रेडशिफ्ट को एमएसके विषय से पढ़ने और डेटा को भौतिक दृश्य में लोड करने के लिए ट्रिगर करता है:
    REFRESH MATERIALIZED VIEW Orders_Stream_MV;

आप ऑटो रीफ़्रेश क्षमताओं का उपयोग करने के लिए अपना स्ट्रीमिंग भौतिक दृश्य भी सेट कर सकते हैं। स्ट्रीम में डेटा आते ही यह स्वचालित रूप से आपके भौतिक दृश्य को ताज़ा कर देगा। देखना भौतिक दृष्टिकोण बनाएं ऑटो रिफ्रेश के साथ एक भौतिक दृश्य बनाने के निर्देशों के लिए।

JSON दस्तावेज़ को अननेस्ट करें

निम्नलिखित एक JSON दस्तावेज़ का एक नमूना है जिसे MSK विषय से स्ट्रीमिंग भौतिक दृश्य में सुपर प्रकार के डेटा कॉलम में शामिल किया गया था 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 पेलोड को अननेस्ट करने के लिए निम्नलिखित कोड में दिखाए अनुसार डॉट नोटेशन का उपयोग करें:

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;

निम्नलिखित स्क्रीनशॉट दिखाता है कि अननेस्टिंग के बाद परिणाम कैसा दिखता है।

यदि आपके JSON दस्तावेज़ में सारणियाँ हैं, तो अपने डेटा का उपयोग करके अननेस्ट करने पर विचार करें पार्टिक्यूएल अमेज़न रेडशिफ्ट में बयान। अधिक जानकारी के लिए अनुभाग देखें JSON दस्तावेज़ को अननेस्ट करें पोस्ट में अमेज़ॅन किनेसिस डेटा स्ट्रीम और अमेज़ॅन डायनेमोडीबी के साथ अमेज़ॅन रेडशिफ्ट स्ट्रीमिंग अंतर्ग्रहण का उपयोग करके लगभग वास्तविक समय विश्लेषण.

वृद्धिशील डेटा लोड रणनीति

वृद्धिशील डेटा लोड लागू करने के लिए निम्नलिखित चरणों को पूरा करें:

  1. अमेज़ॅन रेडशिफ्ट में ऑर्डर नामक एक तालिका बनाएं, जिसका उपयोग अंतिम उपयोगकर्ता विज़ुअलाइज़ेशन और व्यावसायिक विश्लेषण के लिए करेंगे:
    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;
    

इसके बाद, आप एक संग्रहित प्रक्रिया बनाते हैं जिसे कहा जाता है SP_Orders_Load स्ट्रीमिंग भौतिक दृश्य से सीडीसी को लागू करने और फाइनल में लोड करने के लिए Orders मेज़। आप के संयोजन का उपयोग करें Kafka_Partition और Kafka_Offset सीडीसी को लागू करने के लिए सिस्टम कॉलम के रूप में स्ट्रीमिंग भौतिक दृश्य में उपलब्ध है। MSK विषय के भीतर इन दो स्तंभों का संयोजन हमेशा अद्वितीय होगा, जो यह सुनिश्चित करता है कि प्रक्रिया के दौरान कोई भी रिकॉर्ड छूट न जाए। संग्रहीत प्रक्रिया में निम्नलिखित घटक शामिल हैं:

  • केस-संवेदी पहचानकर्ताओं का उपयोग करने के लिए, सेट करें enable_case_sensitive_identifier सत्र, उपयोगकर्ता या क्लस्टर स्तर पर सत्य होना।
  • यदि ऑटो रीफ्रेश सक्षम नहीं है तो स्ट्रीमिंग भौतिक दृश्य को मैन्युअल रूप से रीफ्रेश करें।
  • नामक एक ऑडिट टेबल बनाएं Orders_Streaming_Audit यदि यह संग्रहीत प्रक्रिया के अंतिम रन के दौरान ऑर्डर तालिका में लोड किए गए विभाजन के लिए अंतिम ऑफसेट का ट्रैक रखने के लिए मौजूद नहीं है।
  • अननेस्ट करें और स्टेजिंग टेबल में केवल नया या परिवर्तित डेटा डालें जिसे कहा जाता है Orders_Staging_Table, स्ट्रीमिंग भौतिक दृश्य से पढ़ना Orders_Stream_MV, जहां Kafka_Offset अंतिम संसाधित से अधिक है Kafka_Offset लेखापरीक्षा तालिका में दर्ज किया गया Orders_Streaming_Audit के लिए Kafka_Partition संसाधित किया जा रहा है।
  • इस संग्रहीत प्रक्रिया का उपयोग करके पहली बार लोड करते समय, इसमें कोई डेटा नहीं होगा Orders_Streaming_Audit तालिका और सभी डेटा Orders_Stream_MV ऑर्डर तालिका में लोड हो जाएगा.
  • उपयोगकर्ता के सामने केवल व्यवसाय-प्रासंगिक कॉलम डालें Orders तालिका, स्टेजिंग तालिका से चयन Orders_Staging_Table.
  • अधिकतम डालें Kafka_Offset प्रत्येक लोड के लिए Kafka_Partition लेखापरीक्षा तालिका में Orders_Streaming_Audit

हमने मध्यवर्ती स्टेजिंग तालिका जोड़ दी है Orders_Staging_Table अप्रत्याशित विफलताओं और ट्रैकबिलिटी के मामले में डिबगिंग में सहायता के लिए इस समाधान में। स्टेजिंग चरण को छोड़कर सीधे अंतिम तालिका में लोड किया जा रहा है Orders_Stream_MV आपके उपयोग के मामले के आधार पर कम विलंबता प्रदान कर सकता है।

  1. निम्नलिखित कोड के साथ संग्रहीत प्रक्रिया बनाएँ:
    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. में डेटा लोड करने के लिए संग्रहीत प्रक्रिया चलाएँ Orders तालिका:
    call SP_Orders_Load();

  3. ऑर्डर तालिका में डेटा सत्यापित करें.

क्रॉस-अकाउंट स्ट्रीमिंग अंतर्ग्रहण स्थापित करें

यदि आपका MSK क्लस्टर किसी भिन्न खाते से संबंधित है, तो क्रॉस-अकाउंट स्ट्रीमिंग अंतर्ग्रहण सेट करने के लिए IAM भूमिकाएँ बनाने के लिए निम्नलिखित चरणों को पूरा करें। आइए मान लें कि रेडशिफ्ट क्लस्टर खाता ए में है और एमएसके क्लस्टर खाता बी में है, जैसा कि निम्नलिखित चित्र में दिखाया गया है।

निम्नलिखित चरणों को पूरा करें:

  1. खाता B में, एक IAM भूमिका बनाएं जिसे कहा जाता है MyRedshiftMSKRole जो Amazon Redshift (खाता A) को नामित MSK क्लस्टर (खाता B) के साथ संचार करने की अनुमति देता है MyTestCluster. इस पर निर्भर करते हुए कि आपका MSK क्लस्टर कनेक्ट करने के लिए IAM प्रमाणीकरण या अप्रमाणित पहुंच का उपयोग करता है, आपको निम्नलिखित नीतियों में से एक के साथ एक IAM भूमिका बनाने की आवश्यकता है:
    • एक आईएएम policAmazonAmazon MSK अप्रमाणित पहुँच का उपयोग कर रहा है:
      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Sid": "RedshiftMSKPolicy",
                  "Effect": "Allow",
                  "Action": [
                      "kafka:GetBootstrapBrokers"
                  ],
                  "Resource": "*"
              }
          ]
      }

    • IAM प्रमाणीकरण का उपयोग करते समय Amazon MSK के लिए 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": "*"
              }
          ]
      }
      

पिछले उदाहरण में संसाधन अनुभाग सभी विषयों तक पहुंच प्रदान करता है MyTestCluster एमएसके क्लस्टर. यदि आपको IAM भूमिका को विशिष्ट विषयों तक सीमित करने की आवश्यकता है, तो आपको विषय संसाधन को अधिक प्रतिबंधात्मक संसाधन नीति से बदलने की आवश्यकता है।

  1. खाता B में IAM भूमिका बनाने के बाद, IAM भूमिका ARN पर ध्यान दें (उदाहरण के लिए, arn:aws:iam::0123456789:role/MyRedshiftMSKRole).
  2. खाता A में, एक Redshift अनुकूलन योग्य IAM भूमिका बनाएं जिसे कहा जाता है MyRedshiftRole, कि Amazon MSK से कनेक्ट होने पर Amazon Redshift मान लेगा। भूमिका में निम्नलिखित जैसी नीति होनी चाहिए, जो खाता A में Amazon Redshift IAM भूमिका को खाता B में Amazon MSK भूमिका ग्रहण करने की अनुमति देती है:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "RedshiftMSKAssumePolicy",
                "Effect": "Allow",
                "Action": "sts:AssumeRole",
                "Resource": "arn:aws:iam::0123456789:role/MyRedshiftMSKRole"        
           }
        ]
    }
    

  3. Amazon Redshift IAM भूमिका के लिए ARN भूमिका पर ध्यान दें (उदाहरण के लिए, arn:aws:iam::9876543210:role/MyRedshiftRole).
  4. खाता बी पर वापस जाएं और इस भूमिका को आईएएम भूमिका की विश्वास नीति में जोड़ें arn:aws:iam::0123456789:role/MyRedshiftMSKRole खाता बी को खाता ए से आईएएम भूमिका पर भरोसा करने की अनुमति देने के लिए। ट्रस्ट नीति निम्नलिखित कोड की तरह दिखनी चाहिए:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "sts:AssumeRole",
          "Principal": {
            "AWS": "arn:aws:iam::9876543210:role/MyRedshiftRole"
          }
        }
      ]
    } 
    

  5. Amazon Redshift कंसोल में खाता A के रूप में साइन इन करें।
  6. क्वेरी संपादक v2 या अपना पसंदीदा SQL क्लाइंट लॉन्च करें और खाता B में MSK विषय तक पहुंचने के लिए निम्नलिखित कथन चलाएँ। MSK क्लस्टर पर मैप करने के लिए, एक बाहरी स्कीमा का उपयोग करें रोल चेनिंग IAM भूमिका ARN को निर्दिष्ट करके, इसके चारों ओर कोई रिक्त स्थान न रखते हुए अल्पविराम से अलग किया जाता है। रेडशिफ्ट क्लस्टर से जुड़ी भूमिका श्रृंखला में सबसे पहले आती है।
    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 
    

प्रदर्शन के विचार

निम्नलिखित प्रदर्शन संबंधी बातों को ध्यान में रखें:

  • स्ट्रीमिंग भौतिकीकृत दृश्य को सरल रखें और अननेस्टिंग, एकत्रीकरण और केस अभिव्यक्ति जैसे परिवर्तनों को बाद के चरण में ले जाएं - उदाहरण के लिए, स्ट्रीमिंग भौतिकीकृत दृश्य के शीर्ष पर एक और भौतिकीकृत दृश्य बनाकर।
  • किसी दिए गए MSK विषय के लिए एकल रेडशिफ्ट क्लस्टर या कार्यसमूह में केवल एक स्ट्रीमिंग भौतिक दृश्य बनाने पर विचार करें। प्रति एमएसके विषय पर कई भौतिक दृश्यों का निर्माण अंतर्ग्रहण प्रदर्शन को धीमा कर सकता है क्योंकि प्रत्येक भौतिक दृश्य उस विषय के लिए उपभोक्ता बन जाता है और उस विषय के लिए अमेज़ॅन एमएसके बैंडविड्थ साझा करता है। स्ट्रीमिंग भौतिक दृश्य में लाइव स्ट्रीमिंग डेटा को कई रेडशिफ्ट क्लस्टर या रेडशिफ्ट सर्वर रहित कार्यसमूहों में साझा किया जा सकता है डेटा साझा करना.
  • अपने स्ट्रीमिंग भौतिक दृश्य को परिभाषित करते समय, उपयोग करने से बचें Json_Extract_Path_Text डेटा को पूर्व-श्रेड करने के लिए, क्योंकि Json_extract_path_text पंक्ति दर पंक्ति डेटा पर काम करता है, जो अंतर्ग्रहण थ्रूपुट को महत्वपूर्ण रूप से प्रभावित करता है। डेटा को स्ट्रीम से वैसे ही लैंड करना और फिर बाद में उसे श्रेड करना बेहतर है।
  • जहां संभव हो, अंतर्ग्रहण गति को तेज करने के लिए स्ट्रीमिंग भौतिक दृश्य में सॉर्ट कुंजी को छोड़ने पर विचार करें। जब स्ट्रीमिंग भौतिक दृश्य में एक सॉर्ट कुंजी होती है, तो स्ट्रीम से अंतर्ग्रहण डेटा के प्रत्येक बैच के साथ एक सॉर्ट ऑपरेशन होगा। सॉर्टिंग में सॉर्ट कुंजी डेटा प्रकार, सॉर्ट कुंजी कॉलम की संख्या और प्रत्येक बैच में शामिल डेटा की मात्रा के आधार पर प्रदर्शन सुना जाता है। यह सॉर्टिंग चरण क्वेरी के लिए स्ट्रीमिंग डेटा उपलब्ध होने से पहले विलंबता को बढ़ा सकता है। आपको तौलना चाहिए कि क्या अधिक महत्वपूर्ण है: अंतर्ग्रहण पर विलंबता या डेटा क्वेरी करने पर विलंबता।
  • स्ट्रीमिंग भौतिक दृश्य के अनुकूलित प्रदर्शन के लिए और भंडारण उपयोग को कम करने के लिए, कभी-कभी भौतिक दृश्य का उपयोग करके डेटा को शुद्ध करें हटाना, काट-छांटया, तालिका परिशिष्ट बदलें.
  • यदि आपको अमेज़ॅन रेडशिफ्ट में समानांतर में कई एमएसके विषयों को शामिल करने की आवश्यकता है, तो कम संख्या में स्ट्रीमिंग भौतिक दृश्यों के साथ शुरुआत करें और क्लस्टर या कार्यसमूह के भीतर समग्र अंतर्ग्रहण प्रदर्शन का मूल्यांकन करने के लिए अधिक भौतिक दृश्यों को जोड़ना जारी रखें।
  • Redshift प्रावधानित क्लस्टर या Redshift सर्वर रहित कार्यसमूह के आधार RPU में नोड्स की संख्या बढ़ाने से स्ट्रीमिंग भौतिक दृश्य के अंतर्ग्रहण प्रदर्शन को बढ़ावा देने में मदद मिल सकती है। इष्टतम प्रदर्शन के लिए, आपको अपने Redshift प्रावधानित क्लस्टर में उतने ही स्लाइस रखने का लक्ष्य रखना चाहिए जितने आपके MSK विषय में विभाजन हैं, या आपके MSK विषय में प्रत्येक चार विभाजन के लिए 8 RPU हैं।

निगरानी तकनीक

विषय में ऐसे रिकॉर्ड जो अंतर्ग्रहण के समय लक्ष्य भौतिक दृश्य कॉलम के आकार से अधिक हो जाएंगे, उन्हें छोड़ दिया जाएगा। भौतिक दृश्य ताज़ा द्वारा छोड़े गए रिकॉर्ड लॉग इन किए जाएंगे SYS_STREAM_SCAN_त्रुटियाँ सिस्टम टेबल।

किसी गणना या डेटा प्रकार रूपांतरण या भौतिक दृश्य परिभाषा में किसी अन्य तर्क के कारण रिकॉर्ड को संसाधित करते समय होने वाली त्रुटियों के परिणामस्वरूप भौतिक दृश्य ताज़ा विफलता होगी जब तक कि आपत्तिजनक रिकॉर्ड विषय से समाप्त नहीं हो जाता। इस प्रकार के मुद्दों से बचने के लिए, अपनी भौतिक दृष्टिकोण परिभाषा के तर्क का सावधानीपूर्वक परीक्षण करें; अन्यथा, रिकॉर्ड को डिफ़ॉल्ट VARBYTE कॉलम में रखें और बाद में उन्हें संसाधित करें।

निम्नलिखित उपलब्ध निगरानी दृश्य हैं:

  • SYS_MV_REFRESH_HISTORY - अपने स्ट्रीमिंग भौतिक दृश्यों के ताज़ा इतिहास के बारे में जानकारी इकट्ठा करने के लिए इस दृश्य का उपयोग करें। परिणामों में रीफ्रेश प्रकार, जैसे मैनुअल या ऑटो, और सबसे हालिया रीफ्रेश की स्थिति शामिल है। निम्नलिखित क्वेरी स्ट्रीमिंग भौतिक दृश्य के लिए ताज़ा इतिहास दिखाती है:
    select mv_name, refresh_type, status, duration  from SYS_MV_REFRESH_HISTORY where mv_name='mv_store_sales'

  • SYS_STREAM_SCAN_त्रुटियाँ - MSK विषय से स्ट्रीमिंग अंतर्ग्रहण के माध्यम से रिकॉर्ड लोड होने में विफल होने के कारण की जांच करने के लिए इस दृश्य का उपयोग करें। इस पोस्ट को लिखने तक, अमेज़ॅन एमएसके से अंतर्ग्रहण करते समय, यह दृश्य केवल त्रुटियों को लॉग करता है जब रिकॉर्ड भौतिक दृश्य कॉलम आकार से बड़ा होता है। यह दृश्य स्थिति कॉलम में MSK रिकॉर्ड का विशिष्ट पहचानकर्ता (ऑफ़सेट) भी दिखाएगा। निम्न क्वेरी त्रुटि कोड और त्रुटि कारण दिखाती है जब कोई रिकॉर्ड अधिकतम आकार सीमा से अधिक हो जाता है:
    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_स्टेट्स - किसी दिए गए रिकॉर्ड_समय पर स्कैन किए गए रिकॉर्ड की संख्या की निगरानी के लिए इस दृश्य का उपयोग करें। यह दृश्य बैच में पढ़े गए अंतिम रिकॉर्ड के ऑफसेट को भी ट्रैक करता है। निम्नलिखित क्वेरी एक विशिष्ट भौतिक दृश्य के लिए विषय डेटा दिखाती है:
    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 - स्ट्रीमिंग मैटेरियलाइज्ड व्यू रिफ्रेश के लिए समग्र मेट्रिक्स की जांच करने के लिए इस दृश्य का उपयोग करें। यह उन त्रुटियों के लिए error_message कॉलम में त्रुटियों को भी लॉग करेगा जो दिखाई नहीं देती हैं SYS_STREAM_SCAN_त्रुटियाँ. निम्नलिखित क्वेरी उस त्रुटि को दर्शाती है जो स्ट्रीमिंग भौतिक दृश्य की ताज़ा विफलता का कारण बनती है:
    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

कार्यान्वयन के लिए अतिरिक्त विचार

आपके पास स्ट्रीमिंग भौतिक दृश्य के शीर्ष पर वैकल्पिक रूप से एक भौतिक दृश्य उत्पन्न करने का विकल्प है, जिससे आप अंतिम उपयोगकर्ताओं के लिए परिणामों को अननेस्ट और प्रीकंप्यूट कर सकते हैं। यह दृष्टिकोण संग्रहीत प्रक्रिया का उपयोग करके परिणामों को अंतिम तालिका में संग्रहीत करने की आवश्यकता को समाप्त करता है।

इस पोस्ट में, आप का उपयोग करें CAN_JSON_PARSE कार्य करता है डेटा को अधिक सफलतापूर्वक अंतर्ग्रहण करने के लिए किसी भी त्रुटि से बचाव के लिए - इस मामले में, स्ट्रीमिंग रिकॉर्ड जिन्हें पार्स नहीं किया जा सकता है, उन्हें अमेज़ॅन रेडशिफ्ट द्वारा छोड़ दिया जाता है। हालाँकि, यदि आप अपने त्रुटि रिकॉर्ड पर नज़र रखना चाहते हैं, तो स्ट्रीमिंग भौतिक दृश्य बनाते समय उन्हें निम्नलिखित SQL का उपयोग करके एक कॉलम में संग्रहीत करने पर विचार करें:

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";

आप भी विचार कर सकते हैं डेटा उतारना दृश्य से SYS_STREAM_SCAN_त्रुटियाँ एक में अमेज़न सरल भंडारण सेवा (अमेज़ॅन S3) बकेट और इसके द्वारा अलर्ट प्राप्त करें ईमेल के माध्यम से एक रिपोर्ट भेजना का उपयोग अमेज़न सरल अधिसूचना सेवा जब भी कोई नया S3 ऑब्जेक्ट बनाया जाता है तो (अमेज़ॅन एसएनएस) सूचनाएं।

अंत में, अपने डेटा ताज़ापन की आवश्यकता के आधार पर, आप इसका उपयोग कर सकते हैं अमेज़न EventBridge अपने डेटा वेयरहाउस में नौकरियों को शेड्यूल करने के लिए उपरोक्त कॉल करें SP_Orders_Load नियमित आधार पर संग्रहित प्रक्रिया। इवेंटब्रिज निश्चित अंतराल पर ऐसा करता है, और आपको एक तंत्र की आवश्यकता हो सकती है (उदाहरण के लिए, एक AWS स्टेप फ़ंक्शंस राज्य मशीन) यह निगरानी करने के लिए कि प्रक्रिया के लिए पिछली कॉल पूरी हो गई है या नहीं। अधिक जानकारी के लिए देखें एक अमेज़ॅन इवेंटब्रिज नियम बनाना जो एक शेड्यूल पर चलता है. आप भी उल्लेख कर सकते हैं एडब्ल्यूएस स्टेप फंक्शंस और अमेज़ॅन रेडशिफ्ट डेटा एपीआई का उपयोग करके ईएलटी प्रक्रिया के ऑर्केस्ट्रेशन में तेजी लाएं. एक अन्य विकल्प का उपयोग करना है अमेज़ॅन रेडशिफ्ट क्वेरी संपादक v2 रिफ्रेश शेड्यूल करने के लिए। विवरण के लिए, देखें क्वेरी संपादक v2 के साथ क्वेरी शेड्यूल करना.

निष्कर्ष

इस पोस्ट में, हमने अमेज़ॅन एमएसके के साथ अमेज़ॅन रेडशिफ्ट स्ट्रीमिंग इंजेसन का उपयोग करके वास्तविक समय विश्लेषण को लागू करने के सर्वोत्तम तरीकों पर चर्चा की। हमने आपको स्ट्रीमिंग अंतर्ग्रहण का उपयोग करके MSK विषय से Amazon Redshift में डेटा अंतर्ग्रहण करने के लिए एक उदाहरण पाइपलाइन दिखाया है। हमने काफ्का विभाजन और काफ्का ऑफसेट का उपयोग करके अमेज़ॅन रेडशिफ्ट में वृद्धिशील स्ट्रीमिंग डेटा लोड करने के लिए एक विश्वसनीय रणनीति भी दिखाई। इसके अतिरिक्त, हमने अमेज़ॅन एमएसके से अमेज़ॅन रेडशिफ्ट तक क्रॉस-अकाउंट स्ट्रीमिंग अंतर्ग्रहण को कॉन्फ़िगर करने के चरणों का प्रदर्शन किया और अनुकूलित अंतर्ग्रहण दर के लिए प्रदर्शन संबंधी विचारों पर चर्चा की। अंत में, हमने अमेज़ॅन रेडशिफ्ट स्ट्रीमिंग अंतर्ग्रहण में विफलताओं को ट्रैक करने के लिए निगरानी तकनीकों पर चर्चा की।

यदि आपके कोई प्रश्न हैं, तो उन्हें टिप्पणी अनुभाग में छोड़ें।


लेखक के बारे में

पौलोमी दासगुप्ता एडब्ल्यूएस के साथ एक वरिष्ठ विश्लेषिकी समाधान वास्तुकार है। वह ग्राहकों को उनकी व्यावसायिक समस्याओं को हल करने के लिए क्लाउड-आधारित एनालिटिक्स समाधान बनाने में मदद करने के बारे में भावुक है। काम के बाहर, वह यात्रा करना और अपने परिवार के साथ समय बिताना पसंद करती है।

एडेकुनल एडेडोटुन अमेज़ॅन रेडशिफ्ट सेवा के साथ एक वरिष्ठ डेटाबेस इंजीनियर हैं। वह प्रदर्शन ट्यूनिंग पर ध्यान केंद्रित करते हुए 6 वर्षों से एमपीपी डेटाबेस पर काम कर रहे हैं। वह नई और मौजूदा सेवा सुविधाओं के लिए विकास टीम को मार्गदर्शन भी प्रदान करता है।

स्पॉट_आईएमजी

नवीनतम खुफिया

स्पॉट_आईएमजी