Tüm Ürünler
Search
Belge Merkezi

Realtime Compute for Apache Flink:Flink toplu işleme

Son Güncelleme:Oct 04, 2026

Bu öğretici, Realtime Compute for Apache Flink'ın toplu işleme için sunduğu temel özelliklerin nasıl kullanılacağını gösteren somut bir örnek sunar.

Özellikler

Realtime Compute for Apache Flink, Flink toplu işlemeyi desteklemek için aşağıdaki temel özellikleri sağlar:

  • İş geliştirme haritası: SQL Editor sayfasının Drafts sekmesinde bir toplu iş taslağı oluşturabilir ve bunu daha sonra toplu dağıtım olarak dağıtıp çalıştırabilirsiniz.

  • Dağıtım yönetimi: Deployments sayfasında JAR veya Python toplu dağıtımlarını doğrudan dağıtabilirsiniz. Dağıtılan toplu dağıtımları görüntülemek için üstteki açılır listeden BATCH seçeneğini belirleyin. Hedef toplu dağıtımı genişleterek iş örneklerinin listesini görüntüleyebilirsiniz. Genellikle bir toplu dağıtımın farklı iş örnekleri aynı işleme mantığını paylaşır ancak işlenen verilerin tarihi gibi farklı parametreler kullanır.

  • Veri sorgulama: SQL Editor sayfasının Scripts sekmesinde hızlı veri yönetimi ve keşfi için DDL deyimlerini veya kısa sorguları çalıştırabilirsiniz. Bu kısa sorgular, önceden oluşturulmuş bir Flink oturumunda çalışır ve kaynakları yeniden kullanarak basit sorguların düşük gecikme süresiyle yürütülmesini sağlar.

  • Veri yönetimi: Catalogs sayfasında katalogları ve bunların içerdiği veritabanları ile tabloları oluşturup görüntüleyebilirsiniz. Geliştirme verimliliğini artırmak için bu öğeleri SQL Editor sayfasının Catalogs sekmesinde de görüntüleyebilirsiniz.

  • Görev orkestrasyonu (Genel Önizleme): Workflows sayfasında, toplu dağıtımlar arasındaki bağımlılıkları orkestre eden bir iş akışını görsel bir arayüz aracılığıyla tanımlayabilirsiniz. İş akışını manuel olarak tetikleyebilir veya periyodik olarak çalışacak şekilde zamanlayabilirsiniz.

  • Kaynak kuyruklarını yönetin: Kuyruk Yönetimi sayfasında, bir çalışma alanındaki kaynakları bölümlere ayırarak akış ve toplu dağıtımlar ile farklı önceliklere sahip dağıtımlar arasında kaynak çekişmesini önleyebilirsiniz.

Önkoşullar

  • Bir Realtime Compute for Apache Flink çalışma alanı oluşturdunuz. Daha fazla bilgi için bkz. Realtime Compute for Apache Flink'ı etkinleştirin.

  • Object Storage Service (OSS) hizmetini etkinleştirdiniz. Daha fazla bilgi için bkz. Konsol hızlı başlangıcı. OSS paketinin depolama sınıfı Standart olmalıdır. Daha fazla bilgi için bkz. Depolama sınıfları.

  • Bu öğreticide verileri depolamak için Apache Paimon kullanılır ve Ververica Runtime (VVR) 8.0.5 veya sonraki bir sürüm gereklidir.

Örnek senaryo

Bu öğreticide, verilerin Apache Paimon lakehouse formatında depolandığı bir e-ticaret platformu örnek alınır. Operasyonel Veri Deposu (ODS), Veri Ambarı Detayı (DWD) ve Veri Ambarı Servisi (DWS) olmak üzere çok katmanlı bir veri ambarı yapısı simüle edilir. Katmanlı bir veri yapısı oluşturmak amacıyla verileri Paimon tablolarına yazmadan önce işlemek ve temizlemek için Flink'in toplu işleme yeteneklerini kullanacaksınız.

image

