Tüm Ürünler
Search
Belge Merkezi

Realtime Compute for Apache Flink:Akış depolama Fluss

Son Güncelleme:Oct 04, 2026

Stream Storage Fluss bağlayıcısını nasıl kullanacağınızı öğrenin.

Arka plan bilgileri

Fluss; Apache Paimon gibi veri gölü biçimleriyle sorunsuz entegrasyon sağlayan bir göl-akış tümleştirme mimarisi kullanarak düşük gecikmeli veri işleme sunar ve gerçek zamanlı bir veri ambarı kurma ile bakım maliyetlerini önemli ölçüde azaltır. Fluss, veri akışları ve göl evi sinergisi için tek bir mekanizma sağlayarak kuruluşların veri silolarını yıkmasına, derin analitikleri hızlandırmasına ve veri gölleri içindeki verileri verimli bir şekilde paylaşmasına yardımcı olur.


Kategori


Açıklama


Desteklenen türler


Kaynak tablolar, boyut tabloları ve sonuç tablolarının yanı sıra veri alımı havuzları.


Çalıştırma modu


Akış modu ve toplu iş modu.


Veri biçimi


Henüz desteklenmiyor.


API türü


SQL ve veri alımı YAML.


Sonuç tablosu güncellemeleri ve silme işlemlerine destek


Evet.

Özel katalog oluşturun

Fluss, Realtime Compute for Apache Flink'den daha hızlı gelişir. VVR sürümleriyle henüz yayınlanmamış Fluss Catalog özelliklerini denemeniz için en son özel Katalog paketi burada sunulmaktadır. Daha fazla bilgi için bkz. Fluss Kataloğunu kaydedin.

SQL

Fluss bağlayıcısı, SQL işlerinde kaynak tablo, boyut tablosu veya sonuç tablosu olarak kullanılabilir. Daha fazla bilgi için bkz. Motor Entegrasyonu - Flink.

Önkoşullar

Temel özellikler

Fluss Bağlayıcısı aşağıdaki temel özellikleri sağlar:


Özellik


Açıklama


birleşik tam ve artımlı tüketim


Tam, artımlı ve birleşik tam ve artımlı tüketimi destekler.


veri keşfi


Fluss, Flink SQL'in toplu iş modunda hızlı veri keşfini destekler; bu durum veri geliştirme, hata ayıklama, veri doğrulama ve sorun giderme için kullanışlıdır.


CDC günlük aboneliği ve sanal tablo


Fluss birincil anahtar tabloları, alt akıştaki Flink işlerinin değişim olaylarının (INSERT, UPDATE_BEFORE, UPDATE_AFTER ve DELETE) eksiksiz bir akışını gerçek zamanlı olarak tüketmesine olanak tanıyan yerel Değişim Verisi Yakalama (CDC) günlük aboneliği desteği sunar.


arama birleşimi (boyut tablosu birleşimi)


Verimli anahtar-değer (KV) nokta aramalarını ve ikincil dizin aramalarını desteklemesi, Fluss'u düşük gecikmeli boyut tablosu birleştirme senaryoları için ideal kılar.


kısmi güncelleme


Yalnızca değiştirilen sütunlardaki verileri günceller, tüm satırı değil.


delta birleşimi


Bu yenilikçi birleştirme çözümü, veri güncelleme işlemlerini Fluss tablosuna iterek çift akışlı birleştirme semantiğini korur. Bu süreç, Flink'in kaynak tüketimini önemli ölçüde azaltır ve iş kararlılığını ve yürütme verimliliğini artırır.


birleştirme motoru


Fluss birincil anahtar tabloları, aynı birincil anahtara sahip kayıtların nasıl birleştirileceğini kontrol etmek için farklı birleştirme motorları yapılandırmanıza olanak tanır.


göl-akış tümleştirmesi


Gerçek zamanlı akış depolaması (Fluss) ile meta verilerin Data Lake Formation (DLF) tarafından yönetildiği Paimon tabanlı bir veri gölü arasında derin entegrasyon sağlar. Bu "tek veri, iki görünüm" modeli, tek bir mantıksal tablonun hem düşük gecikmeli gerçek zamanlı veri erişimi hem de yüksek aktarım hızına sahip geçmiş veri analizi sunmasına olanak tanır.


bölümlenmiş tablo


Bölümlenmiş tablolar oluşturmayı, bunlardan okuma ve bunlara yazmayı destekler ve bölüm oluşturma ile temizleme işlemlerini otomatik olarak gerçekleştirir.


sütun ekleyin


Devam eden okuma ve yazma işlerini kesintiye uğratmadan dinamik olarak sütun eklemenize olanak tanır.

Sınırlamalar

  • Günlük tabloları yalnızca INSERT işlemlerini destekler; UPDATE veya DELETE işlemlerini desteklemez.

  • Birincil anahtar tabloları INSERT, UPDATE ve DELETE işlemlerini destekler.

  • Arama birleşimleri, yalnızca aynı zamanda birincil anahtar tablosu olan boyut tablolarında desteklenir. Birleşim koşulu, tüm birincil anahtar alanlarını içermelidir.

  • Delta birleşimi için her iki tablo da Fluss birincil anahtar tablosu olmalı ve birleşim anahtarı paket anahtarını içermelidir.

Dikkat edilmesi gerekenler

  • Fluss tabloları iki türe ayrılır: birincil anahtarı olmayan ve Kafka konusuna benzeyen bir günlük tablosu ile birincil anahtarı olan ve upsert semantiğini destekleyen bir birincil anahtar tablosu. Kullanım durumunuza en uygun tablo türünü seçin.

  • Üretim ortamında, optimum paralel okuma ve yazma performansını ve dengeli veri dağılımını sağlamak için bucket.num parametresini doğru şekilde yapılandırın.

  • Bölümlenmiş tablolar için bölümlendirme stratejinizi veri hacmine ve sorgu kalıplarına göre tasarlayın. Uygun bir zaman granularity'si (örneğin günlük veya aylık) seçin ve meta veri şişmesini önlemek için kaç tane geçmiş bölümün saklanacağını kontrol etmek üzere table.auto-partition.num-retention parametresini kullanın. Bir birincil anahtar tablosu doğal bölümlendirme özelliklerine (zaman veya iş boyutuna göre gibi) sahip veriler içeriyorsa, tüm verileri tek bir bölümlenmemiş tabloda saklamak yerine bölümlenmiş bir tablo kullanın. Bölümlenmiş tablolar, veri yaşam döngüsü yönetimini basitleştirir ve akış ile toplu iş sorguları için bölüm budamayı etkinleştirerek gereksiz veri taramalarını önemli ölçüde azaltır ve sorgu performansını artırır.

  • Delta Join'i kullanmadan önce, bu optimizasyonu etkinleştirmek için Flink işinizde gerekli çalışma zamanı parametrelerini yapılandırın.

