Tüm Ürünler
Search
Belge Merkezi

Realtime Compute for Apache Flink:DataHub connector

Son Güncelleme:Oct 04, 2026

DataHub connector, akış verilerini Alibaba Cloud DataHub'dan Flink işlerine okumanızı ve işlenmiş sonuçları tekrar DataHub konularına yazmanızı sağlar. Hem Flink SQL hem de DataStream API'yi destekler.

Not

DataHub, Kafka protokolüyle uyumludur. Flink'i Kafka protokolü üzerinden DataHub'a bağlamak için Upsert Kafka connector yerine standart Kafka connector kullanın. Ayrıntılar için bkz.

Compatibility with Kafka

.

Özellikler

Öğe Açıklama
Desteklenen tür Kaynak ve havuz (source and sink)
Çalıştırma modu Akış ve toplu iş
Veri biçimi Yok
Ölçümler Yok
API türü DataStream ve SQL
Havuzda veri güncelleme/silme desteği Desteklenmez. Havuz, hedef konuya yalnızca ekleme (insert-only) satırları yazar.

Ön koşullar

Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:

Sınırlamalar

  • Toplu işle bir DataHub kaynak tablosunu okumanız önerilmez. Toplu modda, bir DataHub kaynak tablosu tamamlanmış durumuna ulaşamaz ve iş tamamlanmak yerine beklemeye devam eder.

Söz dizimi

CREATE TEMPORARY TABLE datahub_input (
  `time` BIGINT,
  `sequence`  STRING METADATA VIRTUAL,
  `shard-id` BIGINT METADATA VIRTUAL,
  `system-time` TIMESTAMP METADATA VIRTUAL
) WITH (
  'connector' = 'datahub',
  'subId' = '<yourSubId>',
  'endPoint' = '<yourEndPoint>',
  'project' = '<yourProjectName>',
  'topic' = '<yourTopicName>',
  'accessId' = '${secret_values.ak_id}',
  'accessKey' = '${secret_values.ak_secret}'
);

Connector seçenekleri

Genel

Seçenek Tür Gerekli Varsayılan Açıklama
connector String Evet (yok) Connector türü. Bu değeri datahub olarak ayarlayın.
endPoint String Evet (yok) DataHub projesinin uç noktası. Değer bölgeye göre değişir. Bkz. Uç noktalar.
project String Evet (yok) DataHub proje adı.
topic String Evet (yok) DataHub konu adı. BLOB konuları (türü belirtilmemiş, yapılandırılmamış veriler) için Flink tablosunda tam olarak bir VARBINARY sütunu bulunmalıdır.
accessId String Evet (yok) Alibaba Cloud hesabınızın AccessKey ID'si. Sabit kodlamak yerine bir değişken olarak saklayın. Bkz. Değişkenleri yönetin.
accessKey String Evet (yok) Alibaba Cloud hesabınızın AccessKey secret'ı.
retryTimeout Integer Hayır 1800000 Bir yeniden deneme girişimi için maksimum zaman aşımı (milisaniye cinsinden).
retryInterval Integer Hayır 1000 Yeniden deneme girişimleri arasındaki süre (milisaniye cinsinden).
CompressType String Hayır lz4 Okuma ve yazma işlemleri için sıkıştırma algoritması. Geçerli değerler: lz4, deflate, "" (devre dışı). VVR 6.0.5 veya sonraki sürümler gerektirir.

Kaynağa özel

Seçenek Tür Gerekli Varsayılan Açıklama
subId String Evet (yok) DataHub abonelik kimliği.
maxFetchSize Integer Hayır 50 İstek başına getirilen kayıt sayısı. Okuma aktarım hızını artırmak için bu değeri artırın.
maxBufferSize Integer Hayır 50 Eşzamansız okumalardan önbelleğe alınan maksimum kayıt sayısı. Okuma aktarım hızını artırmak için bu değeri artırın.
fetchLatestDelay Integer Hayır 500 Veri olmadığında bekleme süresi (milisaniye cinsinden). Düşük trafikli konularda okuma gecikme süresini azaltmak için bu değeri düşürün.
lengthCheck String Hayır NONE Ayrıştırılan alan sayısının tanımlanan sütun sayısıyla eşleşmediği satırları işlemek için kullanılan kural. Geçerli değerler: NONE, SKIP, EXCEPTION, PAD. Bkz. Alan sayısı doğrulama kuralları.
columnErrorDebug Boolean Hayır false Alan ayrıştırma hataları için hata ayıklama günlüğünün etkinleştirilip etkinleştirilmeyeceğini belirtir. Ayrıştırma istisna günlüklerini yazdırmak için true olarak ayarlayın.
startTime String Hayır (yok) Tüketimin başlayacağı zaman damgası. Biçim: yyyy-MM-dd hh:mm:ss.
endTime String Hayır (yok) Tüketimin duracağı zaman damgası. Biçim: yyyy-MM-dd hh:mm:ss.
startTimeMs Long Hayır -1 Tüketimin başlayacağı zaman damgası (milisaniye cinsinden). startTime seçeneğine göre önceliklidir. Bkz. Tüketim başlangıç konumu.

