Bu konu, Realtime Compute for Apache Flink kullanarak Hologres binlog verilerinin gerçek zamanlı olarak nasıl tüketileceğini açıklar.
Kullanım notları
Hologres binlog verilerini tüketmeden önce aşağıdaki hususlara dikkat edin:
Binlog verilerini yalnızca Hologres V0.9 veya sonraki sürümlerinden tüketebilirsiniz. Motor izin listesini yalnızca Hologres V1.3.21 veya sonraki sürümleri için yapılandırabilirsiniz. Hologres V1.3.21'den önceki bir sürümü çalıştıran bir örnekte izin listesi etkinleştirirseniz binlog tüketimi başarısız olur. Örneğinizin sürümü gerekli olandan düşükse yardım almak için Hologres için çevrimiçi destek alın.
Hologres, satır yönelimli ve sütun yönelimli tablolar için tablo düzeyinde binlog özelliğini destekler. Hologres V1.1 sürümünden itibaren satır-sütun hibrit depolama tabloları da desteklenmektedir. Binlog özelliğini etkinleştirdikten sonra sütun yönelimli tabloların teorik olarak satır yönelimli tablolara göre daha yüksek ek yükü vardır. Bu nedenle sık veri güncellemelerinin olduğu senaryolar için binlog özelliğini satır yönelimli tablolarda etkinleştirmenizi öneririz.
Binlog desteği ve bu özelliğin nasıl etkinleştirilip yapılandırılacağı hakkında daha fazla bilgi için Hologres binloglarına abone olun konusuna bakın.
Hologres binlog verilerini tüketmeyi yalnızca Alibaba Cloud tarafından sağlanan Realtime Compute for Apache Flink destekler. HoloHub modunda Flink ile Hologres binlog verilerinin tüketilmesi yalnızca basit veri türlerini destekler. Flink VVR 6.0.3 sürümünden itibaren JDBC modunda Hologres binlog verilerini tüketebilirsiniz. JDBC modu HoloHub moduna kıyasla daha fazla veri türünü destekler. Daha fazla bilgi için Blink/Flink ve Hologres arasındaki veri türü eşlemeleri konusuna bakın. Bu mod ek izinler gerektirir. Ayrıntılar için İzinler bölümüne bakın.
Üst bölümlenmiş bir tablodan binlog verilerini tüketemezsiniz.
Hologres V2.0, HoloHub modunu sınırlı şekilde destekler. V2.1 sürümünden itibaren HoloHub modu kullanımdan kaldırılmış ve tamamen JDBC modu ile değiştirilmiştir. Hologres örneğinizi yükseltmeden önce mevcut HoloHub modunu kullanan Flink işlerinizi kontrol etmek, Flink VVR işlerinizi buna göre yükseltmek ve ardından Hologres örneğinizi yükseltmek için HoloHub modundan JDBC moduna geçiş yapın bölümüne bakın.
İzinler
HoloHub modunun aksine JDBC modu Realtime Compute for Apache Flink kullanarak Hologres binlog verilerini tüketirken özel Hologres hesaplarını destekler.
HoloHub modunda Hologres binlog verilerini tüketmek için Flink işinizin tabloda okuma ve yazma izinlerine sahip olması gerekir.
-
JDBC modunda Hologres binlog verilerini tüketmek için aşağıdaki ön koşullar geçerlidir. Daha fazla bilgi için JDBC kullanarak binlog verilerini tüketin konusuna bakın.
hg_binloguzantısı oluşturulmuştur. Bu uzantı Hologres V2.0 ve sonraki sürümlerde varsayılan olarak oluşturulur.Kullanıcı örneğin süper kullanıcısıdır veya hedef tabloda sahip izinlerine ve örnek için çoğaltma rolü izinlerine sahiptir.
Flink ile binlog verilerini tüketin
VVR 2.4 veya sonraki sürümlerini kullanan Realtime Compute for Apache Flink Hologres Connector kullanarak binlog verilerinin gerçek zamanlı tüketimini destekler. Aşağıdaki bölümlerde bu özelliğin nasıl kullanılacağı açıklanmaktadır.
CDC olmayan modda kaynak tablo DDL'si
Bu modda Kaynak tarafından tüketilen binlog verileri aşağı akış düğümlere normal Flink verisi olarak iletilir. Bu durum tüm verilerin Insert türünde veri olarak ele alındığı anlamına gelir ve iş gereksinimlerinize bağlı olarak belirli bir hg_binlog_event_type türündeki verileri nasıl işleyeceğinizi seçebilirsiniz. Bir Hologres tablosu için binlog etkinleştirildikten sonra Flink'te binlog'u gerçek zamanlı olarak tüketmek üzere aşağıdaki DDL'yi (CDC olmayan modda) bir kaynak tablo için kullanabilirsiniz.
create table test_message_src_binlog_table(
hg_binlog_lsn BIGINT,
hg_binlog_event_type BIGINT,
hg_binlog_timestamp_us BIGINT,
id INTEGER,
title VARCHAR,
body VARCHAR
) with (
'connector'='hologres',
'dbname'='<yourDbname>',
'tablename'='<yourTablename>',
'username'='<yourAccessID>',
'password'='<yourAccessSecret>',
'endpoint'='<yourEndpoint>',
'binlog' = 'true',
'binlogMaxRetryTimes' = '10',
'binlogRetryIntervalMs' = '500',
'binlogBatchReadSize' = '100'
);
Üç
binlogxxxparametresi binlog sistem alanlarıdır. Adları ve türleri sabittir ve değiştirilemez.Diğer alanlar kullanıcı tanımlı alanlarınıza karşılık gelir ve tamamı küçük harfle yazılmalıdır.
CDC modunda kaynak tablo DDL'si
Bu modda Kaynak binlog verilerini tüketir ve her satır için hg_binlog_event_type değerine göre doğru Flink RowKind türünü (INSERT, DELETE, UPDATE_BEFORE veya UPDATE_AFTER) otomatik olarak ayarlar. Bu sayede MySQL ve PostgreSQL'deki CDC özelliğine benzer şekilde tablo verilerinin yansıtmalı senkronizasyonu sağlanır.
CDC modundaki Hologres binlog kaynak tabloları şu anda watermark tanımlamalarını desteklememektedir. Pencere toplama işlemi gerçekleştirmeniz gerekiyorsa pencere dışı bir yaklaşım kullanabilirsiniz. Daha fazla bilgi için CDC kaynak tabloları pencere işlevlerini desteklemediğinde dakika düzeyinde toplamayı nasıl uygulayabilirim? konusuna bakın.
Bir Hologres tablosu için binlog özelliğini etkinleştirdikten sonra CDC modunda binlog verilerini gerçek zamanlı olarak tüketmek üzere bir kaynak tablo oluşturmak için Flink'te aşağıdaki DDL'yi kullanabilirsiniz.
create table test_message_src_binlog_table(
id INTEGER,
title VARCHAR,
body VARCHAR
) with (
'connector'='hologres',
'dbname'='<yourDbname>',
'tablename'='<yourTablename>',
'username'='<yourAccessID>',
'password'='<yourAccessSecret>',
'endpoint'='<yourEndpoint>',
'binlog' = 'true',
'cdcMode' = 'true',
'binlogMaxRetryTimes' = '10',
'binlogRetryIntervalMs' = '500',
'binlogBatchReadSize' = '100'
);
Tam ve artımlı veriler için kaynak tablo
VVR engine 1.13-vvr-4.0.13 ve Hologres V0.10 sürümlerinden itibaren Hologres binlog CDC kaynak tablosu tam ve artımlı verilerin entegre tüketimini destekler. Bu yöntem önce veritabanından geçmiş tam verileri okur ve ardından binlog'dan artımlı verileri okumaya sorunsuz bir şekilde geçer. Daha fazla bilgi için Hologres gerçek zamanlı veri ambarı konusuna bakın.
JDBC modunda binlog kaynak tablosu
Flink VVR 6.0.3 sürümünden itibaren Hologres binlog verilerini JDBC modunda tüketebilirsiniz. JDBC modu HoloHub moduna kıyasla daha fazla veri türünü ve özel hesapları destekler. JDBC modunun nasıl kullanılacağı hakkında daha fazla bilgi için Hologres gerçek zamanlı veri ambarı konusuna bakın.
HoloHub modundan JDBC moduna geçiş yapın
Hologres V2.0 sürümünde HoloHub modunu aşamalı olarak kaldırmaya başlamıştır. Hologres örneğinizi yükseltmeniz gerekiyorsa işlerinizi aşağıda açıklandığı gibi HoloHub modundan JDBC moduna geçirmeniz gerekir.
V2.1'e yükseltin
Hologres örneğinizi V2.1 sürümüne yükseltmeden önce işlerin beklendiği gibi çalıştığından emin olmak için Flink işlerinizi ve Hologres örneğinizi kontrol etmek üzere aşağıdaki çözümlerden birini seçin.
-
(Çözüm 1) (Önerilir) Flink VVR sürümünüzü 8.0.7 veya sonraki bir sürüme yükseltin. Flink otomatik olarak HoloHub modundan JDBC moduna geçer.
-
(Çözüm 2) Flink VVR sürümünüzü 6.0.7 ile 8.0.5 arasında bir sürüme yükseltin. Kaynak tabloya
'sdkMode'='jdbc'parametresini ekleyin ve işi yeniden başlatın. Ayrıca kullanıcıya aşağıdaki izin kümelerinden birini vermeniz gerekir. İşin düzgün çalıştığını onayladıktan sonra Hologres örneğini yükseltebilirsiniz.(Seçenek 1) Örnek üzerinde süper kullanıcı izinleri.
(Seçenek 2) Hedef tabloda sahip izinleri, CREATE DATABASE izni ve örnek için çoğaltma rolü izinleri.
-
(Çözüm 3) (Önerilmez) Flink VVR sürümünü 8.0.6 sürümüne yükseltin. Flink otomatik olarak HoloHub modundan JDBC moduna geçer. Ancak VVR 8.0.6'da boyut tablosunda çok fazla alan bulunması durumunda iş dağıtımının zaman aşımına uğramasına neden olabilecek bilinen bir hata vardır. Daha fazla bilgi için Hologres Connector Sürüm Notları konusuna bakın.
(İsteğe bağlı) Çok sayıda Flink VVR işiniz varsa hangi işlerin ve tabloların yükseltme gerektirdiğini belirlemek için aşağıdaki talimatları kullanın.
V2.0'a yükseltin
(Çözüm 1) (Önerilir) Flink VVR sürümünüzü 8.0.6 veya sonraki bir sürüme yükseltin. Flink otomatik olarak HoloHub modundan JDBC moduna geçer. Ancak VVR 8.0.6'da boyut tablosunda çok fazla alan bulunması durumunda iş dağıtımının zaman aşımına uğramasına neden olabilecek bilinen bir hata vardır. Daha fazla bilgi için Hologres Connector Sürüm Notları konusuna bakın. VVR 8.0.7 sürümüne yükseltmenizi öneririz.
-
(Çözüm 2) Flink VVR sürümünüzü 8.0.4 veya 8.0.5 sürümüne yükseltin ve Flink işini yeniden başlatın. Ayrıca kullanıcıya aşağıdaki izin kümelerinden birini vermeniz gerekir. İşin düzgün çalıştığını onayladıktan sonra Hologres örneğini yükseltebilirsiniz.
(Seçenek 1) Örnek üzerinde süper kullanıcı izinleri.
(Seçenek 2) Hedef tabloda sahip izinleri, CREATE DATABASE izni ve örnek için çoğaltma rolü izinleri.
(Çözüm 3) Flink VVR sürümünüzü 6.0.7 ile 8.0.3 arasında bir sürüme yükseltin. Flink binlog verilerini tüketmek için HoloHub modunu kullanmaya devam eder.
Hologres binlog verilerini tüketen çok sayıda Flink VVR işiniz varsa yükseltilmesi gereken işleri ve tabloları belirlemek için aşağıdaki yöntemi kullanabilirsiniz.
Bu araç yalnızca aşağıdaki iş türleri için bilgi alabilir:
Tabloları tanımlamak için DDL kullanan SQL işleri.
Parametreleri belirtmek için ipuçlarını kullanan Katalog işleri.
Araç ipucu parametresi olmayan JAR işleri veya Katalog tabloları için bilgi almayı desteklemez.
Açık kaynaklı aracı find-incompatible-flink-jobs-1.0-SNAPSHOT-jar-with-dependencies.jar konusuna bakın.
-
Yerel komut satırında açık kaynaklı aracın dizinine gidin ve yükseltme gerektiren tüm işleri ve tabloları görüntülemek için aşağıdaki komutu çalıştırın.
NotAşağıdaki komutu çalıştırmak için JDK 8 veya sonraki bir sürüm yüklü Java ortamına sahip olmanız gerekir.
java -cp find-incompatible-flink-jobs-1.0-SNAPSHOT-jar-with-dependencies.jar com.alibaba.hologres.FindIncompatibleFlinkJobs <region> <url> <AccessKeyID> <AccessKeySecret> <binlog/rpc> # Example java -cp find-incompatible-flink-jobs-1.0-SNAPSHOT-jar-with-dependencies.jar com.alibaba.hologres.FindIncompatibleFlinkJobs Beijing https://vvp.console.alibabacloud.com/web/xxxxxx/en/#/workspaces/xxxx/namespaces/xxxx/operations/stream/xxxx my-access-key-id my-access-key-secret binlogAşağıdaki tabloda parametreler açıklanmaktadır.
Parametre
Açıklama
region
Realtime Compute for Apache Flink çalışma alanınızın bulunduğu bölge. Geçerli değerlerin listesi için Bölge değerleri tablosuna bakın.
url
Hedef Realtime Compute for Apache Flink çalışma alanındaki herhangi bir işin URL'si.
AccessKey ID
Realtime Compute for Apache Flink çalışma alanına erişim iznine sahip bir hesap için AccessKey ID.
AccessKey secret
Realtime Compute for Apache Flink çalışma alanına erişim iznine sahip bir hesap için AccessKey secret.
binlog/rpc
Kontrol edilecek iş içeriği türü. Geçerli değerler:
binlog: Çalışma alanındaki tüm işlerdeki tüm Hologres binlog kaynak tablolarını kontrol eder.rpc: Çalışma alanındaki tüm işlerderpcmodunu kullanan tüm boyut tablolarını veya sonuç tablolarını kontrol eder.
-
Aşağıdaki kod örnek bir sonucu göstermektedir.
dwd_xxx nx not a running job, skip dwd_st xxx not a running job, skip dwd_xxx a not a running job, skip dia xxx not a hologres job, skip dwd_tr xxx ail not sql job, skip --- The following are Hologres binlog source tables that are on a version earlier than 8.0.5 and do not have sdkmode = jdbc set --- deploymentName version tableName ads_xxx xxx vvr-6.0.7-flink-1.15 adsdb.ads_xxx xxx xxx catalog xxx vvr-8.0.1-flink-1.17 odsdb.ods_xxx nts xxx vvr-8.0.1-flink-1.17 dwsdb.dws_xxx tag xxx s vvr-8.0.1-flink-1.17 odsdb.ods_xxx ers