Tüm Ürünler
Search
Belge Merkezi

Tablestore:Consume data from a tunnel

Son Güncelleme:Oct 02, 2026

Tablestore SDK for Java, bir tünel üzerinden verileri sürekli olarak tüketmenize, her toplu işi bir geri arama ile işlemeye ve kalp atışlarını, denetim noktalarını, iş parçacığı havuzları ile tüketim eşzamanlılığını yapılandırmanıza olanak tanır.

Kullanım notları

  • Artımlı günlüklerin saklama süresi, tablonun Stream günlük sona erme süresiyle aynıdır ve en fazla yedi gün olabilir. BaseAndStream türündeki bir tünel için tam veri tüketimi bu süre içinde tamamlanmazsa, artımlı veri tüketimi başladığında OTSTunnelExpired hatası döndürülür. Tünel, artımlı veri tüketimine devam edemez.

  • Artımlı tüketim saklama süresinin gerisinde kalırsa, tünel en son kullanılabilir veriden devam edebilir. Bu durumda bazı veriler tüketilmeyebilir.

  • Süresi dolmuş bir tünel devre dışı bırakılabilir. Tünel 30 günden fazla süreyle devre dışı kalırsa silinir ve geri yüklenemez.

Ön koşullar

Tablestore SDK for Java öğesini yükleyin ve TunnelClient'ı başlatın.

Özellik açıklaması

TunnelWorker öğesi, tünel kimliği kullanarak bir tünele bağlanır, kalp atışları aracılığıyla mevcut istemciye atanan kanalları alır, verileri sürekli çeker ve her kayıt topluluğunu IChannelProcessor öğesine iletir. Birden çok TunnelWorker örneği aynı tüneli tüketirse, sunucu kanalları istemciler arasında dağıtır.

Bir tünel üzerinden veri tüketmek için:

  1. IChannelProcessor uygulayın. Her toplu işi işlemek için process yöntemini ve geri aramanın kullandığı kaynakları serbest bırakmak için shutdown yöntemini kullanın.

  2. Geri aramayı ve tüketim davranışını yapılandırmak üzere bir TunnelWorkerConfig nesnesi oluşturun.

  3. Tünel kimliği, TunnelClient ve TunnelWorkerConfig ile bir TunnelWorker oluşturun.

  4. Tüketimi başlatmak için connectAndWorking çağrısını yapın.

    void process(ProcessRecordsInput input);
    void shutdown();

Aşağıdaki örnek, tünel üzerinden çekilen her kaydı yazdırır ve ardından tüketimi başlatır.

private static class SimpleProcessor implements IChannelProcessor {
    @Override
    public void process(ProcessRecordsInput input) {
        for (StreamRecord record : input.getRecords()) {
            System.out.println(record);
        }
    }

    @Override
    public void shutdown() {
        // Release resources used by the callback.
    }
}

String tunnelId = "example_tunnel_id";
TunnelWorkerConfig config =
        new TunnelWorkerConfig(new SimpleProcessor());
TunnelWorker worker =
        new TunnelWorker(tunnelId, tunnelClient, config);
worker.connectAndWorking();
Önemli

connectAndWorking arka plan tüketim görevlerini başlattıktan sonra döner. Uygulama sürecinin çalışır durumda kalmasını sağlayın. Tüketimi durdurmak için worker.shutdown(), config.shutdown() ve tunnelClient.shutdown() çağrılarını bu sırayla yapın. worker.shutdown() tünel bağlantılarını kapatır ve geri aramanın shutdown yöntemini çağırır. config.shutdown() okuma, işleme ve yardımcı iş parçacığı havuzlarını kapatır. TunnelWorker çalışanı durdurmaya çalışan bir JVM kapatma hook'u kaydeder ancak uygulamanın bu kaynakları açıkça serbest bırakması gerekir.

Parametreler

Çalışan

TunnelWorker oluşturucusu aşağıdaki parametreleri içerir.


Ad


Tür


Açıklama


tunnelId (gerekli)


String


Tünel kimliği. Tünelleri oluşturarak, listeleyerek veya sorgulayarak elde edin.


client (gerekli)


TunnelClientInterface


Başlatılan TunnelClient.


workerConfig (gerekli)


TunnelWorkerConfig


Geri arama ve tüketim davranışı yapılandırması.

Tüketim yapılandırması

workerConfig öğesi TunnelWorkerConfig türündedir ve aşağıdaki parametreleri içerir.


Ad


Tür


Açıklama


channelProcessor (gerekli)


IChannelProcessor


Veri işleme geri araması. Üç parametreli TunnelWorker oluşturucusunu kullandığınızda bu parametre gereklidir.


heartbeatTimeoutInSec (isteğe bağlı)


long


Saniye cinsinden kalp atışı zaman aşımı. Varsayılan değer 300 olup heartbeatIntervalInSec değerinden büyük olmalıdır. Kalp atışı zaman aşımına uğradığında sunucu istemciyi kullanılamaz olarak değerlendirir ve istemci tünele yeniden bağlanır.


heartbeatIntervalInSec (isteğe bağlı)


long


Saniye cinsinden kalp atışı aralığı. Varsayılan değer 30, minimum değer ise 5 olur. Kalp atışları etkin kanalları alır, kanal durumlarını günceller ve veri işleme görevlerini başlatır. Aralık ayrıca TunnelWorker ısınma süresini etkiler.


checkpointIntervalInMillis (isteğe bağlı)


long