Özellikler

Tam ve artımlı tüketim

Genel bakış

Fluss birincil anahtar tabloları tam ve artımlı tüketimi destekler. Sistem öncelikle tablonun tam bir geçmiş anlık görüntüsünü okur. Anlık görüntü okuması tamamlandıktan sonra, otomatik ve kesintisiz bir şekilde artımlı akış tüketimine geçer. Bu süreç, veri bütünlüğünü ve tutarlılığını sağlar.

Tüketim modları

scan.startup.mode parametresini kullanarak tüketim başlangıç noktasını kontrol edebilirsiniz.


Mod


Açıklama


full


Varsayılan. Önce tam bir anlık görüntü okur, ardından artımlı verileri tüketir. Bu mod, eksiksiz geçmiş verilerin gerektiği senaryolar için uygundur.


earliest


Tam bir anlık görüntü okumadan, mevcut en eski günlük ofsetinden itibaren verileri tüketir.


latest


En son ofsetten itibaren verileri tüketir. Yalnızca iş başladıktan sonra üretilen yeni veriler tüketilir.


timestamp


Belirli bir zaman damgasından itibaren verileri tüketir. Bu mod, scan.startup.timestamp parametresini de ayarlamanızı gerektirir.

SQL örnekleri
-- Full and incremental consumption (default mode)
SELECT * FROM `fluss_catalog`.`fluss_db`.orders;

-- Consume from a specific timestamp by using a hint
SELECT * FROM `fluss_catalog`.`fluss_db`.orders
  /*+ OPTIONS('scan.startup.mode' = 'timestamp', 'scan.startup.timestamp' = '2025-01-01 00:00:00') */;

-- Consume from the latest offset
SELECT * FROM `fluss_catalog`.`fluss_db`.orders
  /*+ OPTIONS('scan.startup.mode' = 'latest') */;

CDC günlük aboneliği ve sanal tablolar

Günlük aboneliği

Fluss birincil anahtar tabloları yerel olarak CDC (Change Data Capture) günlük aboneliğini destekler. Bu, alt akıştaki Flink işlerinin ayrı bir binlog yapılandırması gerektirmeden eksiksiz bir değişiklik günlüğü akışını (INSERT, UPDATE_BEFORE, UPDATE_AFTER ve DELETE olayları) gerçek zamanlı olarak tüketmesine olanak tanır.

Bu şu anlama gelir:

  • Bir birincil anahtar tablosundaki tüm değişiklikler otomatik olarak CDC günlükleri oluşturur.

  • Alt akış uygulamaları, gerçek zamanlı veri senkronizasyonu veya akış ETL için eksiksiz değişiklik günlüğü akışını almak üzere doğrudan birincil anahtar tablosuna abone olabilir.

SQL örneği
-- Read the primary key table directly to get the CDC changelog stream
SELECT * FROM `fluss_catalog`.`fluss_db`.orders;
-- The output includes complete INSERT, UPDATE, and DELETE events.
Sanal tablolar

CDC akışına doğrudan abone olmanın yanı sıra, Fluss bir sanal tablo mekanizması sağlar. Ekstra veri depolamaya gerek kalmadan meta verilerle birlikte değişiklik günlüklerine erişmek için temel tablo adına belirli bir sonek ekleyebilirsiniz. Sistem bu sanal tabloları otomatik olarak oluşturur, manuel oluşturmaya gerek kalmaz.

Değişiklik günlüğü tablosu ($changelog)

Bu özellik birincil anahtar tabloları ve yalnızca ekleme yapılabilen tablolar için geçerlidir ve meta verilerle birlikte ham değişiklik günlüğü akışını sağlar.

Tablo yapısı (Sistem, orijinal tablo şemasına otomatik olarak aşağıdaki meta veri sütunlarını ekler):


Meta veri sütunu


Tür


Açıklama


_change_type


STRING


Değişiklik türü. Bir birincil anahtar tablosu için olası değerler insert, update_before, update_after ve delete'dir. Yalnızca ekleme yapılabilen bir tablo için tek olası değer insert'dir.


_log_offset


BIGINT


Günlükteki değişikliğin ofseti.


_commit_timestamp


TIMESTAMP_LTZ


Değişikliğin commit zaman damgası.

SQL örnekleri:

-- Read the $changelog virtual table for the orders table
SELECT * FROM `fluss_catalog`.`fluss_db`.orders$changelog;

-- Consume from the latest offset by using a hint
SELECT * FROM `fluss_catalog`.`fluss_db`.orders$changelog
  /*+ OPTIONS('scan.startup.mode' = 'latest') */;

-- Filter for delete events
SELECT * FROM `fluss_catalog`.`fluss_db`.orders$changelog
WHERE _change_type = 'delete';
Binlog tablosu ($binlog)

Bu özellik yalnızca birincil anahtar tabloları için kullanılabilir ve before/after görüntülerini içeren Binlog biçimli veriler sağlar; bu sayede her değişiklikten önceki ve sonraki veri durumunu doğru bir şekilde almak kolaylaşır.

Tablo yapısı (Meta veri sütunlarına ek olarak, tam before ve after satır verileri iç içe ROW türünde sunulur):


Sütun


Tür


Açıklama


_change_type


STRING


Değişiklik türü. Olası değerler insert, update ve delete'dir.


_log_offset


BIGINT


Günlük ofseti.


_commit_timestamp


TIMESTAMP_LTZ


Commit zaman damgası.


before


ROW


Değişiklikten önceki satır verisi. insert işlemleri için değer NULL'dur.


after


ROW


Değişiklikten sonraki satır verisi. delete işlemleri için değer NULL'dur.

Değişiklik olayı eşlemesi:


Değişiklik türü


before


after


insert


NULL


Yeni değer


update


Eski değer


Yeni değer


delete


Eski değer


NULL

SQL örnekleri:

-- Read the $binlog virtual table for the users table
SELECT * FROM `fluss_catalog`.`fluss_db`.users$binlog;

-- Get the before and after values of a field from an update event
SELECT
  `before`.user_name AS old_name,
  `after`.user_name  AS new_name,
  _commit_timestamp  AS change_time
FROM `fluss_catalog`.`fluss_db`.users$binlog
WHERE _change_type = 'update';
Sınırlamalar
  • $changelog ve $binlog tabloları şu anda projeksiyon itme, bölüm budama veya yüklem itme işlemlerini desteklemez.

  • $binlog tablosu yalnızca birincil anahtar tabloları için kullanılabilir. Yalnızca ekleme yapılabilen tablolar için desteklenmez.

  • Sanal tablolar için desteklenen başlatma modları earliest (varsayılan), latest ve timestamp'dir. full modu desteklenmez.