Hazırlıklar

  1. Bir betik oluşturun.

    Scripts sekmesinde veritabanları ve tablolar içeren bir katalog oluşturabilir ve tablolara örnek veriler ekleyebilirsiniz.

  2. Bir Paimon kataloğu oluşturun.

    1. Scripts sekmesindeki düzenleyicide aşağıdaki SQL deyimini girin.

      CREATE CATALOG `my_catalog` WITH (
        'type' = 'paimon',
        'metastore' = 'filesystem',
        'warehouse' = '<warehouse>',
        'fs.oss.endpoint' = '<fs.oss.endpoint>',
        'fs.oss.accessKeyId' = '<fs.oss.accessKeyId>',
        'fs.oss.accessKeySecret' = '<fs.oss.accessKeySecret>'
      );

      Aşağıdaki tabloda parametreler açıklanmıştır.

      Parametre

      Açıklama

      Gerekli

      Açıklamalar

      type

      Katalog türü.

      Evet

      Değeri paimon olarak ayarlayın.

      metastore

      Meta store türü.

      Evet

      Bu öğreticide değeri filesystem olarak ayarlayın. Diğer türler hakkında daha fazla bilgi için bkz. Paimon Kataloglarını Yönetme.

      warehouse

      Object Storage Service (OSS) içindeki veri ambarı dizini.

      Evet

      Format oss://<bucket>/<object> şeklindedir. Burada:

      • bucket: OSS paketinizin adı.

      • object: verilerinizin depolandığı yol.

      Paket ve nesne yolunu OSS konsolunda bulabilirsiniz.

      fs.oss.endpoint

      Object Storage Service (OSS) uç noktası.

      Hayır

      warehouse tarafından belirtilen OSS paketi Flink çalışma alanınızdan farklı bir bölgedeyse veya farklı bir Alibaba Cloud hesabına aitse gereklidir.

      Daha fazla bilgi için bkz. Bölgeler ve uç noktalar.

      fs.oss.accessKeyId

      OSS paketi üzerinde okuma ve yazma izinlerine sahip bir Alibaba Cloud hesabının veya RAM kullanıcısının AccessKey ID'si.

      Hayır

      warehouse tarafından belirtilen OSS paketi Flink çalışma alanınızdan farklı bir bölgedeyse veya farklı bir Alibaba Cloud hesabına aitse gereklidir. Bir AccessKey çiftini nasıl alacağınız hakkında bilgi için bkz. AccessKey çifti oluşturma.

      fs.oss.accessKeySecret

      AccessKey ID'ye karşılık gelen AccessKey secret.

      Hayır

    2. Kodu seçin ve soldaki Run seçeneğine tıklayın.

      The following statement has been executed successfully! mesajı, kataloğun başarıyla oluşturulduğunu gösterir. Artık kataloğu Catalogs sayfasında veya SQL Editor sayfasının Catalogs sekmesinde görüntüleyebilirsiniz.

Yordam

Adım 1: ODS tabloları oluşturun ve test verilerini ekleyin

Not