Tüketim başlangıç konumu

startTimeMs seçeneği, kaynağın okumaya nereden başlayacağını kontrol eder:

  • -1 (varsayılan): Konudaki en son ofsetten başlar. Ofset yoksa en eski ofsete geri döner.

  • Belirli bir zaman damgası: Belirtilen zaman damgasında veya sonrasında bulunan ilk kayıttan başlar.

Önemli

-1 varsayılan değeri veri kaybına neden olabilir. İşiniz ilk kontrol noktasından önce başarısız olursa, konudaki en son ofset ilerlemiş olabilir ve bu pencere sırasında yazılan kayıtlar atlanır. Başlangıç konumunu kontrol etmek için startTimeMs değerini açıkça belirli bir zaman damgasına ayarlayın.

Alan sayısı doğrulama kuralları

lengthCheck seçeneği, bir satırdaki ayrıştırılan alan sayısının tanımlanan sütun sayısıyla eşleşmediğinde ne olacağını belirler:

Değer Davranış
NONE (varsayılan) Ayrıştırılan alanlar > tanımlanan sütunlar ise: Tanımlanan sayıya kadar soldan sağa okur. Ayrıştırılan alanlar < tanımlanan sütunlar ise: Satırı atlar.
SKIP Ayrıştırılan alan sayısı tanımlanan sütun sayısından farklı olan satırları atlar.
EXCEPTION Ayrıştırılan alan sayısı tanımlanan sütun sayısından farklı olduğunda bir istisna fırlatır.
PAD Soldan sağa okur. Ayrıştırılan alanlar > tanımlanan sütunlar ise: Tanımlanan sayıya kadar soldan sağa okur. Ayrıştırılan alanlar < tanımlanan sütunlar ise: Eksik alanları null ile doldurur.

Havuza özel

Seçenek Tür Gerekli Varsayılan Açıklama
batchCount Integer Hayır 500 Yazma partisi başına maksimum satır sayısı.
batchSize Integer Hayır 512000 Yazma partisinin maksimum boyutu (bayt cinsinden).
flushInterval Integer Hayır 5000 Flush aralığı (milisaniye cinsinden).
hashFields String Hayır null Satırları parçalara yönlendirmek için kullanılan virgülle ayrılmış sütun adı listesi. Bu sütunlarda aynı değerlere sahip satırlar aynı parçaya yazılır. Varsayılan (null) rastgele yazma kullanır. Örnek: hashFields=a,b.
timeZone String Hayır (yok) TIMESTAMP alanlarını dönüştürürken kullanılan saat dilimi.
schemaVersion Integer Hayır -1 Kayıtlı şema kayıt defterindeki şema sürümü.

Yazma partisi flush davranışı

Aşağıdaki koşullardan herhangi biri ilk olarak karşılandığında yazma partisi DataHub'a flush edilir:

  • Arabelleğe alınan satır sayısı batchCount değerine ulaştığında.

  • Arabelleğe alınan verilerin toplam boyutu batchSize değerine ulaştığında.

  • Son flush'tan bu yana geçen süre flushInterval değerini aştığında.

batchCount, batchSize veya flushInterval değerlerini artırmak, daha yüksek gecikme süresi pahasına yazma aktarım hızını iyileştirir.

Veri türü eşlemeleri

Flink türü DataHub türü
TINYINT TINYINT
BOOLEAN BOOLEAN
INTEGER INTEGER
BIGINT BIGINT
BIGINT TIMESTAMP
FLOAT FLOAT
DOUBLE DOUBLE
DECIMAL DECIMAL
VARCHAR STRING
SMALLINT SMALLINT
VARBINARY BLOB

Meta veriler

Meta veri alanları salt okunurdur (R). Bunları sorgulara dahil etmek ancak DataHub'a geri yazmamak için kaynak tablo tanımında METADATA VIRTUAL olarak bildirin.

Not

Meta veri alanları yalnızca VVR 3.0.1 veya sonraki sürümler kullanılırken mevcuttur.

Anahtar Veri türü Açıklama R/W
shard-id BIGINT METADATA VIRTUAL Kaydın parça kimliği. R
sequence STRING METADATA VIRTUAL Kaydın parça içindeki sıra numarası. R
system-time TIMESTAMP METADATA VIRTUAL DataHub'ın kaydı aldığı saat. R

Örnekler

Kaynak

Aşağıdaki örnek, bir DataHub konusundan veri okur ve konsola yazdırır.

CREATE TEMPORARY TABLE datahub_input (
  `time` BIGINT,
  `sequence`  STRING METADATA VIRTUAL,
  `shard-id` BIGINT METADATA VIRTUAL,
  `system-time` TIMESTAMP METADATA VIRTUAL
) WITH (
  'connector' = 'datahub',
  'subId' = '<yourSubId>',
  'endPoint' = '<yourEndPoint>',
  'project' = '<yourProjectName>',
  'topic' = '<yourTopicName>',
  'accessId' = '${secret_values.ak_id}',
  'accessKey' = '${secret_values.ak_secret}'
);