Kısmi güncelleme

Genel bakış

Fluss, birden çok veri akışının aynı geniş birincil anahtar tablosundaki kendi sütunlarına bağımsız olarak yazmasına olanak tanıyan kısmi güncellemeleri destekler. Fluss motoru, birincil anahtara dayalı olarak alanları kayıt düzeyinde otomatik olarak birleştirir. Bu yaklaşım, Flink'te karmaşık çoklu akış birleşim durumunu sürdürme ihtiyacını ortadan kaldırır ve büyük durum boyutlarıyla ilgili sorunları önler.

Kullanım durumu

Tipik bir kullanım durumu, gerçek zamanlı kullanıcı profili geniş tabloları oluşturmaktır. Öneri sistemleri, gösterim günlükleri, tıklama günlükleri ve alışveriş sepeti verileri gibi farklı veri kaynakları, kullanıcı profili tablosundaki kendi alanlarını güncelleyebilir. Bu süreç, kullanıcının eksiksiz bir 360 derecelik görünümünü oluşturur.

Sınırlamalar
  • Hedef tablo bir birincil anahtar tablosu olmalıdır.

  • Her veri akışının yazma işlemi, tüm birincil anahtar alanlarını içermelidir.

  • Hesaplama topolojisi çoklu akış birleşim düğümleri içermemelidir. Fluss, birleştirme işlemini doğrudan depolama katmanında gerçekleştirir.

SQL örnekleri
-- 1. Create a wide table
CREATE TABLE IF NOT EXISTS `fluss_catalog`.fluss_db.user_rec_wide (
    user_id   STRING,
    item_id   STRING,
    rec_score DOUBLE,
    imp_cnt   INT,
    click_cnt INT,
    PRIMARY KEY (user_id, item_id) NOT ENFORCED
) WITH ('bucket.num' = '3');

-- 2. Use multiple streams to write to their respective fields
-- Stream 1: Writes recommendation scores
INSERT INTO `fluss_catalog`.fluss_db.user_rec_wide (user_id, item_id, rec_score)
SELECT user_id, item_id, rec_score 
FROM `fluss_catalog`.fluss_db.recommendations;

-- Stream 2: Writes impression counts
INSERT INTO `fluss_catalog`.fluss_db.user_rec_wide (user_id, item_id, imp_cnt)
SELECT user_id, item_id, imp_cnt 
FROM `fluss_catalog`.fluss_db.impressions;

-- Stream 3: Writes click counts
INSERT INTO `fluss_catalog`.fluss_db.user_rec_wide (user_id, item_id, click_cnt)
SELECT user_id, item_id, click_cnt 
FROM `fluss_catalog`.fluss_db.clicks;

Yukarıdaki üç INSERT ifadesi ayrı Flink işleri olarak çalıştırılabilir. Fluss depolama katmanı, aynı birincil anahtar için alanları otomatik olarak eksiksiz satırlarda birleştirir.

Delta Join

Genel bakış

Delta Join, Fluss tarafından sağlanan yeni nesil akış-akış birleşimi paradigmasıdır. Veri güncelleme işlemlerini Fluss depolama katmanına devrederek verimli aramalar için birincil anahtar tablolarından ve ikincil dizinlerden yararlanır. Bu tasarım, Flink'te birleşim durumunun sürdürülmesine olan ihtiyacı ortadan kaldırır.

Temel avantajlar:

  • Birleşim durumu yok: Gereksiz durum depolamasını ortadan kaldırır ve büyük durum boyutlarından kaynaklanan garbage collection (GC) sorunlarını önler.

  • Düşük kaynak tüketimi: Testlerde Flink bellek ve CPU tüketimini %86'nın üzerinde azaltır.

  • Daha yüksek kararlılık ve verimlilik: Durum şişmesinden kaynaklanan performans darboğazlarını önler.

Geleneksel birleşimlerle karşılaştırma


Özellik


Geleneksel Flink birleşimi (Kafka ile)


Fluss Delta Join


Durum Depolama


Tüm üst akış verilerinin Flink'te önbelleğe alınmasını gerektirir.


Birleşim durumu yok; Fluss dizinlerine dayanır.


Kaynak Tüketimi


Büyük durum nedeniyle sık GC'den dolayı yüksek.


Düşük


Kararlılık


Durum şişmesinden kaynaklanan sorunlara yatkın.


Daha kararlı


Mekanizma


Her iki akıştan gelen güncellemeler birleşimi yönlendirir.


Fluss, güncellemeleri depolama katmanına devreder.


Kullanım Alanları


Genel amaçlı akış-akış birleşimleri.


Fluss birincil anahtar tabloları arasında verimli birleşimler.

Sınırlamalar
  • Sol ve sağ tabloların her ikisi de Fluss birincil anahtar tablosu olmalıdır (bölümlenmiş tablolar desteklenir).

  • Paket anahtarı, birincil anahtarın bir öneki olmalıdır.

  • Birleşim anahtarı paket anahtarını içermelidir. Bölümlenmiş bir tablo için bölüm anahtarını da içermelidir.

SQL örnekleri

1. Tabloları oluşturun

CREATE TABLE orders (
  user_id BIGINT,
  order_date DATE,
  order_id BIGINT,
  amount DECIMAL(10, 2),
  PRIMARY KEY (user_id, order_id, order_date) NOT ENFORCED
) WITH ('bucket.key' = 'user_id, order_id');

CREATE TABLE order_enhance (
  user_id BIGINT,
  order_id BIGINT,
  risk_level TINYINT,
  is_fraud BOOLEAN,
  update_time TIMESTAMP(3),
  PRIMARY KEY (user_id, order_id) NOT ENFORCED
) WITH ('bucket.key' = 'user_id, order_id');

2. Delta Join çalıştırın

SELECT * FROM orders o
INNER JOIN order_enhance e
ON o.user_id = e.user_id AND o.order_id = e.order_id;

3. İpuçlarıyla arama performansını optimize edin

SELECT * FROM orders o /*+ OPTIONS('client.lookup.queue-size'='2560') */
INNER JOIN order_enhance e /*+ OPTIONS('client.lookup.queue-size'='2560') */
ON o.user_id = e.user_id AND o.order_id = e.order_id;
İş parametre yapılandırması

Delta Join kullanmak için Flink işinizin çalışma zamanı parametrelerine aşağıdaki yapılandırmaları ekleyin:

table.exec.delta-join.cache-enabled: 'true'
table.exec.async-lookup.buffer-capacity: '3000'
table.optimizer.delta-join.strategy: FORCE
table.exec.delta-join.left.cache-size: '100'
table.exec.delta-join.right.cache-size: '1000'


Parametre


Açıklama


table.optimizer.delta-join.strategy


Delta Join'i zorlamak için FORCE olarak ayarlayın. Koşullar karşılanmazsa iş başarısız olur.


table.exec.async-lookup.buffer-capacity


Eşzamansız istekler için arabellek kapasitesi. Bu değeri binler cinsinden ayarlamanız önerilir.


table.exec.delta-join.cache-enabled


Fluss'a yapılan istekleri azaltmak için yerel önbelleği etkinleştirir.


table.exec.delta-join.left.cache-size


Sol tablo için önbelleğe alınacak anahtar sayısı. Bu değeri belleğe ve sıcak veri kalıplarına göre ayarlayın.


table.exec.delta-join.right.cache-size


Sağ tablo için önbelleğe alınacak anahtar sayısı. Bu değeri belleğe ve sıcak veri kalıplarına göre ayarlayın.

Delta Join'i etkinleştirdikten sonra, Flink işine genel bakışta Delta Join düğümü görünür; bu, optimizasyonun etkin olduğunu gösterir.

Arama birleşimi (boyut tablosu birleşimi)

Genel bakış

Bir Fluss birincil anahtar tablosunu Flink SQL boyut tablosu olarak kullanabilirsiniz. Arama birleşimi, akış verilerini boyutsal verilerle gerçek zamanlı olarak zenginleştirmenize olanak tanır. Fluss, verimli KV nokta aramalarını ve ikincil dizin aramalarını destekleyerek düşük gecikmeli boyut tablosu birleştirme senaryoları için uygun hale gelir.

Sınırlamalar
  • Boyut tablosu olarak yalnızca bir birincil anahtar tablosu kullanılabilir.

  • Birleşim koşulu, boyut tablosunun tüm birincil anahtar alanlarını içermelidir.

Eşzamanlı ve eşzamansız modlar


Mod


Yapılandırma


Açıklama


Eşzamansız (varsayılan)


'lookup.async' = 'true'


Yüksek aktarım hızı sağlar. Çoğu kullanım durumu için önerilir.


Eşzamanlı


'lookup.async' = 'false'


Kayıtları sırayla sorgular. Hata ayıklama veya düşük eşzamanlılık senaryoları için uygundur.

SQL örnekleri
-- Configure lookup cache by using a hint to perform a dimension table join
SELECT
  o.order_id,
  o.amount,
  u.user_name,
  p.product_name
FROM `fluss_catalog`.`fluss_db`.orders AS o
LEFT JOIN `fluss_catalog`.`fluss_db`.user_dim
  /*+ OPTIONS('lookup.cache' = 'PARTIAL', 'lookup.partial-cache.expire-after-write' = '60s', 'lookup.partial-cache.max-rows' = '10000') */
  FOR SYSTEM_TIME AS OF o.proctime AS u
  ON o.user_id = u.user_id
LEFT JOIN `fluss_catalog`.`fluss_db`.product_dim
  FOR SYSTEM_TIME AS OF o.proctime AS p
  ON o.product_id = p.product_id;

-- Use synchronous lookup mode (suitable for debugging)
SELECT o.order_id, o.amount, d.user_name
FROM `fluss_catalog`.`fluss_db`.orders AS o
LEFT JOIN `fluss_catalog`.`fluss_db`.user_dim
  /*+ OPTIONS('lookup.async' = 'false') */
  FOR SYSTEM_TIME AS OF o.proctime AS d
  ON o.user_id = d.user_id;

Birleştirme motoru

Genel bakış

Fluss birincil anahtar tabloları, sistemin aynı birincil anahtara sahip kayıtları nasıl birleştireceğini kontrol etmek için bir birleştirme motoru yapılandırmanıza olanak tanır. Aşağıdaki stratejilerden birini seçmek için table.merge-engine parametresini kullanın:


Birleştirme motoru


Açıklama


last_row (varsayılan)


En son yazılan kaydı tutar. Daha geç gelen veriler daha erken gelen verilerin üzerine yazar. Bu motor, çoğu upsert senaryosu için uygundur.


first_row


İlk yazılan kaydı tutar, aynı birincil anahtara sahip sonraki verileri yoksayar. Bu motor, günlük deduplikasyonu gibi deduplikasyon senaryoları için uygundur.


versioned


Belirtilen bir sürüm sütunundan en yüksek sürüm numarasına sahip kaydı tutar. Sürüm sütununu belirtmek için table.merge-engine.versioned.ver-column parametresini gerektirir. Bu motor, veri güncelleme sırasının sürümlere göre kontrol edilmesinin gerektiği senaryolar için uygundur.

SQL örnekleri
-- Use first_row for deduplication
CREATE TABLE IF NOT EXISTS `fluss_catalog`.fluss_db.event_dedup (
    event_id STRING,
    event_type STRING,
    event_time TIMESTAMP(3),
    payload STRING,
    PRIMARY KEY (event_id) NOT ENFORCED
) WITH (
  'table.merge-engine' = 'first_row'
);

-- Use versioned to update based on a version column
CREATE TABLE IF NOT EXISTS `fluss_catalog`.fluss_db.user_profile (
    user_id BIGINT,
    user_name STRING,
    age INT,
    update_version BIGINT,
    PRIMARY KEY (user_id) NOT ENFORCED
) WITH (
  'table.merge-engine' = 'versioned',
  'table.merge-engine.versioned.ver-column' = 'update_version'
);

Bölümlenmiş tablo

Genel bakış

Fluss bölümlenmiş tabloları destekler. Verileri bir bölüm anahtarına göre farklı fiziksel bölümlere ayırmak için PARTITIONED BY kullanabilirsiniz. Bu, zaman veya iş boyutlarına göre veri yaşam döngülerini yönetmek ve sorgu performansını artırmak için idealdir. Bölümlenmiş tablolar tek alanlı bölümlendirmeyi ve çok alanlı bölümlendirmeyi destekler ve üç dik bölümlendirme yönetimi stratejisi sunar: manuel yönetim, otomatik yönetim ve dinamik oluşturma.

Temel kurallar
  • Bir bölüm anahtarının veri türü STRING olmalıdır.

  • Bir birincil anahtar tablosu için bölüm anahtarı, birincil anahtarın bir alt kümesi olmalıdır.

  • Otomatik bölümlendirme kurallarını yalnızca tabloyu oluştururken yapılandırabilirsiniz; bunları daha sonra değiştiremezsiniz.

Bölüm yönetimi stratejileri