Bu öğreticiyi basitleştirmek için sonraki DWD ve DWS tablolarını doldurmak amacıyla test verilerini doğrudan ODS tablolarına ekliyoruz. Üretim ortamında genellikle verileri dış kaynaklardan okuyup veri gölüne ODS katmanı olarak yazmak için Flink akış işlemeyi kullanırsınız. Daha fazla bilgi için bkz. Paimon ile çalışmaya başlayın: Temel özellikler.

  1. Scripts sekmesindeki düzenleyicide aşağıdaki SQL deyimlerini girin ve soldaki Run seçeneğine tıklayın.

    CREATE DATABASE `my_catalog`.`order_dw`;
    
    USE `my_catalog`.`order_dw`;
    
    CREATE TABLE orders (
      order_id BIGINT,
      user_id STRING,
      shop_id BIGINT,
      product_id BIGINT,
      buy_fee BIGINT,   
      create_time TIMESTAMP,
      update_time TIMESTAMP,
      state INT
    );
    
    CREATE TABLE orders_pay (
      pay_id BIGINT,
      order_id BIGINT,
      pay_platform INT, 
      create_time TIMESTAMP
    );
    
    CREATE TABLE product_catalog (
      product_id BIGINT,
      catalog_name STRING
    );
    
    -- Insert test data
    
    INSERT INTO orders VALUES
    (100001, 'user_001', 12345, 1, 5000, TO_TIMESTAMP('2023-02-15 16:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1),
    (100002, 'user_002', 12346, 2, 4000, TO_TIMESTAMP('2023-02-15 15:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1),
    (100003, 'user_003', 12347, 3, 3000, TO_TIMESTAMP('2023-02-15 14:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1),
    (100004, 'user_001', 12347, 4, 2000, TO_TIMESTAMP('2023-02-15 13:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1),
    (100005, 'user_002', 12348, 5, 1000, TO_TIMESTAMP('2023-02-15 12:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1),
    (100006, 'user_001', 12348, 1, 1000, TO_TIMESTAMP('2023-02-15 11:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1),
    (100007, 'user_003', 12347, 4, 2000, TO_TIMESTAMP('2023-02-15 10:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1);
    
    INSERT INTO orders_pay VALUES
    (2001, 100001, 1, TO_TIMESTAMP('2023-02-15 17:40:56')),
    (2002, 100002, 1, TO_TIMESTAMP('2023-02-15 17:40:56')),
    (2003, 100003, 0, TO_TIMESTAMP('2023-02-15 17:40:56')),
    (2004, 100004, 0, TO_TIMESTAMP('2023-02-15 17:40:56')),
    (2005, 100005, 0, TO_TIMESTAMP('2023-02-15 18:40:56')),
    (2006, 100006, 0, TO_TIMESTAMP('2023-02-15 18:40:56')),
    (2007, 100007, 0, TO_TIMESTAMP('2023-02-15 18:40:56'));
    
    INSERT INTO product_catalog VALUES
      (1, 'phone_aaa'),
      (2, 'phone_bbb'),
      (3, 'phone_ccc'),
      (4, 'phone_ddd'),
      (5, 'phone_eee');
    Not

    Bu öğreticide oluşturulan tablolar, birincil anahtarı olmayan Paimon ekleme yalnızca (append-only) tablolarıdır. Birincil anahtarlı tablolara göre daha iyi toplu yazma performansı sunarlar ancak anahtar tabanlı güncelleme işlemlerini desteklemezler.

    Çalıştırma sonucu birden fazla alt sekme içerecektir ve The following statement has been executed successfully! mesajı, ilgili DDL deyiminin başarıyla yürütüldüğünü gösterir.

    INSERT gibi DML deyimleri, bir Flink işinin Flink oturumunda çalıştığını belirten bir JobId döndürür. Bu SQL deyimlerinin yürütme durumunu görüntülemek için Results sekmesinin solundaki Flink UI seçeneğine tıklayın. Tamamlanmaları için birkaç saniye bekleyin.

  2. ODS tablo verilerini inceleyin.

    Scripts sekmesindeki düzenleyicide aşağıdaki SQL deyimlerini girin ve soldaki Run seçeneğine tıklayın.

    SELECT count(*) as order_count FROM `my_catalog`.`order_dw`.`orders`;
    SELECT count(*) as pay_count FROM `my_catalog`.`order_dw`.`orders_pay`;
    SELECT * FROM `my_catalog`.`order_dw`.`product_catalog`;

    Bu SQL deyimleri de Flink oturumunda çalışır. Sonuçları ilgili sonuç sayfalarında görüntüleyebilirsiniz.

    orders tablosu için order_count değeri 7'dir. orders_pay tablosu için pay_count değeri 7'dir. product_catalog tablosu, product_id değeri 1'den 5'e kadar olan ve catalog_name değerleri sırasıyla phone_aaa, phone_bbb, phone_ccc, phone_ddd ve phone_eee olan 5 kayıt içerir.

Adım 2: DWD ve DWS tabloları oluşturun

Scripts sekmesindeki düzenleyicide aşağıdaki SQL deyimlerini girin ve soldaki Run seçeneğine tıklayın.

USE `my_catalog`.`order_dw`;

CREATE TABLE dwd_orders (
    order_id BIGINT,
    order_user_id STRING,
    order_shop_id BIGINT,
    order_product_id BIGINT,
    order_product_catalog_name STRING,
    order_fee BIGINT,
    order_create_time TIMESTAMP,
    order_update_time TIMESTAMP,
    order_state INT,
    pay_id BIGINT,
    pay_platform INT COMMENT 'platform 0: phone, 1: pc',
    pay_create_time TIMESTAMP
) WITH (
    'sink.parallelism' = '2'
);

CREATE TABLE dws_users (
    user_id STRING,
    ds STRING,
    total_fee BIGINT COMMENT 'Total amount paid on the current day'
) WITH (
    'sink.parallelism' = '2'
);

CREATE TABLE dws_shops (
    shop_id BIGINT,
    ds STRING,
    total_fee BIGINT COMMENT 'Total amount paid on the current day'
) WITH (
    'sink.parallelism' = '2'
);
Not

Burada oluşturulan tablolar da Paimon ekleme yalnızca (append-only) tablolarıdır. Bir Paimon tablosu Flink sink olarak kullanıldığında, Flink paralellği otomatik olarak çıkarmaz. Olası hataları önlemek için paralellği açıkça ayarlamanız gerekir.

Adım 3: DWD ve DWS dağıtımlarını oluşturun ve dağıtın

  1. DWD dağıtımını oluşturun ve dağıtın.

    1. DWD tablosu güncelleme dağıtımını oluşturun.

      Development > ETL sayfasında dwd_orders adında bir blank batch draft oluşturun. Önerilen etikete sahip bir motor sürümü seçmeniz önerilir. Varsayılan Flink SQL lehçesini kullanın. Aşağıdaki SQL deyimini düzenleyiciye kopyalayın. DWD tablosu bir Paimon ekleme yalnızca (append-only) tablosu olduğundan, tablonun tamamını üzerine yazmak için bir INSERT OVERWRITE deyimi kullanın.

      INSERT OVERWRITE my_catalog.order_dw.dwd_orders
      SELECT 
          o.order_id,
          o.user_id,
          o.shop_id,
          o.product_id,
          c.catalog_name,
          o.buy_fee,
          o.create_time,
          o.update_time,
          o.state,
          p.pay_id,
          p.pay_platform,
          p.create_time
      FROM 
          my_catalog.order_dw.orders as o, 
          my_catalog.order_dw.product_catalog as c, 
          my_catalog.order_dw.orders_pay as p
      WHERE o.product_id = c.product_id AND o.order_id = p.order_id
    2. Sayfanın sağ üst köşesinde Deploy seçeneğine tıklayın ve ardından dwd_orders dağıtımını dağıtmak için OK seçeneğine tıklayın.

  2. DWS dağıtımlarını oluşturun ve dağıtın.

    1. DWS tablosu güncelleme dağıtımlarını oluşturun.

      DWD tablosu güncelleme dağıtımını oluşturma adımlarını izleyerek dws_shops ve dws_users adlarında iki toplu iş taslağı oluşturun. Aşağıdaki SQL deyimlerini ilgili düzenleyicilere kopyalayın.

      INSERT OVERWRITE my_catalog.order_dw.dws_shops
      SELECT 
          order_shop_id,
          DATE_FORMAT(pay_create_time, 'yyyyMMdd') as ds,
          SUM(order_fee) as total_fee
      FROM my_catalog.order_dw.dwd_orders
      WHERE pay_id IS NOT NULL AND order_fee IS NOT NULL
      GROUP BY order_shop_id, DATE_FORMAT(pay_create_time, 'yyyyMMdd');
      INSERT OVERWRITE my_catalog.order_dw.dws_users
      SELECT 
          order_user_id,
          DATE_FORMAT(pay_create_time, 'yyyyMMdd') as ds,
          SUM(order_fee) as total_fee
      FROM my_catalog.order_dw.dwd_orders
      WHERE pay_id IS NOT NULL AND order_fee IS NOT NULL
      GROUP BY order_user_id, DATE_FORMAT(pay_create_time, 'yyyyMMdd');
    2. Sayfanın sağ üst köşesinde Deploy seçeneğine tıklayın ve ardından dws_shops ve dws_users dağıtımlarını dağıtmak için OK seçeneğine tıklayın.

Adım 4: DWD ve DWS dağıtımlarını başlatın ve görüntüleyin

  • DWD dağıtımını başlatın ve verilerini görüntüleyin.

    1. O&M > Deployments sayfasına gidin. Açılır listeden BATCH seçeneğini belirleyin. dwd_orders dağıtımını bulun ve Actions sütunundaki Start seçeneğine tıklayın.

      Toplu iş örnekleri listesinde STARTING durumunda bir iş örneği görünür.

      İş örneğinin durumu FINISHED olarak değiştiğinde veri işleme tamamlanmış demektir.

    2. Veri sonuçlarını inceleyin.

      Scripts sekmesindeki düzenleyicide aşağıdaki SQL deyimini girin ve DWD tablosundaki verileri sorgulamak için soldaki Run seçeneğine tıklayın.

      SELECT * FROM `my_catalog`.`order_dw`.`dwd_orders`;

      Sonuç aşağıdaki şekilde gösterilmiştir.

      image

  • DWS dağıtımlarını başlatın ve verilerini görüntüleyin.

    1. O&M > Deployments sayfasında açılır listeden BATCH seçeneğini belirleyin. dws_shops ve dws_users dağıtımlarını bulun ve her biri için Actions sütunundaki Start seçeneğine tıklayın.

    2. Scripts sekmesindeki düzenleyicide aşağıdaki SQL deyimlerini girin ve DWS tablolarındaki verileri sorgulamak için soldaki Run seçeneğine tıklayın.

      SELECT * FROM `my_catalog`.`order_dw`.`dws_shops`;
      SELECT * FROM `my_catalog`.`order_dw`.`dws_users`;

      Sonuçlar aşağıdaki şekillerde gösterilmiştir.

      image.png image.png

Adım 5: Görev orkestrasyonu ile bir toplu iş hattı oluşturun

Bu adımda dağıtımları bir iş akışında orkestre edeceksiniz. Bu sayede dağıtımlar birlikte tetiklenebilir ve sırayla çalıştırılabilir.

  1. Bir iş akışı oluşturun.

    1. Sol gezinme bölmesinde O&M > Workflows seçeneğini belirleyin ve ardından Create Workflow seçeneğine tıklayın.

    2. Görüntülenen panelde ad olarak wf_orders girin. Zamanlama türünü varsayılan (Manual Scheduling) olarak bırakın, Resource Queue için default-queue seçeneğini belirleyin ve iş akışı düzenleyicisini açmak için Create seçeneğine tıklayın.

    3. İş akışını düzenleyin.

      1. Başlangıç düğümüne tıklayın, adını v_dwd_orders olarak değiştirin ve bunun için dwd_orders dağıtımını seçin.

      2. v_dws_shops adlı bir düğüm oluşturmak için Add Task seçeneğine tıklayın. Bunun için dws_shops dağıtımını seçin ve v_dwd_orders öğesini yukarı akış düğümü olarak ayarlayın.

      3. v_dws_users adlı bir düğüm oluşturmak için tekrar Add Task seçeneğine tıklayın. Bunun için dws_users dağıtımını seçin ve v_dwd_orders öğesini yukarı akış düğümü olarak ayarlayın.

      4. Sağ üst köşede Save ve ardından OK seçeneğine tıklayın.

  2. İş akışını manuel olarak tetikleyin.

    Not

    İş akışını periyodik bir zamanlamaya göre çalışacak şekilde de değiştirebilirsiniz. Workflows sayfasında iş akışının sağındaki Edit Workflow seçeneğine tıklayın ve zamanlama modunu Periodic Scheduling olarak değiştirin. Daha fazla bilgi için bkz. Görev orkestrasyonu (Genel Önizleme).

    1. İş akışını tetiklemeden önce iş akışının yürütme sonuçlarını doğrulamak için ODS tablolarına yeni veriler ekleyin.

      Scripts sekmesindeki düzenleyicide aşağıdaki SQL deyimlerini girin ve soldaki Run seçeneğine tıklayın.

      USE `my_catalog`.`order_dw`;
      
      INSERT INTO orders VALUES
      (100008, 'user_001', 12346, 1, 10000, TO_TIMESTAMP('2023-02-15 17:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1),
      (100009, 'user_002', 12347, 2, 20000, TO_TIMESTAMP('2023-02-15 18:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1),
      (100010, 'user_003', 12348, 3, 30000, TO_TIMESTAMP('2023-02-15 19:40:56'), TO_TIMESTAMP('2023-02-15 18:42:56'), 1);
      
      INSERT INTO orders_pay VALUES
      (2008, 100008, 1, TO_TIMESTAMP('2023-02-15 20:40:56')),
      (2009, 100009, 1, TO_TIMESTAMP('2023-02-15 20:40:56')),
      (2010, 100010, 1, TO_TIMESTAMP('2023-02-15 20:40:56'));

      İş durumunu izlemek için Results sekmesinin solundaki Flink UI seçeneğine tıklayın.

    2. O&M > Workflows sayfasında önceki adımda oluşturulan iş akışını bulun, Actions sütunundaki Execute seçeneğine tıklayın ve iş akışını tetiklemek için OK seçeneğine tıklayın.

      İş akışı örnek listesini görüntüleyebileceğiniz Overview sayfasına gitmek için iş akışı adına tıklayın.

      Çalışan iş akışı örneğinin ID değerine tıklayarak yürütme ayrıntıları sayfasına gidin ve her düğümün durumunu gözlemleyin. Tüm iş akışının tamamlanmasını bekleyin.

  3. İş akışı yürütme sonuçlarını görüntüleyin.

    1. Scripts sekmesindeki düzenleyicide aşağıdaki SQL deyimlerini girin ve soldaki Run seçeneğine tıklayın.

      SELECT * FROM `my_catalog`.`order_dw`.`dws_shops`;
      SELECT * FROM `my_catalog`.`order_dw`.`dws_users`;
    2. İş akışının yürütme sonuçlarını görüntüleyin.

      İş akışının ODS katmanından gelen yeni verileri işlediğini ve bunları DWS tablolarına yazdığını görebilirsiniz.

      image.png image.png

İlgili belgeler