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.

Hazırlıklar
-
Bir betik oluşturun.
Scripts sekmesinde veritabanları ve tablolar içeren bir katalog oluşturabilir ve tablolara örnek veriler ekleyebilirsiniz.
-
Bir Paimon kataloğu oluşturun.
-
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
paimonolarak ayarlayın.metastore
Meta store türü.
Evet
Bu öğreticide değeri
filesystemolarak 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
warehousetarafı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
warehousetarafı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
-
-
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
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.
-
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');NotBu öğ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.
-
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_countdeğeri 7'dir. orders_pay tablosu içinpay_countdeğeri 7'dir. product_catalog tablosu,product_iddeğeri 1'den 5'e kadar olan vecatalog_namedeğ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'
);
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
-
DWD dağıtımını oluşturun ve dağıtın.
-
DWD tablosu güncelleme dağıtımını oluşturun.
sayfasında
dwd_ordersadı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 birINSERT OVERWRITEdeyimi 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 Sayfanın sağ üst köşesinde Deploy seçeneğine tıklayın ve ardından
dwd_ordersdağıtımını dağıtmak için OK seçeneğine tıklayın.
-
-
DWS dağıtımlarını oluşturun ve dağıtın.
-
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_shopsvedws_usersadları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'); Sayfanın sağ üst köşesinde Deploy seçeneğine tıklayın ve ardından
dws_shopsvedws_usersdağı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.
-
sayfasına gidin. Açılır listeden BATCH seçeneğini belirleyin.
dwd_ordersdağı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.
-
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.

-
-
DWS dağıtımlarını başlatın ve verilerini görüntüleyin.
sayfasında açılır listeden BATCH seçeneğini belirleyin.
dws_shopsvedws_usersdağıtımlarını bulun ve her biri için Actions sütunundaki Start seçeneğine tıklayın.-
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.

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.
-
Bir iş akışı oluşturun.
Sol gezinme bölmesinde seçeneğini belirleyin ve ardından Create Workflow seçeneğine tıklayın.
Görüntülenen panelde ad olarak
wf_ordersgirin. Zamanlama türünü varsayılan (Manual Scheduling) olarak bırakın, Resource Queue içindefault-queueseçeneğini belirleyin ve iş akışı düzenleyicisini açmak için Create seçeneğine tıklayın.-
İş akışını düzenleyin.
Başlangıç düğümüne tıklayın, adını
v_dwd_ordersolarak değiştirin ve bunun içindwd_ordersdağıtımını seçin.v_dws_shopsadlı bir düğüm oluşturmak için Add Task seçeneğine tıklayın. Bunun içindws_shopsdağıtımını seçin vev_dwd_ordersöğesini yukarı akış düğümü olarak ayarlayın.v_dws_usersadlı bir düğüm oluşturmak için tekrar Add Task seçeneğine tıklayın. Bunun içindws_usersdağıtımını seçin vev_dwd_ordersöğesini yukarı akış düğümü olarak ayarlayın.Sağ üst köşede Save ve ardından OK seçeneğine tıklayın.
-
İş 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).
-
İş 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.
-
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.
-
-
İş akışı yürütme sonuçlarını görüntüleyin.
-
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`; -
İş 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.

-
İlgili belgeler
Flink toplu işlemenin ilkeleri ve yapılandırma ayarlarının incelenmesi hakkında daha fazla bilgi edinmek için bkz. Flink toplu işleme ayar kılavuzu.
Flink ve Paimon kullanarak bir akış veri gölü evi oluşturmak için bkz. Paimon ve StarRocks ile akış veri gölü evi oluşturma.
Realtime Compute for Apache Flink konsolu nda Flink işleri geliştirmenin yanı sıra bu işleri yerel olarak da geliştirebilirsiniz. Daha fazla bilgi için bkz. VS Code uzantısı ile geliştirme.