Strateji


Açıklama


Manuel yönetim


ALTER TABLE kullanarak bölümleri manuel olarak oluşturun veya silin. Bu strateji, sınırlı ve kontrol edilebilir sayıda bölüm içeren senaryolar için uygundur.


Otomatik yönetim


Sistem, zamana dayalı kurallara göre yeni bölümleri otomatik olarak oluşturur ve süresi dolmuş geçmiş bölümleri temizler. Bu strateji, sürekli, zamana dayalı veri alımı için uygundur.


Dinamik oluşturma


Veri yazıldığında, hedef bölüm yoksa istemci otomatik olarak oluşturur. Bu strateji, öngörülemeyen bölüm değerleri içeren senaryolar için uygundur.

Bu üç strateji diktir ve kombinasyon halinde kullanılabilir. Örneğin, zamana dayalı oluşturma ve temizleme için otomatik yönetimi ve önceden oluşturulmamış bölümleri işlemek için bir geri dönüş mekanizması olarak dinamik oluşturmayı aynı anda etkinleştirebilirsiniz.

SQL örnekleri

1. Otomatik bölüm yönetimi ile tek alanlı bölümlenmiş bir tablo oluşturun

CREATE TABLE `fluss_catalog`.fluss_db.site_access (
  site_id BIGINT,
  user_name STRING,
  pv BIGINT,
  event_day STRING,
  PRIMARY KEY (site_id, event_day) NOT ENFORCED
) PARTITIONED BY (event_day) WITH (
  'table.auto-partition.enabled' = 'true',
  'table.auto-partition.time-unit' = 'DAY',
  'table.auto-partition.num-precreate' = '5',
  'table.auto-partition.num-retention' = '30',
  'table.auto-partition.time-zone' = 'Asia/Shanghai'
);

2. Çok alanlı bölümlenmiş bir tablo oluşturun

CREATE TABLE `fluss_catalog`.fluss_db.region_access (
  access_id BIGINT,
  user_name STRING,
  event_date STRING,
  region STRING,
  PRIMARY KEY (access_id, event_date, region) NOT ENFORCED
) PARTITIONED BY (event_date, region) WITH (
  'table.auto-partition.enabled' = 'true',
  'table.auto-partition.key' = 'event_date',
  'table.auto-partition.time-unit' = 'DAY',
  'table.auto-partition.num-retention' = '7'
);
Not : Çok alanlı bölümlendirme için, otomatik bölümlendirme için zamana dayalı anahtarı table.auto-partition.key kullanarak belirtmeniz gerekir. Çok alanlı bölümlendirme yalnızca otomatik süre sonu ve temizlemeyi destekler, otomatik önceden oluşturmayı desteklemez. num-precreate parametresi 0'a zorlanır.

3. Bölümleri manuel olarak yönetin

-- View all partitions
SHOW PARTITIONS `fluss_catalog`.fluss_db.site_access;

-- Manually add a partition
ALTER TABLE `fluss_catalog`.fluss_db.site_access
  ADD PARTITION (event_day = '20250315');

-- Manually drop a partition
ALTER TABLE `fluss_catalog`.fluss_db.site_access
  DROP PARTITION (event_day = '20250101');

4. Bölümleri dinamik olarak oluşturun

Veri yazdığınızda, hedef bölüm yoksa istemci bunu otomatik olarak oluşturur. Bu özellik varsayılan olarak etkindir.

-- Write data. If the partition '20250701' does not exist, it is automatically created.
INSERT INTO `fluss_catalog`.fluss_db.site_access
VALUES (1, 'hello', 100, '20250701');

client.writer.dynamic-create-partition.enabled istemci parametresi (varsayılan: true) dinamik oluşturmayı kontrol eder. max.partition.num (varsayılan: 1000) ve max.bucket.num (varsayılan: 128000) küme düzeyindeki sınırlamalara tabidir.

Bölüm budama

Akış veya toplu iş modunda bölümlenmiş bir tabloyu sorguladığınızda, Fluss bölüm budamayı destekler. Bir WHERE yan tümcesinde bölüm anahtarına göre filtreleme yaparak, sorgu yalnızca eşleşen bölümleri okur; bu da gereksiz G/Ç yükünü azaltır.

-- Read only the data from the partition for a specific date
SELECT * FROM `fluss_catalog`.`fluss_db`.site_access
WHERE event_day = '20250315';

-- Filter a multi-field partitioned table by region
SELECT * FROM `fluss_catalog`.`fluss_db`.region_access
WHERE region = 'US';
Otomatik bölümleme parametreleri


Parametre


Tür


Varsayılan


Açıklama


table.auto-partition.enabled


Boolean


false


Otomatik bölüm yönetiminin etkinleştirilip etkinleştirilmeyeceğini belirtir.


table.auto-partition.key


String


Yok


Çok alanlı bölümleme için otomatik bölümlemede kullanılacak zaman tabanlı anahtarı belirtir. Tek alanlı bölümleme için bu parametreye gerek yoktur.


table.auto-partition.time-unit


Enum


DAY


Otomatik bölümleme için zaman hassasiyetini belirler. Geçerli değerler şunlardır: HOUR, DAY, MONTH, QUARTER ve YEAR.


table.auto-partition.num-precreate


Integer


2


Önceden oluşturulacak gelecekteki bölüm sayısıdır. Çok alanlı bölümleme için desteklenmez; bu durumda değer zorunlu olarak 0'dır.


table.auto-partition.num-retention


Integer


7


Saklanacak geçmiş bölüm sayısıdır. Bu sınırı aşan süresi dolmuş bölümler otomatik olarak silinir.


table.auto-partition.time-zone


String


Sistem saat dilimi


Otomatik bölümleme için kullanılan saat dilimidir.

En iyi uygulamalar
  • Doğru bölüm hassasiyetini seçin: Veri hacminize ve sorgu desenlerinize uygun bir zaman hassasiyeti belirleyin. Büyük veri hacimleri ve dar sorgu zaman aralıkları için DAY veya HOUR ile bölümleme önerilir. Daha küçük veri hacimleri için MONTH veya QUARTER ile bölümleme yapabilirsiniz.

  • Mantıklı bir saklama ilkesi belirleyin: Geçmiş bölüm sayısını kontrol etmek için num-retention kullanın. Bu yaklaşım, meta veri şişmesini önlemeye yardımcı olur ve aşırı sayıda bölümden kaynaklanan küme yönetim yükünü azaltır.

  • Otomatik yönetim ve dinamik oluşturma yöntemlerini birleştirin: Rutin zaman tabanlı bölüm oluşturma ve temizleme işlemleri için otomatik yönetimi kullanın; anormal veya gecikmeli verileri işlemek için dinamik oluşturmayı yedek çözüm olarak uygulayın.

  • Küme sınırlarını göz önünde bulundurun: max.partition.num parametresi (varsayılan: 1000), tablo başına düşen bölüm sayısını sınırlar. Kümedeki toplam paket sayısı max.bucket.num (varsayılan: 128.000) ile sınırlıdır. Bir tablodaki toplam paket sayısı (bölüm sayısı × bucket.num) bu sınırı aşmamalıdır.

