Tüm Ürünler
Search
Belge Merkezi

Realtime Compute for Apache Flink:Lindorm connector

Son Güncelleme:Oct 04, 2026

Sink: Streaming Lookup source: Sync/Async mode

Lindorm connector, Flink akış işlerinin SQL API kullanarak Lindorm geniş tablolarına veri yazmasını ve bu tablolardan veri aramasını sağlar.

Önkoşullar

Başlamadan önce şunlara sahip olduğunuzdan emin olun:

  • Bir Lindorm geniş tablo motoru ve bir Lindorm tablosu. Daha fazla bilgi için bkz. Create an instance.

  • Lindorm kümesi ile Flink çalışma alanı arasında ağ bağlantısı (örneğin, her ikisinin de aynı sanal özel bulut (VPC) içinde bulunması).

Lindorm HBase tabloları desteklenmez. Yalnızca LindormTable desteklenir.

Hızlı başlangıç

Aşağıdaki örnek 10 satır veri oluşturur, bir Lindorm boyut tablosunda eşleşen satırları arar ve sonucu bir Lindorm alıcı tablosuna yazar.

-- Source: generate 10 rows with sequential IDs 0-9
CREATE TEMPORARY TABLE example_source (
  id INT,
  proc_time AS PROCTIME()
) WITH (
  'connector' = 'datagen',
  'number-of-rows' = '10',
  'fields.id.kind' = 'sequence',
  'fields.id.start' = '0',
  'fields.id.end' = '9'
);

-- Dimension table: look up user details from Lindorm
CREATE TEMPORARY TABLE lindorm_hbase_dim (
  `id`    INT,
  `name`  VARCHAR,
  `birth` VARCHAR,
  PRIMARY KEY (id) NOT ENFORCED
) WITH (
  'connector'   = 'lindorm',
  'tablename'   = '${lindorm_dim_table}',
  'seedserver'  = '${lindorm_seed_server}',
  'namespace'   = 'default',
  'username'    = '${lindorm_username}',
  'password'    = '${lindorm_password}'
);

-- Sink table: write enriched records to Lindorm
CREATE TEMPORARY TABLE lindorm_hbase_sink (
  `id`    INT,
  `name`  VARCHAR,
  `birth` VARCHAR,
  PRIMARY KEY (id) NOT ENFORCED
) WITH (
  'connector'   = 'lindorm',
  'tablename'   = '${lindorm_sink_table}',
  'seedserver'  = '${lindorm_seed_server}',
  'namespace'   = 'default',
  'username'    = '${lindorm_username}',
  'password'    = '${lindorm_password}'
);

-- Temporal join: enrich source data with the dimension table and write to sink
INSERT INTO lindorm_hbase_sink
SELECT
  s.id,
  d.name,
  d.birth
FROM example_source AS s
JOIN lindorm_hbase_dim AS d FOR SYSTEM_TIME AS OF s.proc_time
  ON s.id = d.id;

Çalıştırmadan önce yer tutucuları değiştirin:

Yer Tutucu Açıklama
${lindorm_dim_table} Lindorm boyut tablosunun adı
${lindorm_sink_table} Lindorm alıcı tablosunun adı
${lindorm_seed_server} host:port biçiminde Lindorm sunucu uç noktası
${lindorm_username} Lindorm kullanıcı adı
${lindorm_password} Lindorm parolası

Söz dizimi

CREATE TABLE white_list (
  id     VARCHAR,
  name   VARCHAR,
  age    INT,
  PRIMARY KEY (id) NOT ENFORCED
) WITH (
  'connector'    = 'lindorm',
  'seedserver'   = '<host:port>',
  'namespace'    = '<yourNamespace>',
  'username'     = '<yourUsername>',
  'password'     = '<yourPassword>',
  'tableName'    = '<yourTableName>',
  'columnFamily' = '<yourColumnFamily>'
);

Connector seçenekleri

Genel

Seçenek Tür Gerekli Varsayılan Açıklama
connector String Evet — lindorm olarak ayarlanmalıdır.
seedserver String Evet — host:port biçiminde Lindorm sunucu uç noktası. Realtime Compute for Apache Flink, bağlanmak için Java için ApsaraDB for HBase API kullanır. Ayrıntılar için bkz. Use Flink to connect to and use LindormTable.
namespace String Evet — Lindorm veritabanı ad alanı.
username String Evet — Lindorm veritabanı kullanıcı adı.
password String Evet — Lindorm veritabanı parolası.
tableName String Evet — Lindorm tablosunun adı.
columnFamily String Evet — Sütun ailesi adı. Tablo oluşturulurken sütun ailesi belirtilmemişse f girin.
retryIntervalMs Integer Hayır 1000 Başarısız okuma işlemleri için yeniden deneme aralığı (milisaniye cinsinden).
maxRetryTimes Integer Hayır 5 Okuma veya yazma işlemleri için maksimum yeniden deneme sayısı.