Milisaniye cinsinden sunucuda tüketim denetim noktalarının kaydedilme aralığı. Varsayılan değer 5000 olur. Tunnel Service her kaydı en az bir kez iletir ve kayıt sırasını korur. Yeniden başlatılan bir görev en son denetim noktasından devam eder, bu nedenle bazı verileri birden fazla kez işleyebilir. Daha kısa bir aralık yinelenen işlemeyi azaltır ancak denetim noktalarının çok sık kaydedilmesi aktarım hızını düşürebilir.


clientTag (isteğe bağlı)


String


İstemci kimliği oluşturmak ve TunnelWorker örneklerini ayırt etmek için kullanılan özel bir istemci etiketi. Varsayılan değer Java os.name sistem özelliğidir.


readRecordsExecutor (isteğe bağlı)


ThreadPoolExecutor


Veri çeken iş parçacığı havuzu. Varsayılan havuz 32 çekirdek iş parçacığına, en fazla 1000 iş parçacığına, 16 kuyruk kapasitesine ve 60 saniyelik canlı tutma süresine sahiptir.


processRecordsExecutor (isteğe bağlı)


ThreadPoolExecutor


Veri işleyen iş parçacığı havuzu. Varsayılan yapılandırması readRecordsExecutor ile aynıdır. Özel bir havuz için iş parçacığı sayısını tüneldeki kanal sayısına göre yapılandırın.


maxChannelParallel (isteğe bağlı)


int


Verilerin eşzamanlı olarak çekildiği ve işlendiği maksimum kanal sayısı. Bellek kullanımını sınırlamak için bu parametreyi kullanın. Varsayılan değer -1 olup sınır olmadığını belirtir. Tablestore SDK for Java 5.10.0 ve sonraki sürümler bu parametreyi destekler.


channelHelperExecutor (isteğe bağlı)


ThreadPoolExecutor


Kanalları başlatan, işlem hatlarını zamanlayan ve çalışma zamanı hatalarını işleyen yardımcı iş parçacığı havuzu. Bu parametre ayarlanmazsa önbellekli bir iş parçacığı havuzu kullanılır.


maxRetryIntervalInMillis (isteğe bağlı)


int


Artımlı veri çekme sırasında üstel geri çekilme için maksimum temel aralık (milisaniye). Varsayılan değer 2000, minimum değer ise 200 olur. Bir toplu iş 500'den fazla kayıt içermiyorsa ve 900 KB'tan büyük değilse istemci geri çekilme aralığını kademeli olarak artırır. Gerçek aralık, geçerli temel aralığın %75'i ile %125'i arasında rastgele seçilir. Tablestore SDK for Java 5.4.0 ve sonraki sürümler bu parametreyi destekler.


readMaxTimesPerRound (isteğe bağlı)


int


Bir işlem hattı turunda yapılan maksimum ReadRecords çağrı sayısı. Varsayılan değer 1 olur.


readMaxBytesPerRound (isteğe bağlı)


int


Bir işlem hattı turunda çekilen maksimum veri miktarı (bayt). Varsayılan değer 4194304 yani 4 MiB'dir. Tur, bu değere veya readMaxTimesPerRound değerine ulaşıldığında durur.


enableClosingChannelDetect (isteğe bağlı)


boolean

CLOSING durumundaki kanalların gerçek zamanlı olarak algılanıp algılanmayacağını belirtir. CLOSING durumu, bir kanalın bir istemciden diğerine taşındığını gösterir. Tablestore SDK for Java 5.13.13 ve sonraki sürümler bu parametreyi destekler. Sürüm 5.17.0 ve sonrasında varsayılan değer true olur. Algılama devre dışı bırakılırsa, çok sayıda kanal varken istemci kaynakları yetersiz kaldığında kanal taşıma engellenebilir ve tüketim kesintiye uğrayabilir.

Aynı makinede birden çok TunnelWorker örneği başlatırsanız tek bir TunnelWorkerConfig nesnesini yeniden kullanarak okuma ve işleme iş parçacığı havuzlarını paylaşabilirsiniz. Tüm çalışanlar durduktan sonra config.shutdown() çağrısını yalnızca bir kez yapın.

Geri arama verileri

process yöntemi aşağıdaki alanları içeren bir ProcessRecordsInput nesnesi alır.


Alan


Tür


Açıklama


records


List<StreamRecord>


Geçerli toplu işte çekilen kayıtlar. Bunları almak için getRecords() çağrısını yapın.


nextToken


String


Sonraki toplu iş için belirteç. Bunu almak için getNextToken() çağrısını yapın. TunnelWorker bu değeri otomatik olarak kullanarak veri çekmeye devam eder ve denetim noktalarını kaydeder.


traceId


String


Geçerli çekme isteğinin izleme kimliği. Bunu almak için getTraceId() çağrısını yapın.


channelId


String


Geçerli toplu işin ait olduğu kanalın kimliği. Bunu almak için getChannelId() çağrısını yapın. Kanal kimliğinden bölüm kimliğini almak için getPartitionId() çağrısını yapın.

Senaryo örnekleri

Tüketim parametrelerini ayarlama

Tüketim aktarım hızı veya bellek kullanımı gereksinimlerinizi karşılamıyorsa kalp atışı ve denetim noktası aralıklarını, kanal eşzamanlılığını, tur başına çekme sayısı ve boyutunu ile artımlı çekmeler için geri çekilme aralığını ayarlayın.

TunnelWorkerConfig config =
        new TunnelWorkerConfig(new SimpleProcessor());
config.setHeartbeatIntervalInSec(10);
config.setHeartbeatTimeoutInSec(60);
config.setCheckpointIntervalInMillis(10_000);
config.setMaxChannelParallel(16);
config.setReadMaxTimesPerRound(4);
config.setReadMaxBytesPerRound(8 * 1024 * 1024);
config.setMaxRetryIntervalInMillis(3_000);