Akış sorgusu aşağı itme (pushdown)

Fluss, günlük iletimi için Apache Arrow sütunlu depolama biçimini kullanır. Bu yapı, filtreleme ve projeksiyon işlemlerinin depolama katmanına aktarılmasını destekler; böylece veri transfer hacmi azalır ve sorgu performansı 10 kata kadar artabilir.

Bu özellik özellikle aşağıdaki senaryolarda etkilidir:

  • Geniş bir tablodan yalnızca belirli sütunların okunması (projeksiyon aşağı itme).

  • Belirli koşullara dayalı olarak büyük miktardaki verinin filtrelenmesi (yüklem aşağı itme).

Günlük depolama biçimi, varsayılan değeri ARROW olan table.log.format parametresi ile kontrol edilir.

Birleşik akış-göl mimarisi

Genel Bakış

Fluss, gerçek zamanlı verileri Fluss'tan Apache Paimon gibi bir veri gölüne otomatik olarak senkronize edebilen birleşik bir akış-göl mimarisini destekler. Bu sayede sıcak ve soğuk veriler için otomatik katmanlı depolama sağlanır; gerçek zamanlı sorguların düşük gecikme süresi ile geçmiş verilerin düşük depolama maliyeti arasında denge kurulur.

Temel özellikler:

  • Fluss'tan gelen akış verilerini otomatik olarak Paimon göl depolamasına yazar.

  • Sıcak ve soğuk verileri otomatik olarak katmanlara ayırır. Sıcak veriler Fluss akış depolamasında tutulurken soğuk veriler Paimon'a taşınır.

  • Hem akış hem de göl depolamasındaki verilere aynı anda erişmek için birleşik bir Flink SQL sorgu arabirimi sunar.

Yapılandırma parametreleri


Parametre


Tür


Varsayılan


Açıklama


table.datalake.enabled


Boolean


false


Göl depolama katmanlamasını etkinleştirir.


table.datalake.format


Enum


Küme varsayılanı


Veri gölü biçimidir. Şu anda yalnızca paimon desteklenmektedir.


table.log.tiered.local-segments


Integer


2


Katmanlı depolama etkinleştirildikten sonra yerel olarak saklanacak günlük segmentlerinin sayısıdır.

Veri keşfi

Genel Bakış

Fluss, Flink SQL toplu iş modunda tablolar üzerinde hızlı veri keşfini destekler. Bu kapsamda LIMIT sorguları, birincil anahtar nokta aramaları ve COUNT(*) toplamları gerçekleştirilebilir. Sürekli çalışan bir akış işi başlatmadan tablodaki verileri hızla görüntüleyebilirsiniz. Bu yetenek geliştirme, hata ayıklama, veri doğrulama ve sorun giderme süreçlerinde faydalıdır.

LIMIT sorguları

Birincil anahtarlı ve yalnızca ekleme yapılabilen tablolar üzerinde LIMIT sorguları çalıştırarak küçük bir veri örneğini hızlıca alabilirsiniz.

-- View the first 10 records from a primary key table
SELECT * FROM `fluss_catalog`.`fluss_db`.orders LIMIT 10;

-- View the first 5 records from an append-only table
SELECT * FROM `fluss_catalog`.`fluss_db`.events LIMIT 5;

-- Combine with projection to view only specific columns
SELECT order_id, amount, order_time 
FROM `fluss_catalog`.`fluss_db`.orders LIMIT 20;
Birincil anahtar nokta aramaları

Birincil anahtarlı tablolar için WHERE yan tümcesinde birincil anahtarı belirterek kesin nokta aramaları yapabilirsiniz. Bu yöntem, Fluss KV depolama motorundan yararlanarak milisaniye düzeyinde yanıt süreleri sağlar.

-- Perform a point lookup for a single record by its primary key
SELECT * FROM `fluss_catalog`.`fluss_db`.orders
WHERE order_id = 1001;

-- Perform a point lookup with a composite primary key
SELECT * FROM `fluss_catalog`.`fluss_db`.user_orders
WHERE user_id = 12345 AND order_id = 6789;
COUNT(*) toplamları

Birincil anahtarlı bir tablo üzerinde COUNT(*) sorgusu çalıştırarak toplam kayıt sayısını hızlıca elde edebilirsiniz.

-- Count the total number of rows in a primary key table
SELECT COUNT(*) FROM `fluss_catalog`.`fluss_db`.orders;

WITH parametreleri

Depolama parametreleri

Aşağıdaki parametreler tablonun meta verilerine kaydedilir.


Parametre


Tür


Varsayılan değer


Gerekli


Açıklama


bucket.num


Integer


Yok


Hayır


Fluss tablosu için paket sayısıdır. Bu parametre veri okuma ve yazma paralelliğini etkiler. Varsayılan değer, kümenin default.bucket.number yapılandırmasından devralınır.


bucket.key


String


Yok


Hayır


Hash tabanlı veri dağıtımı için kullanılan sütunlardır. Bu sütunlar birincil anahtarın alt kümesi olmalıdır. Birden fazla sütunu virgülle ayırın.


table.log.ttl


Duration


7d


Hayır


Günlük verilerinin saklama süresidir.


table.replication.factor


Integer


Küme varsayılanı


Hayır


Günlük tablosu için çoğaltma faktörüdür. Bu değer tablet sunucu sayısından büyük olamaz.


table.log.format


Enum


ARROW


Hayır


Günlük için depolama biçimidir. Seçenekler arasında sorgu aşağı itmeyi destekleyen sütunlu bir biçim olan ARROW ve INDEXED bulunur.


table.log.arrow.compression.type


Enum


ZSTD


Hayır


ARROW biçimi için sıkıştırma türüdür. Geçerli seçenekler şunlardır: NONE, LZ4_FRAME ve ZSTD.


table.log.arrow.compression.zstd.level


Integer


3


Hayır


ZSTD sıkıştırma seviyesidir (1-22).


table.kv.format


Enum


COMPACTED


Hayır


KV depolama biçimidir. Geçerli seçenekler şunlardır: COMPACTED veya INDEXED.


table.merge-engine


Enum


last_row


Hayır