Alıcıya özgü

Seçenek Tür Gerekli Varsayılan Açıklama
bufferSize Integer Hayır 500 Lindorm'a aktarılmadan önce tamponda tutulacak kayıt sayısı.
flushIntervalMs Integer Hayır 2000 Tampon dolu olmadığında iki aktarma arasındaki maksimum süre (milisaniye cinsinden).
ignoreDelete Boolean Hayır false true olarak ayarlandığında silme işlemleri atlanır.
dynamicColumnSink Boolean Hayır false true olarak ayarlandığında dinamik tablo özelliğini etkinleştirir. Bkz. Dynamic table.
excludeUpdateColumns String Hayır — Güncellemelerden hariç tutulacak sütunların virgülle ayrılmış listesi. Örneğin, a,b,c değeri a, b ve c sütunlarına yapılan güncellemeleri atlar. VVR 8.0.9 veya sonraki sürümler gerektirir.

Boyut tablosuna özgü

Seçenek Tür Gerekli Varsayılan Açıklama
partitionedJoin Boolean Hayır false true olarak ayarlandığında önbellek isabet oranını artırmak için bölümlendirmeye JoinKey kullanır.
shuffleEmptyKey Boolean Hayır false true olarak ayarlandığında boş yukarı akış anahtarlarını aşağı akış düğümlerine rastgele yönlendirir. false olarak ayarlandığında bunları paralel iş parçacığı 0'a yönlendirir.
cache String Hayır None Önbellek ilkesi. Geçerli değerler: None (önbelleğe alma yok) ve LRU (son erişilen satırları önbelleğe alır).
cacheSize Integer Hayır 1000 Önbelleğe alınacak maksimum satır sayısı. cache seçeneği LRU olarak ayarlandığında geçerlidir.
cacheTTLMs Integer Hayır — Önbellek girdisinin sona erme süresi (milisaniye cinsinden). cache seçeneği LRU olarak ayarlandığında geçerlidir. Varsayılan olarak girdilerin süresi dolmaz.
cacheEmpty Boolean Hayır true true olarak ayarlandığında satır döndürmeyen arama sonuçlarını önbelleğe alır.
async Boolean Hayır false true olarak ayarlandığında eşzamansız arama modunu etkinleştirir.
asyncLindormRpcTimeoutMs Integer Hayır 300000 Eşzamansız aramalar için RPC zaman aşımı (milisaniye cinsinden).

Arama önbelleği

Varsayılan olarak connector her aramayı doğrudan Lindorm'dan getirir (cache = None). Yüksek aktarım hızına sahip join işlemlerinde Lindorm okuma yükünü azaltmak için LRU önbelleğe almayı etkinleştirin.

cache = LRU ayarıyla connector son erişilen satırları bellekte saklar. Join anahtarı önbellekteki bir satırla eşleştiğinde connector Lindorm'u sorgulamadan önbelleğe alınan değeri döndürür. Bir önbellek girdisi şu durumlarda kaldırılır:

  • Önbellek cacheSize satıra ulaştığında (en eski satırlar önce kaldırılır).

  • Girdi önbellekte cacheTTLMs milisaniyeden daha uzun süre kaldığında.

Bir ödünleşim söz konusudur: Daha uzun bir TTL veya daha büyük bir önbellek Lindorm okuma trafiğini azaltır ancak eskimiş veri sunma riskini artırır. Her iki değeri de aktarım hızı gereksinimlerinize ve temel verilerin ne kadar hızlı değiştiğine göre ayarlayın.

Lindorm connector bire çok arama joinlerini destekler. Boyut tablosundaki satırlar birden fazla yukarı akış olayıyla eşleşebiliyorsa önbelleğe alma stratejilerine ve aktarım hızına özellikle dikkat edin.

Tekil yazmalar

Bir Lindorm tablosunda birincil anahtar bulunduğunda tüm yazmalar upsert semantiği kullanır: Gelen her kayıt ya yeni bir satır ekler ya da mevcut eşleşen satırı günceller. Bu durum yazmaları tekil (idempotent) hale getirir.