CREATE TEMPORARY TABLE test_out (
  `time` BIGINT,
  `sequence`  STRING,
  `shard-id` BIGINT,
  `system-time` TIMESTAMP
) WITH (
  'connector' = 'print',
  'logger' = 'true'
);

INSERT INTO test_out
SELECT
  `time`,
  `sequence`,
  `shard-id`,
  `system-time`
FROM datahub_input;

Havuz

Aşağıdaki örnek, bir DataHub konusundan okur, name alanını küçük harfe dönüştürür ve sonuçları başka bir DataHub konusuna yazar.

CREATE TEMPORARY TABLE datahub_source (
  name VARCHAR
) WITH (
  'connector' = 'datahub',
  'endPoint' = '<endPoint>',
  'project' = '<yourProjectName>',
  'topic' = '<yourTopicName>',
  'subId' = '<yourSubId>',
  'accessId' = '${secret_values.ak_id}',
  'accessKey' = '${secret_values.ak_secret}',
  'startTime' = '2018-06-01 00:00:00'
);

CREATE TEMPORARY TABLE datahub_sink (
  name VARCHAR
) WITH (
  'connector' = 'datahub',
  'endPoint' = '<endPoint>',
  'project' = '<yourProjectName>',
  'topic' = '<yourTopicName>',
  'accessId' = '${secret_values.ak_id}',
  'accessKey' = '${secret_values.ak_secret}',
  'batchSize' = '512000',
  'batchCount' = '500'
);

INSERT INTO datahub_sink
SELECT
  LOWER(name)
FROM datahub_source;

DataStream API

Önemli

DataHub ile DataStream API'yi kullanmak için Realtime Compute for Apache Flink üzerinde bir DataStream connector yapılandırın. Bkz. DataStream connector'ların ayarları.

DataHub'dan okuyun

VVR, Flink'in SourceFunction arabirimini uygulayan DatahubSourceFunction sınıfını sağlar.

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);

// Configure the DataHub source
DatahubSourceFunction datahubSource =
    new DatahubSourceFunction(
        <yourEndPoint>,
        <yourProjectName>,
        <yourTopicName>,
        <yourSubId>,
        <yourAccessId>,
        <yourAccessKey>,
        "public",
        <yourStartTime>,
        <yourEndTime>
    );
datahubSource.setRequestTimeout(30 * 1000);
datahubSource.enableExitAfterReadFinished();

env.addSource(datahubSource)
    .map((MapFunction<RecordEntry, Tuple2<String, Long>>) this::getStringLongTuple2)
    .print();
env.execute();

private Tuple2<String, Long> getStringLongTuple2(RecordEntry recordEntry) {
    Tuple2<String, Long> tuple2 = new Tuple2<>();
    TupleRecordData recordData = (TupleRecordData) (recordEntry.getRecordData());
    tuple2.f0 = (String) recordData.getField(0);
    tuple2.f1 = (Long) recordData.getField(1);
    return tuple2;
}

DataHub'a yazın

VVR, DatahubSinkFunction arabirimini uygulayan OutputFormatSinkFunction sınıfını sağlar.

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

// Configure the DataHub sink
env.generateSequence(0, 100)
    .map((MapFunction<Long, RecordEntry>) aLong -> getRecordEntry(aLong, "default:"))
    .addSink(
        new DatahubSinkFunction<>(
            <yourEndPoint>,
            <yourProjectName>,
            <yourTopicName>,
            <yourSubId>,
            <yourAccessId>,
            <yourAccessKey>,
            "public",
            <schemaVersion> // If schema registry is enabled, you must specify the schema version. Otherwise, set this to 0.
        )
    );
env.execute();

private RecordEntry getRecordEntry(Long message, String s) {
    RecordSchema recordSchema = new RecordSchema();
    recordSchema.addField(new Field("f1", FieldType.STRING));
    recordSchema.addField(new Field("f2", FieldType.BIGINT));
    recordSchema.addField(new Field("f3", FieldType.DOUBLE));
    recordSchema.addField(new Field("f4", FieldType.BOOLEAN));
    recordSchema.addField(new Field("f5", FieldType.TIMESTAMP));
    recordSchema.addField(new Field("f6", FieldType.DECIMAL));
    RecordEntry recordEntry = new RecordEntry();
    TupleRecordData recordData = new TupleRecordData(recordSchema);
    recordData.setField(0, s + message);
    recordData.setField(1, message);
    recordEntry.setRecordData(recordData);
    return recordEntry;
}

Maven bağımlılığı

DataHub DataStream connector'ını projenize ekleyin. Kullanılabilir tüm sürümler Maven merkezi deposunda listelenmiştir.

<dependency>
    <groupId>com.alibaba.ververica</groupId>
    <artifactId>ververica-connector-datahub</artifactId>
    <version>${vvr-version}</version>
</dependency>

Sonraki adımlar