Birincil anahtarlı tablo için birleştirme stratejisidir. Geçerli seçenekler şunlardır: first_row, versioned ve last_row.


table.merge-engine.versioned.ver-column


String


Yok


Koşullu olarak gerekli


table.merge-engine parametresi versioned olarak ayarlandığında gereklidir. Sürüm sütununun adını belirtir.


table.datalake.enabled


Boolean


false


Hayır


Veri gölü depolama katmanlamasını etkinleştirir veya devre dışı bırakır.


table.datalake.format


Enum


Küme varsayılanı


Hayır


Veri gölü biçimidir. Şu anda yalnızca paimon desteklenmektedir.


table.log.tiered.local-segments


Integer


2


Hayır


Katmanlı depolama etkinleştirildikten sonra yerel olarak saklanacak günlük segmentlerinin sayısıdır.

Otomatik bölümleme parametreleri


Parametre


Tür


Varsayılan değer


Gerekli


Açıklama


table.auto-partition.enabled


Boolean


false


Hayır


Otomatik bölüm oluşturmayı etkinleştirir veya devre dışı bırakır.


table.auto-partition.time-unit


Enum


DAY


Hayır


Otomatik bölümleme için zaman hassasiyetidir. Geçerli seçenekler şunlardır: YEAR, QUARTER, MONTH, DAY ve HOUR.


table.auto-partition.num-precreate


Integer


2


Hayır


Kontrol sırasında önceden oluşturulacak gelecekteki bölüm sayısıdır.


table.auto-partition.num-retention


Integer


7


Hayır


Saklanacak geçmiş bölüm sayısıdır. Daha eski bölümler otomatik olarak silinir.


table.auto-partition.time-zone


String


Sistem saat dilimi


Hayır


Otomatik bölümleme için kullanılan saat dilimidir.

Okuma parametreleri

Aşağıdaki parametreler WITH yan tümcesi veya SQL ipuçları aracılığıyla yapılandırılabilir.


Parametre


Tür


Varsayılan değer


Gerekli


Açıklama


scan.startup.mode


Enum


full


Hayır


Tüketim başlangıç modudur. Geçerli seçenekler şunlardır: full, earliest, latest ve timestamp.


scan.startup.timestamp


Long/String


Yok


Koşullu olarak gerekli


Başlangıç zaman damgasıdır; milisaniye cinsinden bir değer veya yyyy-MM-dd HH:mm:ss biçiminde bir dize olabilir. Bu parametre yalnızca scan.startup.mode parametresi timestamp olarak ayarlandığında uygulanır.


scan.partition.discovery.interval


Duration


1 dakika


Hayır


Yeni bölümlerin otomatik olarak keşfedilmesi için kullanılan aralıktır. Otomatik keşfi devre dışı bırakmak için negatif bir değer ayarlayın.


client.scanner.log.check-crc


Boolean


true


Hayır


Veri bütünlüğünü sağlamak amacıyla mesajlarda CRC32 kontrolü yapılıp yapılmayacağını belirtir.


client.scanner.log.max-poll-records


Integer


500


Hayır


Tek bir poll() çağrısının döndürebileceği maksimum kayıt sayısıdır.


client.scanner.log.fetch.max-bytes


MemorySize


16mb


Hayır


İstek başına sunucudan alınacak maksimum bayt sayısıdır.


client.scanner.log.fetch.max-bytes-for-bucket


MemorySize


1mb


Hayır


Tek bir istekte paket başına alınacak maksimum bayt sayısıdır.


client.scanner.log.fetch.min-bytes


MemorySize


1b


Hayır


Sunucunun getirme isteği için döndürmesi gereken minimum veri boyutudur.


client.scanner.log.fetch.wait-max-time


Duration


500ms


Hayır


Minimum bayt sayısına ulaşılmadığında sunucunun beklediği maksimum süredir.


client.scanner.io.tmpdir


String


Sistem geçici dizini


Hayır


Anlık görüntüler ve günlük segmentleri gibi geçici dosyaların saklandığı yerel dizindir.


client.scanner.remote-log.prefetch-num


Integer


4


Hayır


Önbelleğe alınacak uzak günlük segmentlerinin sayısıdır.


client.remote-file.download-thread-num


Integer


3


Hayır


Uzak dosyaları indirmek için kullanılan iş parçacığı sayısıdır.

Yazma parametreleri

Aşağıdaki parametreler WITH yan tümcesi veya SQL ipuçları aracılığıyla yapılandırılabilir.


Parametre


Tür


Varsayılan değer


Gerekli


Açıklama


sink.ignore-delete


Boolean


false


Hayır


Kaynaktan gelen DELETE ve UPDATE_BEFORE mesajlarının yok sayılıp sayılmayacağını belirtir.


sink.bucket-shuffle


Boolean


true


Hayır


Yazma işleminden önce verilerin paket kimliğine göre karıştırılıp karıştırılmayacağını belirtir; bu yaklaşım yazma performansını artırabilir.


client.writer.buffer.memory-size


MemorySize


64mb


Hayır


Satır verileri için dahili arabelleğin toplam bellek boyutudur.


client.writer.batch-size


MemorySize


2mb


Hayır


Aynı paketteki kayıtlar için hedef toplu iş boyutudur.


client.writer.buffer.wait-timeout


Duration


Long.MAX


Hayır


Yazarın kullanılabilir bir segment için beklerken bloke olduğu maksimum süredir.


client.writer.batch-timeout


Duration


100ms


Hayır


Kayıtların toplu iş halinde gönderilmeden önce arabellekte tutulacağı maksimum süredir.


client.writer.bucket.no-key-assigner


Enum


STICKY


Hayır


Birincil anahtarı olmayan tablolar için paket atama stratejisidir. Geçerli seçenekler şunlardır: STICKY veya ROUND_ROBIN.


client.writer.acks


String


all


Hayır


Yazma işlemleri için onay düzeyidir. all (veya -1): Tüm çoğaltmaların onay vermesini bekler. 1: Yalnızca liderin onay vermesini bekler. 0: Herhangi bir onay beklemez. Maksimum veri dayanıklılığı için all ayarı önerilir.


client.writer.request-max-size


MemorySize


10mb


Hayır


Tek bir isteğin bayt cinsinden maksimum boyutudur.


client.writer.retries


Integer


MAX_VALUE


Hayır


Yeniden denenebilir bir hatayla başarısız olan gönderme işleminin kaç kez yeniden deneneceğini belirtir.


client.writer.enable-idempotence


Boolean


true


Hayır


Tam olarak bir kez çalışma semantiği ve mesaj sıralama garantileri sağlayan idempotent yazmaları etkinleştirir.


client.writer.max-inflight-requests-per-bucket


Integer


5