Tekil yazmalar hata toleransı için önemlidir. Bir Flink işi bir kontrol noktasından yeniden başlatıldığında son başarılı kontrol noktasından itibaren mesajları yeniden oynatır. Lindorm upsert işlemleri tekil olduğu için yeniden oynatılan kayıtlar orijinal yazmalarla aynı sonucu üretir; yinelenen satırlar veya kural ihlalleri oluşmaz.

Tekil yazmalardan yararlanmak için DDL'nizde bir birincil anahtar tanımlayın.

Dinamik tablo

Şemanız çalışma zamanında değişiyorsa dinamik tablo özelliğini kullanın; sütunlar DDL zamanında sabitlenmek yerine verideki değerlere göre dinamik olarak oluşturulur. Tipik bir kullanım durumu, saatlerin sütun adı günlerin ise birincil anahtar olduğu günlük saatlik ölçümlerin izlenmesidir:

Birincil anahtar 00:00 01:00
2025-06-01 45 32
2025-06-02 76 34

Dinamik tablolar için DDL kuralları:

  • İlk N sütun birincil anahtarı oluşturur.

  • Son iki sütun VARCHAR türünde olmalıdır.

  • Sondan bir önceki sütun (c1) dinamik sütun adını tutar.

  • Son sütun (c2) o sütun için değeri tutar.

  • c1 ve c2 dışındaki birincil anahtar olmayan sütunlara izin verilmez.

CREATE TABLE lindorm_dynamic_output (
  pk1 VARCHAR,
  pk2 VARCHAR,
  pk3 VARCHAR,
  c1  VARCHAR,  -- column name written to Lindorm
  c2  VARCHAR,  -- column value written to Lindorm
  PRIMARY KEY (pk1, pk2, pk3) NOT ENFORCED
) WITH (
  'connector'         = 'lindorm',
  'seedserver'        = '<host:port>',
  'namespace'         = '<yourNamespace>',
  'username'          = '<yourUsername>',
  'password'          = '<yourPassword>',
  'tableName'         = '<yourTableName>',
  'columnFamily'      = '<yourColumnFamily>',
  'dynamicColumnSink' = 'true'
);

Her kayıt yazıldığında connector <pk1, pk2, pk3> ile tanımlanan Lindorm satırına bir sütun ekler veya bu sütunu günceller. O satırdaki diğer sütunlar değişmeden kalır.

Veri türü eşlemeleri

Tüm Lindorm verileri ikili biçimde depolanır. Aşağıdaki tablo connector'un Flink SQL türleri ile Lindorm ikili temsilleri arasında nasıl dönüşüm yaptığını gösterir.

Flink SQL türü Lindorm'a yazma Lindorm'dan okuma
CHAR / VARCHAR StringData::toBytes StringData::fromBytes
BOOLEAN Bytes::toBytes(boolean) Bytes::toBigDecimal
BINARY / VARBINARY Doğrudan bayt Doğrudan bayt
DECIMAL Bytes::toBytes(BigDecimal) Bytes::toBigDecimal
TINYINT byte[] dizisinin ilk baytı bytes[0]
SMALLINT Bytes::toBytes(short) Bytes::toShort
INT Bytes::toBytes(int) Bytes::toInt
BIGINT Bytes::toBytes(long) Bytes::toLong
FLOAT Bytes::toBytes(float) Bytes::toFloat
DOUBLE Bytes::toBytes(double) Bytes::toDouble
DATE 1970-01-01 tarihinden itibaren gün sayısı ile Bytes::toBytes(int) 1970-01-01 tarihinden itibaren gün sayısı → Bytes::toInt
TIME 00:00:00'dan itibaren milisaniye sayısı ile Bytes::toBytes(int) 00:00:00'dan itibaren milisaniye sayısı → Bytes::toInt
TIMESTAMP 1970-01-01 00:00:00'dan itibaren milisaniye sayısı ile Bytes::toBytes(long) 1970-01-01 00:00:00'dan itibaren milisaniye sayısı → Bytes::toLong

Bytes yöntemleri com.alibaba.lindorm.client.core.utils.Bytes sınıfındadır. StringData yöntemleri (CHAR/VARCHAR satırları) org.apache.flink.table.data.StringData sınıfındadır.

Ölçümler

Aşağıdaki alıcı ölçümleri kullanılabilir. Ayrıntılar için bkz. Metrics.

Ölçüm Açıklama
numBytesOut Alıcıya yazılan toplam bayt sayısı
numBytesOutPerSecond Saniye başına yazılan bayt sayısı
numRecordsOut Alıcıya yazılan toplam kayıt sayısı
numRecordsOutPerSecond Saniye başına yazılan kayıt sayısı

SSS

Lindorm connection errors and solutions