Hayır


Paket başına devam eden maksimum istek sayısıdır. Bu parametre yalnızca idempotent yazmalar etkinleştirildiğinde uygulanır.

Boyut tablosu parametreleri


Parametre


Tür


Varsayılan değer


Gerekli


Açıklama


lookup.async


Boolean


true


Hayır


Eşzamansız aramayı etkinleştirir; bu yaklaşım boyut tablosu birleştirmeleri için aktarım hızını artırabilir.


lookup.cache


Enum


NONE


Hayır


Önbellek ilkesidir. Geçerli seçenekler şunlardır: NONE (önbellek yok) veya PARTIAL (kısmi önbellekleme).


lookup.max-retries


Integer


3


Hayır


Arama başarısız olduğunda yapılacak maksimum yeniden deneme sayısıdır.


lookup.partial-cache.expire-after-access


Duration


Yok


Hayır


Son erişimden sonraki önbellek sona erme süresidir.


lookup.partial-cache.expire-after-write


Duration


Yok


Hayır


Son yazma işleminden sonraki önbellek sona erme süresidir.


lookup.partial-cache.cache-missing-key


Boolean


true


Hayır


Boyut tablosunda bulunmayan anahtarların (yani null değerlerin) önbelleğe alınıp alınmayacağını belirtir.


lookup.partial-cache.max-rows


Long


Yok


Hayır


Önbellekteki maksimum satır sayısıdır.


client.lookup.queue-size


Integer


25600


Hayır


Bekleyen arama işlemleri için kuyruk boyutudur.


client.lookup.max-batch-size


Integer


128


Hayır


Birden fazla arama işlemini birleştirmek için kullanılan maksimum toplu iş boyutudur.


client.lookup.max-inflight-requests


Integer


128


Hayır


Devam eden maksimum arama isteği sayısıdır.


client.lookup.batch-timeout


Duration


100ms


Hayır


Arama toplu işi doldurulana kadar beklenecek maksimum süredir.

Veri alma

Fluss konektörü, veri alma YAML işinde veri havuzu olarak görev yapar.

Söz dizimi

source:
   type: xxx

sink:
  type: fluss
  name: Fluss Sink
  bootstrap.servers: localhost:9123
  properties.client.security.protocol: sasl
  properties.client.security.sasl.mechanism: PLAIN
  properties.client.security.sasl.username: developer
  properties.client.security.sasl.password: developer-pass
  

pipeline:
  schema.change.behavior: IGNORE

Şema değişikliği

Fluss Server yeni sütun eklemeyi destekler ancak diğer sütun işlemlerini (sütun silme, sütun yeniden adlandırma veya sütun türü değiştirme gibi) desteklemez. Bu nedenle, varsayılan Flink CDC schema.change.behavior = LENIENT ayarını kullanmanızı öneririz:

  • Bir sütun yeniden adlandırıldığında konektör iki olay gönderir. Konektör özgün sütunu silmez; bunun yerine sütunun veri türünü nullable olarak değiştirir ve yeni ada sahip, nullable veri türünde yeni bir sütun ekler.

  • Bir sütun kaldırıldığında konektör, sütunun veri türünü nullable olarak değiştiren bir sütun türü değişikliği olayı gönderir.

  • Bir sütun eklendiğinde konektör bir sütun ekleme olayı gönderir ancak sütunun veri türünü nullable olarak değiştirir.

Not

Bu özellik VVR 11.6 veya daha yeni bir sürüm gerektirir.

Parametreler

Parametre

Açıklama

Zorunlu

Tür

Varsayılan

Açıklamalar

type

Havuz (sink) türünü belirtir.

Evet

String

Yok

Sabit değer: fluss.

name

Havuz (sink) adını belirtir.

Hayır

String

Yok

Yok.

bootstrap.servers

Fluss Server adresini belirtir.

Evet

String

Yok

Biçim: host:port,host:port,host:port. Birden fazla adresi ayırmak için virgül (,) kullanın.

bucket.key

Paket anahtarını belirtir.

Hayır

String

Yok

Her Fluss tablosu için veri dağıtım ilkesini belirtin. Tablolar ';' ile, paket anahtarları ise ',' ile ayrılır.

Biçim: database1.table1:key1,key2;database1.table2:key3.

Veriler, paket anahtarının karma değerine göre paketlere dağıtılır. Paket anahtarı, birincil anahtarın bir alt kümesi olmalı ve birincil anahtarlı bir tablonun bölümleme anahtarını içermemelidir. Bir tabloda birincil anahtar varsa ancak paket anahtarı belirtilmemişse, paket anahtarı varsayılan olarak birincil anahtara (bölümleme anahtarı hariç) eşit olur. Tabloda birincil anahtar yoksa ve paket anahtarı belirtilmemişse veriler paketlere rastgele dağıtılır.

bucket.key ve bucket.num değerleri tablo oluşturulduktan sonra değiştirilemez.

bucket.num

Fluss tablolarındaki paket sayısını belirtir.

Hayır

String

Yok

Her Fluss tablosu için paket numarası. Numaralar ';' ile ayrılır.

Biçim: database1.table1:4;database1.table2:8.

Bir tablo için yapılandırılmış paket numarası yoksa sunucu tarafındaki default.bucket.number yapılandırma öğesi varsayılan olarak kullanılır.

bucket.key ve bucket.num değerleri tablo oluşturulduktan sonra değiştirilemez.

properties.table.*

Fluss tablo özellikleri.

Hayır

String

Yok

Fluss tabloları tarafından desteklenen parametreleri işlem hattına iletir. Daha fazla bilgi için bkz. Fluss tablo seçenekleri.

properties.client.*

Fluss istemci parametreleri.

Hayır

String

Yok

Fluss istemcisi tarafından desteklenen parametreleri işlem hattına iletir. Daha fazla bilgi için bkz. Fluss istemci seçenekleri.

Tür eşlemesi

Aşağıdaki tabloda, veri alımı için veri türü eşlemesi gösterilmektedir.

CDC alan türü

Fluss alan türü

TINYINT

TINYINT

SMALLINT

SMALLINT

INT

INT

BIGINT

BIGINT

FLOAT

FLOAT

DOUBLE

DOUBLE

DECIMAL(p, s)

DECIMAL(p, s)

BOOLEAN

BOOLEAN

DATE

DATE

TIME

TIME

TIMESTAMP

TIMESTAMP

TIMESTAMP_LTZ

TIMESTAMP_LTZ

CHAR(n)

CHAR(n)

VARCHAR(n)

STRING

ARRAY

ARRAY

MAP

MAP

ROW

ROW

BINARY(n)

Desteklenmiyor

VARBINARY(n)