Tüm Ürünler
Search
Belge Merkezi

DataWorks:Kafka veri kaynağı

Son Güncelleme:Oct 05, 2026

Kafka veri kaynağı, Kafka'dan veri okumak ve Kafka'ya veri yazmak için çift yönlü bir kanal sağlar. Bu konuda, DataWorks'ün Kafka için sunduğu veri senkronizasyon yetenekleri açıklanmaktadır.

Desteklenen sürümler

DataWorks, Alibaba Cloud Kafka'yı ve 0.10.2 ile 3.6.x arasındaki kendi kendine yönetilen Kafka sürümlerini destekler.

Not

0.10.2'den önceki Kafka sürümleri için veri senkronizasyonu desteklenmez. Bunun nedeni, bu sürümlerin bölüm ofsetlerinin alınmasını desteklememesi ve veri yapılarının zaman damgalarını desteklemeyebilmesidir.

Gerçek zamanlı okuma

  • Abonelik tabanlı bir Serverless kaynak grubu kullanıyorsanız, yetersiz kaynak nedeniyle görev hatalarını önlemek için gereken teknik özellikleri önceden tahmin etmelisiniz.

    Konu başına 1 CU tahmin edin. Ayrıca trafiğe göre de kaynak tahmini yapmanız gerekir:

    • Sıkıştırılmamış Kafka verileri için her 10 MB/sn trafik başına 1 CU tahmin edin.

    • Sıkıştırılmış Kafka verileri için her 10 MB/sn trafik başına 2 CU tahmin edin.

    • JSON ayrıştırması gerektiren sıkıştırılmış Kafka verileri için her 10 MB/sn trafik başına 3 CU tahmin edin.

  • Veri Entegrasyonu için abonelik tabanlı Serverless kaynak grubu veya özel kaynak grubunun eski bir sürümünü kullandığınızda:

    • İş yükünüz yük devretmeye karşı yüksek toleransa sahipse, küme yuva kullanımı %80'i aşmamalıdır.

    • İş yükünüz yük devretmeye karşı düşük toleransa sahipse, küme yuva kullanımı %70'i aşmamalıdır.

Not

Gerçek kaynak kullanımı, veri içeriği ve biçimi gibi faktörlere bağlıdır. İlk kaynak değerlendirmenizin ardından, kaynakları gerçek çalışma zamanı kullanımına göre ayarlayın.

Sınırlamalar

Kafka veri kaynağı Serverless kaynak gruplarını (önerilen) ve Veri Entegrasyonu için özel kaynak gruplarının eski sürümlerini destekler.

Tek bir tablodan çevrimdışı okuma

Hem parameter.groupId hem de parameter.kafkaConfig.group.id yapılandırılmışsa, parameter.groupId parametresi kafkaConfig parametresindeki group.id değerine göre önceliklidir.

Tek bir tabloya gerçek zamanlı yazma

Yazma işlemleri için veri çoğaltma kaldırma desteklenmez. Bir ofset sıfırlama veya yük devretme sonrası bir görev yeniden başlatılırsa, yinelenen veriler yazılabilir.

Tüm veritabanı için gerçek zamanlı yazma

  • Gerçek zamanlı veri senkronizasyon görevleri Serverless kaynak gruplarını (önerilen) ve Veri Entegrasyonu için özel kaynak gruplarının eski sürümlerini destekler.

  • Kaynak tabloda bir birincil anahtar varsa, birincil anahtar değeri Kafka kaydının anahtarı olarak kullanılır. Bu, aynı birincil anahtardaki değişikliklerin sıralı olarak aynı Kafka bölümüne yazılmasını sağlar.

  • Kaynak tabloda birincil anahtar yoksa iki seçeneğiniz vardır. Birincil anahtarı olmayan tabloları senkronize etme seçeneğini belirlerseniz, Kafka kaydının anahtarı boş olur. Tablo değişikliklerinin Kafka'ya sıralı olarak yazılmasını sağlamak için hedef Kafka konusunun yalnızca tek bir bölüme sahip olması gerekir. Özel bir birincil anahtar seçerseniz, bir veya daha fazla birincil anahtar olmayan alanın kombinasyonu Kafka kaydının anahtarı olarak kullanılır.

  • Aynı birincil anahtara ait değişikliklerin, Kafka kümesi bir istisna döndürse bile sıralı olarak aynı Kafka bölümüne yazılmasını sağlamak için genişletilmiş parametreler formuna aşağıdaki yapılandırmayı ekleyin.

    {"max.in.flight.requests.per.connection":1,"buffer.memory": 100554432}

    Önemli

    Bu yapılandırma çoğaltma performansını önemli ölçüde düşürür. Performans ile sıkı sıralama ve güvenilirlik ihtiyacı arasında denge kurmanız gerekir.

  • Gerçek zamanlı senkronizasyonda Kafka'ya yazılan mesajların genel biçimi, heartbit mesajlarının biçimi ve kaynak veri değişikliklerine karşılık gelen mesajların biçimi hakkında daha fazla bilgi için bkz. Ek: Mesaj biçimi.

Desteklenen alan türleri

Kafka, yapılandırılmamış veri depolama sağlar. Bir Kafka kaydı genellikle şu alanları içerir: key, value, offset, timestamp, headers ve partition. DataWorks, Kafka'dan veri okurken veya Kafka'ya veri yazarken verileri aşağıdaki şekilde işler.

Veri okuma

DataWorks, Kafka'dan veri okurken JSON biçimindeki verileri ayrıştırabilir. Aşağıdaki tabloda her bir veri modülünün nasıl işlendiği açıklanmaktadır.


Kafka kayıt veri modülü


İşlenen veri türü


key


Veri senkronizasyon görevindeki keyType yapılandırma öğesine bağlıdır. keyType parametresi hakkında daha fazla bilgi için ekte yer alan tam parametre açıklamasına bakın.


value


Veri senkronizasyon görevindeki valueType yapılandırma öğesine bağlıdır. valueType parametresi hakkında daha fazla bilgi için ekte yer alan tam parametre açıklamasına bakın.


offset


Long


timestamp


Long


headers


Dize


partition


Long

Veri yazma

DataWorks, Kafka'ya verileri JSON veya metin biçiminde yazar. İşleme ilkesi, aşağıdaki tabloda açıklandığı gibi senkronizasyon görevi türüne göre değişir.

Önemli
  • Veriler metin biçiminde yazıldığında alan adları dahil edilmez. Alan değerleri bir ayırıcı ile ayrılmıştır.

  • Bir gerçek zamanlı senkronizasyon görevi Kafka'ya veri yazdığında, yerleşik JSON biçimini kullanır. Veriler; veritabanı değiştirme mesajları, iş saati ve Veri Tanımlama Dili (DDL) bilgileri gibi bilgileri içerir. Veri biçimiyle ilgili ayrıntılar için bkz. Ek: Mesaj biçimi.

Senkronizasyon görevi türü

Kafka'ya yazılan value biçimi

Kaynak alan türü

Yazma işlemleri için işleme yöntemi

Çevrimdışı senkronizasyon

DataStudio'daki çevrimdışı senkronizasyon düğümü

json

Dize

UTF-8 kodlu dize

Boolean

"true" veya "false" UTF-8 kodlu dizesine dönüştürülür

Saat/Tarih

yyyy-MM-dd HH:mm:ss biçiminde UTF-8 kodlu dize

Sayısal

UTF-8 kodlu sayısal dize

Bayt akışı

Bayt akışı, UTF-8 kodlu bir dize olarak kabul edilir ve dizeye dönüştürülür.

text

Dize

UTF-8 kodlu dize

Boolean

"true" veya "false" UTF-8 kodlu dizesine dönüştürülür

Saat/Tarih

yyyy-MM-dd HH:mm:ss biçiminde UTF-8 kodlu dize

Sayısal

UTF-8 kodlu sayısal dize

Bayt akışı

Bayt akışı, UTF-8 kodlu bir dize olarak kabul edilir ve dizeye dönüştürülür.

Gerçek zamanlı senkronizasyon: Kafka'ya gerçek zamanlı ETL

DataStudio'daki gerçek zamanlı senkronizasyon düğümü

json

Dize

UTF-8 kodlu dize

Boolean

JSON Boolean türü

Saat/Tarih

  • Milisaniyeden daha az hassasiyete sahip saat değerleri için: Milisaniye cinsinden zaman damgasını temsil eden 13 basamaklı bir JSON tamsayısına dönüştürülür.

  • Mikrosaniye veya nanosaniye hassasiyetine sahip saat değerleri için: Milisaniye zaman damgası için 13 basamaklı bir tamsayı ve nanosaniye zaman damgası için 6 basamaklı bir ondalık sayı içeren bir JSON kayan noktalı sayısına dönüştürülür.

Sayısal

JSON sayısal türü

Bayt akışı

Bayt akışı Base64 ile kodlanır ve ardından UTF-8 kodlu bir dizeye dönüştürülür.

text

Dize

UTF-8 kodlu dize

Boolean

"true" veya "false" UTF-8 kodlu dizesine dönüştürülür

Saat/Tarih

yyyy-MM-dd HH:mm:ss biçiminde UTF-8 kodlu dize

Sayısal

UTF-8 kodlu sayısal dize

Bayt akışı

Bayt akışı Base64 ile kodlanır ve ardından UTF-8 kodlu bir dizeye dönüştürülür.

Gerçek zamanlı senkronizasyon: Tüm veritabanının Kafka'ya gerçek zamanlı senkronizasyonu

Yalnızca artımlı verilerin gerçek zamanlı senkronizasyonu

Yerleşik JSON biçimi

Dize

UTF-8 kodlu dize

Boolean

JSON Boolean türü

Saat/Tarih

13 basamaklı milisaniye zaman damgası

Sayısal

JSON sayısal değeri

Bayt akışı

Bayt akışı Base64 ile kodlanır ve ardından UTF-8 kodlu bir dizeye dönüştürülür.

Senkronizasyon çözümü: Kafka'ya tek tıkla gerçek zamanlı senkronizasyon

Tam çevrimdışı senkronizasyon + artımlı gerçek zamanlı senkronizasyon

Yerleşik JSON biçimi

Dize

UTF-8 kodlu dize

Boolean

JSON Boolean türü

Saat/Tarih

13 basamaklı milisaniye zaman damgası

Sayısal

JSON sayısal değeri

Bayt akışı

Bayt akışı Base64 ile kodlanır ve ardından UTF-8 kodlu bir dizeye dönüştürülür.

Veri kaynağı ekleme

DataWorks'te bir senkronizasyon görevi geliştirmeden önce, gerekli veri kaynağını Veri kaynağı yapılandırması bölümündeki talimatları izleyerek DataWorks'e eklemeniz gerekir. Bir veri kaynağı eklerken parametrelerin anlamlarını anlamak için DataWorks konsolunda parametre açıklamalarını görüntüleyebilirsiniz.

Veri senkronizasyon görevi geliştirme

Bir senkronizasyon görevini yapılandırmaya ilişkin giriş noktası ve yordam hakkında bilgi için aşağıdaki yapılandırma kılavuzlarına bakın.

Tek bir tablo için çevrimdışı senkronizasyon görevi yapılandırma

Tek bir tablo veya tüm veritabanı için gerçek zamanlı senkronizasyon görevi yapılandırma

Talimatlar için bkz. Tek bir tablo için gerçek zamanlı senkronizasyon görevi yapılandırma ve Tüm veritabanı için gerçek zamanlı senkronizasyon görevi yapılandırma.

Kimlik doğrulama yapılandırması

SSL

Bir Kafka veri kaynağı yapılandırırken, Special Authentication Method öğesini SSL veya SASL_SSL olarak ayarlarsanız Kafka kümesi için SSL kimlik doğrulamasını etkinleştirmiş olursunuz. İstemci güven deposu sertifika dosyasını yüklemeniz ve güven deposu parolasını girmeniz gerekir.

  • Kafka kümesi bir Alibaba Cloud Kafka örneğiyse, doğru güven deposu sertifika dosyasını indirmek için SSL sertifika algoritması yükseltme talimatları bölümüne bakın. Güven deposu parolası KafkaOnsClient değeridir.

  • Kafka kümesi bir EMR örneğiyse, doğru güven deposu sertifika dosyasını indirmek ve güven deposu parolasını almak için Kafka bağlantıları için SSL şifrelemesi kullanma bölümüne bakın.

  • Kendi kendine yönetilen bir küme için doğru güven deposu sertifikasını yüklemeniz ve doğru güven deposu parolasını girmeniz gerekir.

Anahtar deposu sertifika dosyası, anahtar deposu parolası ve SSL parolası yalnızca Kafka kümesi için çift yönlü SSL kimlik doğrulaması etkinleştirildiğinde gereklidir. Kafka kümesi sunucusu, istemcinin kimliğini doğrulamak için bunu kullanır. Çift yönlü SSL kimlik doğrulaması, Kafka kümesinin server.properties dosyasında ssl.client.auth=required ayarlandığında etkinleştirilir. Daha fazla bilgi için bkz. Kafka bağlantıları için SSL şifrelemesi kullanma.

GSSAPI

Bir Kafka veri kaynağı yapılandırırken Sasl Mechanism öğesini GSSAPI olarak ayarlarsanız, üç kimlik doğrulama dosyası yüklemeniz gerekir: bir JAAS yapılandırma dosyası, bir Kerberos yapılandırma dosyası ve bir Keytab dosyası. Ayrıca, özel kaynak grubu için DNS/HOST ayarlarını yapılandırmanız gerekir. Aşağıdaki bölümlerde bu dosyalar ve gerekli DNS ve HOST ayarları açıklanmaktadır.

Not

Bir Serverless kaynak grubu için, dahili DNS çözümlemesini kullanarak ana bilgisayar adresi bilgilerini yapılandırmanız gerekir. Daha fazla bilgi için bkz. Dahili DNS çözümlemesi (PrivateZone).

  • JAAS yapılandırma dosyası

    JAAS dosyası KafkaClient ile başlamalı ve ardından tüm yapılandırma öğeleri bir çift süslü parantez {} içine alınmalıdır:

    • Süslü parantezlerin içindeki ilk satır, kullanılacak oturum açma bileşeni sınıfını tanımlar. Farklı SASL kimlik doğrulama mekanizmaları için oturum açma bileşeni sınıfı sabittir. Sonraki her yapılandırma öğesi anahtar=değer biçiminde yazılır.

    • Sonuncusu dışındaki tüm yapılandırma öğeleri noktalı virgül ile bitmemelidir.

    • Son yapılandırma öğesi noktalı virgül ile bitmeli ve kapatma süslü parantezinden } sonra başka bir noktalı virgül eklenmelidir.

    Biçim gereksinimleri karşılanmazsa JAAS yapılandırma dosyası ayrıştırılamaz. Aşağıdaki kod tipik bir JAAS yapılandırma dosyası biçimini göstermektedir. xxx yer tutucularını gerçek bilgilerinizle değiştirin.

    KafkaClient {
       com.sun.security.auth.module.Krb5LoginModule required
       useKeyTab=true
       keyTab="xxx"
       storeKey=true
       serviceName="kafka-server"
       principal="kafka-client@EXAMPLE.COM";
    };


    Yapılandırma öğesi


    Açıklama


    Oturum açma modülü


    com.sun.security.auth.module.Krb5LoginModule olarak ayarlanmalıdır.


    useKeyTab


    true olarak ayarlanmalıdır.


    keyTab


    Herhangi bir yol belirtebilirsiniz. Senkronizasyon görevi çalıştırıldığında, sistem veri kaynağı yapılandırması sırasında yüklediğiniz keytab dosyasını otomatik olarak yerel bir yola indirir. Sistem daha sonra keytab yapılandırma öğesi için bu yerel yolu kullanır.


    storeKey


    İstemcinin anahtarı kaydedip kaydetmeyeceğini belirtir. true veya false olarak ayarlayabilirsiniz. Veri senkronizasyonunu etkilemez.


    serviceName


    Kafka sunucusunun server.properties yapılandırma dosyasındaki sasl.kerberos.service.name yapılandırma öğesine karşılık gelir. Bu öğeyi ihtiyaca göre yapılandırın.


    principal


    Kafka istemcisi tarafından kullanılan Kerberos asıl adı. Gerektiği gibi yapılandırın ve yüklenen keytab dosyasının bu asıl ada ait anahtarı içerdiğinden emin olun.

  • Kerberos yapılandırma dosyası

    Kerberos yapılandırma dosyası [libdefaults] ve [realms] olmak üzere iki modül içermelidir.

    • [libdefaults] modülü Kerberos kimlik doğrulama parametrelerini belirtir. Modüldeki her yapılandırma öğesi anahtar=değer biçiminde yazılır.

    • [realms] modülü Anahtar Dağıtım Merkezi (KDC) adresini belirtir. Birden çok realm alt modülü içerebilir. Her realm alt modülü, realm adı ve ardından bir eşittir işareti (=) ile başlar.

    Bunu, süslü parantezler içine alınmış bir dizi yapılandırma öğesi izler. Her yapılandırma öğesi de anahtar=değer biçiminde yazılır. Aşağıdaki kod tipik bir Kerberos yapılandırma dosyası biçimini göstermektedir. xxx yer tutucularını gerçek bilgilerinizle değiştirin.

    [libdefaults]
      default_realm = xxx
    
    [realms]
      xxx = {
        kdc = xxx
      }


    Yapılandırma öğesi


    Açıklama


    [libdefaults].default_realm


    Kafka küme düğümlerine erişirken kullanılan varsayılan realm. Bu genellikle JAAS yapılandırma dosyasında belirtilen istemci asıl adının realm'i ile aynıdır.


    Diğer [libdefaults] parametreleri


    [libdefaults] modülü ticket_lifetime gibi diğer Kerberos kimlik doğrulama parametrelerini belirtebilir. Bunları ihtiyaca göre yapılandırın.


    [realms].realm adı


    JAAS yapılandırma dosyasında belirtilen istemci asıl adının realm'i ve [libdefaults].default_realm ile aynı olmalıdır. JAAS yapılandırma dosyasındaki istemci asıl adının realm'i [libdefaults].default_realm'den farklıysa, iki realms alt modülü eklemeniz gerekir. Bu alt modüller sırasıyla JAAS yapılandırma dosyasındaki istemci asıl adının realm'ine ve [libdefaults].default_realm'e karşılık gelmelidir.


    [realms].realm adı.kdc


    KDC adresini ve bağlantı noktasını ip:port biçiminde belirtir, örneğin kdc=10.0.0.1:88. Bağlantı noktası atlanırsa, sistem varsayılan 88 bağlantı noktasını kullanır, örneğin kdc=10.0.0.1.

  • Keytab dosyası

    Keytab dosyası, JAAS yapılandırma dosyasında belirtilen asıl ada ait anahtarı içermeli ve KDC tarafından doğrulanabilir olmalıdır. Örneğin, geçerli çalışma dizininde client.keytab adlı bir dosya varsa, keytab dosyasının belirtilen asıl ada ait anahtarı içerip içermediğini doğrulamak için aşağıdaki komutu çalıştırabilirsiniz.

    klist -ket ./client.keytab
    
    Keytab name: FILE:client.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       7 2018-07-30T10:19:16 te**@**.com (des-cbc-md5)
  • Özel kaynak grubu için DNS ve HOST yapılandırması

    Bir Kafka kümesi Kerberos kimlik doğrulaması kullandığında, KDC her düğümün asıl adını düğümün ana bilgisayar adını kullanarak kaydeder. Bir istemci bir Kafka küme düğümüne bağlandığında, düğümün asıl adını türetmek için yerel DNS ve HOST ayarlarını kullanır ve ardından KDC'den düğüm için bir erişim kimlik bilgisi ister. Kerberos kimlik doğrulaması etkinleştirilmiş bir Kafka kümesine erişmek için özel bir kaynak grubu kullandığınızda, küme düğümleri için erişim kimlik bilgilerinin KDC'den alınabilmesini sağlamak amacıyla DNS ve HOST ayarlarını doğru şekilde yapılandırmanız gerekir:

    • DNS ayarları

      Özel kaynak grubunun bağlı olduğu VPC'deki Kafka küme düğümlerinin alan adı çözümlemesi için bir PrivateZone örneği kullanıyorsanız, VPC ekine 100.100.2.136 ve 100.100.2.138 IP adresleri için özel bir rota ekleyebilirsiniz. Bu, Kafka küme düğümleri için PrivateZone alan adı çözümleme ayarlarının özel kaynak grubuna uygulanmasını sağlar. DataWorks konsolunun sol gezinme bölmesinde kaynak grubu listesi öğesine tıklayın. Özel kaynak grubunuzun İşlemler sütununda ağ ayarları öğesine tıklayın. VPC eki sekmesinde, İşlemler sütunundaki özel rota öğesine tıklayın. Görüntülenen iletişim kutusunda Rota Ekle öğesine tıklayın, Hedef Türü öğesini IDC ve Bağlantı Yöntemi öğesini Doğrudan IP olarak ayarlayın, doğrudan IP adresini girin ve ardından Rota Oluştur öğesine tıklayın.

    • HOST ayarları

      Özel kaynak grubunun bağlı olduğu VPC'deki Kafka küme düğümlerinin alan adı çözümlemesi için bir PrivateZone örneği kullanmıyorsanız, her Kafka küme düğümü için IP adresi-alan adı eşlemelerini ana bilgisayar yapılandırmasına eklemeniz gerekir. DataWorks konsolunun sol gezinme bölmesinde kaynak grubu listesi öğesine tıklayın. Kaynak grubunuzu bulun, İşlemler sütununda ağ ayarları öğesine tıklayın ve ana bilgisayar yapılandırması sekmesini seçin. Bir ana bilgisayar alanı eklemek için Ekle öğesine tıklayın. Ana bilgisayar yapılandırması DNS ayarlarına göre önceliklidir.

PLAIN

Bir Kafka veri kaynağı yapılandırırken, Sasl Mechanism öğesini PLAIN olarak ayarlarsanız, JAAS dosyası KafkaClient ile başlamalı ve ardından tüm yapılandırma öğeleri bir çift süslü parantez {} içine alınmalıdır.

  • Süslü parantezlerin içindeki ilk satır, kullanılacak oturum açma bileşeni sınıfını tanımlar. Farklı SASL kimlik doğrulama mekanizmaları için oturum açma bileşeni sınıfı sabittir. Sonraki her yapılandırma öğesi anahtar=değer biçiminde yazılır.

  • Sonuncusu dışındaki tüm yapılandırma öğeleri noktalı virgül ile bitmemelidir.

  • Son yapılandırma öğesi noktalı virgül ile bitmelidir. Kapatma süslü parantezinden "}" sonra da bir noktalı virgül eklenmelidir.

Biçim gereksinimleri karşılanmazsa JAAS yapılandırma dosyası ayrıştırılamaz. Aşağıdaki kod tipik bir JAAS yapılandırma dosyası biçimini göstermektedir. xxx yer tutucularını gerçek bilgilerinizle değiştirin.

KafkaClient {
  org.apache.kafka.common.security.plain.PlainLoginModule required
  username="xxx"
  password="xxx";
};


Yapılandırma öğesi


Açıklama


Oturum açma modülü


org.apache.kafka.common.security.plain.PlainLoginModul olarak ayarlanmalıdır


username


Kullanıcı adı. Bu öğeyi ihtiyaca göre yapılandırın.


password


Parola. Bu öğeyi ihtiyaca göre yapılandırın.

SSS

Ek: Komut dosyası demoları ve parametre açıklamaları

Kod düzenleyiciyi kullanarak toplu senkronizasyon görevi yapılandırma

Kod düzenleyiciyi kullanarak bir toplu senkronizasyon görevi yapılandırmak istiyorsanız, komut dosyasındaki ilgili parametreleri birleşik komut dosyası biçimi gereksinimlerine göre yapılandırmanız gerekir. Daha fazla bilgi için bkz. Komut dosyası modu yapılandırması. Aşağıdaki bilgiler, kod düzenleyiciyi kullanarak bir toplu senkronizasyon görevi yapılandırırken veri kaynakları için yapılandırmanız gereken parametreleri açıklamaktadır.

Reader komut dosyası demosu

Aşağıdaki JSON yapılandırması Kafka'dan veri okur.

{
    "type": "job",
    "steps": [
        {
            "stepType": "kafka",
            "parameter": {
                "server": "host:9093",
                "column": [
                    "__key__",
                    "__value__",
                    "__partition__",
                    "__offset__",
                    "__timestamp__",
                    "'123'",
                    "event_id",
                    "tag.desc"
                ],
                "kafkaConfig": {
                    "group.id": "demo_test"
                },
                "topic": "topicName",
                "keyType": "ByteArray",
                "valueType": "ByteArray",
                "beginDateTime": "20190416000000",
                "endDateTime": "20190416000006",
                "skipExceedRecord": "true"
            },
            "name": "Reader",
            "category": "reader"
        },
        {
            "stepType": "stream",
            "parameter": {
                "print": false,
                "fieldDelimiter": ","
            },
            "name": "Writer",
            "category": "writer"
        }
    ],
    "version": "2.0",
    "order": {
        "hops": [
            {
                "from": "Reader",
                "to": "Writer"
            }
        ]
    },
    "setting": {
        "errorLimit": {
            "record": "0"
        },
        "speed": {
            "throttle": true,//When throttle is false, the mbps parameter does not take effect, which means that the rate is not limited. When throttle is true, the rate is limited.
            "concurrent": 1,//The number of concurrent threads.
            "mbps":"12"//The maximum transmission rate. 1 mbps is equal to 1 MB/s.
        }
    }
}

Okuyucu betiği parametreleri

Parametre

Açıklama

Gerekli

datasource

Veri kaynağının adı. Kod düzenleyici, veri kaynakları eklemeyi destekler. Bu parametrenin değeri, eklenen veri kaynağının adıyla aynı olmalıdır.

Evet

server

Kafka broker sunucusunun adresi, ip:port biçimindedir.

Yalnızca bir server yapılandırabilirsiniz ancak DataWorks'ün Kafka kümesindeki tüm brokerların IP adreslerine bağlanabildiğinden emin olmalısınız.

Evet

topic

Kafka konusu (topic). Bir konu, Kafka'nın işlediği mesaj akışlarının bir toplamıdır.

Evet

column

Okunacak Kafka verileri. Sabit sütunlar, veri sütunları ve nitelik sütunları desteklenir.

  • Sabit sütun: Tek tırnak içine alınmış bir sütundur, örneğin ["'abc'", "'123'"].

  • Veri sütunu

    • Verileriniz JSON biçimindeyse, JSON nesnesinin özelliklerini alabilirsiniz, örneğin ["event_id"].

    • Verileriniz JSON biçimindeyse, JSON nesnesinin iç içe geçmiş alt özelliklerini alabilirsiniz, örneğin ["tag.desc"].

  • Nitelik sütunu

    • __key__: Mesajın anahtarı.

    • __value__: Mesajın tam içeriği.

    • __partition__: Geçerli mesajın bulunduğu bölüm.

    • __headers__: Geçerli mesajın üstbilgileri.

    • __offset__: Geçerli mesajın ofseti.

    • __timestamp__: Geçerli mesajın zaman damgası.

    Aşağıdaki kod, eksiksiz bir örnek sunar.

    "column": [
        "__key__",
        "__value__",
        "__partition__",
        "__offset__",
        "__timestamp__",
        "'123'",
        "event_id",
        "tag.desc"
        ]

Evet

keyType

Kafka anahtarının türü. Geçerli değerler: BYTEARRAY, DOUBLE, FLOAT, INTEGER, LONG ve SHORT.

Hayır

valueType

Kafka değerinin türü. Geçerli değerler: BYTEARRAY, DOUBLE, FLOAT, INTEGER, LONG ve SHORT.

Hayır

beginDateTime

Veri tüketimi için başlangıç zamanı. Bu parametre, dahil olan zaman aralığının sol sınırını belirtir. Değer, yyyymmddhhmmss biçiminde bir zaman dizesidir. Bu parametreyi scheduling parameters ile birlikte kullanabilirsiniz. Daha fazla bilgi için bkz. Zamanlama parametrelerinin desteklenen biçimleri.

Not

Bu özellik, Kafka 0.10.2 ve sonraki sürümlerde desteklenir.

Bu parametreyi veya beginOffset parametresini belirtmeniz gerekir.

Not

beginDateTime ve endDateTime birlikte kullanılır.

endDateTime

Veri tüketimi için bitiş zamanı. Bu parametre, hariç tutulan zaman aralığının sağ sınırını belirtir. Değer, yyyymmddhhmmss biçiminde bir zaman dizesidir. Bu parametreyi scheduling parameters ile birlikte kullanabilirsiniz. Daha fazla bilgi için bkz. Zamanlama parametrelerinin desteklenen biçimleri.

Not

Bu özellik, Kafka 0.10.2 ve sonraki sürümlerde desteklenir.

Bu parametreyi veya endOffset parametresini belirtmeniz gerekir.

Not

endDateTime ve beginDateTime birlikte kullanılır.

beginOffset

Veri tüketimi için başlangıç ofseti. Aşağıdaki biçimlerde yapılandırabilirsiniz:

  • Tüketim için başlangıç ofsetini belirten bir sayı, örneğin 15553274.

  • seekToBeginning: Verilerin en eski ofsetten tüketileceğini belirtir.

  • seekToLast: kafkaConfig parametresinde belirtilen group.id için kaydedilen ofsetten başlayarak verileri okur. Grup ofsetinin istemci tarafından düzenli aralıklarla Kafka sunucusuna otomatik olarak işlendiğini unutmayın. Bu nedenle, bir görev başarısız olur ve yeniden çalıştırılırsa veri çoğaltması veya kaybı oluşabilir. skipExceedRecord parametresi true olarak ayarlanırsa görev, okunan son birkaç kaydı atabilir. Atılan bu veriler için grup ofseti zaten sunucuya işlendiğinden, bu veriler sonraki görev çalıştırmasında okunamaz.

  • seekToEnd: Verilerin en son ofsetten tüketileceğini belirtir. Bu işlem boş veri okur.

Bu parametreyi veya beginDateTime parametresini belirtmeniz gerekir.

endOffset

Veri tüketimi için bitiş ofseti. Veri tüketimi görevinin ne zaman çıkacağını kontrol etmek için kullanılır.

Bu parametreyi veya endDateTime parametresini belirtmeniz gerekir.

skipExceedRecord

Kafka, veri tüketmek için public ConsumerRecords<K, V> poll(final Duration timeout) yöntemini kullanır. Tek bir poll çağrısı, belirtilen endOffset veya endDateTime değerinin ötesinde veri getirebilir. Bu parametre, bu aşırı verilerin hedefe yazılıp yazılmayacağını belirler. Görev otomatik ofset işleme kullandığından aşağıdakileri öneririz:

  • 0.10.2'den önceki Kafka sürümleri için: skipExceedRecord değerini false olarak ayarlayın.

  • Kafka 0.10.2 ve sonraki sürümler için: skipExceedRecord değerini true olarak ayarlayın.

Hayır. Varsayılan değer false değeridir.

partition

Bir Kafka konusunun birden çok bölümü (partition) vardır. Varsayılan olarak, bir veri senkronizasyon görevi, konudaki tüm bölümleri kapsayan bir ofset aralığından veri okur. Yalnızca tek bir bölümün ofset aralığından veri okumak için bir partition da belirtebilirsiniz.

Hayır. Varsayılan değer yok.

kafkaConfig

Veri tüketimi için bir KafkaConsumer istemcisi oluştururken bootstrap.servers, auto.commit.interval.ms ve session.timeout.ms gibi genişletilmiş parametreler belirtebilirsiniz. KafkaConsumer'ın tüketim davranışını kontrol etmek için kafkaConfig kullanabilirsiniz.

Hayır

encoding

keyType veya valueType STRING olarak ayarlandığında, dizeyi ayrıştırmak için bu parametreyle belirtilen kodlama kullanılır.

Hayır. Varsayılan değer UTF-8'dir.

waitTIme

Tüketici nesnesinin tek bir denemede Kafka'dan veri çekmek için beklediği maksimum süre (saniye cinsinden).

Hayır. Varsayılan değer 60'tır.

stopWhenPollEmpty

Geçerli değerler true ve false'tur. Bu parametre true olarak ayarlanırsa ve tüketici Kafka'dan boş veri çekerse (genellikle konudaki tüm veriler okunduğu için veya ağ ya da Kafka kümesi kullanılabilirlik sorunları nedeniyle), görev hemen durur. Aksi takdirde, tekrar veri okunana kadar yeniden dener.

Hayır. Varsayılan değer true'dur.

stopWhenReachEndOffset

Bu parametre yalnızca stopWhenPollEmpty true olduğunda etkin olur. Geçerli değerler true ve false'tur.

  • Bu parametre true olarak ayarlanırsa ve tüketici bir poll isteğinden veri almazsa, konu bölümlerindeki en son ofsete ulaşılıp ulaşılmadığını kontrol eder. Tüm bölümler için en son ofsete ulaşıldıysa görev hemen durur. Aksi takdirde, konudan veri çekmeye devam etmeyi dener.

  • Bu parametre false olarak ayarlanırsa ve tüketici bir poll isteğinden veri almazsa kontrol yapmaz ve görevi hemen durdurur.

Hayır. Varsayılan değer false'tur.

Not

Bu ayar geriye dönük uyumluluk sağlar. 0.10.2'den önceki Kafka sürümleri, tüm bölümlerin en son ofsetinin kontrol edilmesini desteklemez.

Aşağıdaki tabloda kafkaConfig parametreleri açıklanmaktadır.


Parametre


Açıklama


fetch.min.bytes


Tüketicinin tek bir istekte brokerdan aldığı minimum veri miktarı (bayt cinsinden). Broker, tüketiciye yanıt vermeden önce bu miktarda verinin mevcut olmasını bekler.


fetch.max.wait.ms


Broker'ın bir getirme isteğine yanıt vermeden önce verilerin mevcut olması için beklediği maksimum süre (milisaniye cinsinden). Varsayılan değer 500'dür. Broker, fetch.min.bytes veya fetch.max.wait.ms koşullarından biri karşılandığında yanıt verir.


max.partition.fetch.bytes


Broker'ın her partition bölümünden tüketiciye döndürebileceği maksimum bayt sayısını belirtir. Varsayılan değer 1 MB'tır.


session.timeout.ms


Tüketicinin hizmet almayı bırakmadan önce sunucuyla bağlantısının kesilebileceği süreyi belirtir. Varsayılan değer 30 saniyedir.


auto.offset.reset


Tüketicinin ofset olmadan veya geçersiz bir ofsetle okuma yaptığında (tüketici uzun süre etkin olmadığı ve ofsete sahip kayıt süresi dolup silindiği için) gerçekleştirdiği eylem. Varsayılan değer none değeridir; bu, ofsetin otomatik olarak sıfırlanmadığı anlamına gelir. Bunu earliest olarak değiştirebilirsiniz; bu, tüketicinin partition kayıtlarını en eski ofsetten okuduğu anlamına gelir.


max.poll.records


Poll yönteminin tek bir çağrısında döndürülebilecek mesaj sayısı.


key.deserializer


Mesaj anahtarının seri durumdan çıkarma yöntemi, örneğin org.apache.kafka.common.serialization.StringDeserializer.


value.deserializer


Veri değerinin seri durumdan çıkarma yöntemi, örneğin org.apache.kafka.common.serialization.StringDeserializer.


ssl.truststore.location


SSL kök sertifikasının yolu.


ssl.truststore.password


Kök sertifika deposunun parolası. Alibaba Cloud Kafka kullanıyorsanız bunu KafkaOnsClient olarak ayarlayın.


security.protocol


Erişim protokolü. Şu anda yalnızca SASL_SSL protokolü desteklenmektedir.


sasl.mechanism


SASL kimlik doğrulama yöntemi. Alibaba Cloud Kafka kullanıyorsanız PLAIN kullanın.


java.security.auth.login.config


SASL kimlik doğrulama dosyasının yolu.

Yazıcı betiği demosu

Aşağıdaki kod, verilerin Kafka'ya yazılması için JSON yapılandırmasını gösterir.

{
  "type":"job",
  "version":"2.0",//The version number.
  "steps":[
    {
      "stepType":"stream",
      "parameter":{},
      "name":"Reader",
      "category":"reader"
    },
    {
      "stepType":"Kafka",//The plug-in name.
      "parameter":{
          "server": "ip:9092", //The server address of Kafka.
          "keyIndex": 0, //The column to be used as the key. Must follow camel case naming conventions, with k in lowercase.
          "valueIndex": 1, //The column to be used as the value. Currently, you can only select one column from the source data or leave this parameter empty. If empty, all source data is used.
          //For example, to use the 2nd, 3rd, and 4th columns of an ODPS table as the kafkaValue, create a new ODPS table, clean and integrate the data from the original ODPS table into the new table, and then use the new table for synchronization.
          "keyType": "Integer", //The type of the Kafka key.
          "valueType": "Short", //The type of the Kafka value.
          "topic": "t08", //The Kafka topic.
          "batchSize": 1024 //The amount of data written to Kafka at a time, in bytes.
        },
      "name":"Writer",
      "category":"writer"
    }
  ],
  "setting":{
      "errorLimit":{
      "record":"0"//The number of error records.
    },
    "speed":{
        "throttle":true,//When throttle is false, the mbps parameter does not take effect, which means that the rate is not limited. When throttle is true, the rate is limited.
        "concurrent":1, //The number of concurrent jobs.
        "mbps":"12"//The maximum transmission rate. 1 mbps is equal to 1 MB/s.
    }
   },
    "order":{
    "hops":[
        {
            "from":"Reader",
            "to":"Writer"
        }
      ]
    }
}

Yazıcı betiği parametreleri

Parametre

Açıklama

Gerekli

datasource

Veri kaynağının adı. Kod düzenleyici, veri kaynakları eklemeyi destekler. Bu parametrenin değeri, eklenen veri kaynağının adıyla aynı olmalıdır.

Evet

server

Kafka sunucusunun adresi, ip:port biçimindedir.

Evet

topic

Kafka konusu (topic). Kafka'nın işlediği farklı mesaj akışları için bir kategoridir.

Bir Kafka kümesine yayınlanan her mesajın konu (topic) adı verilen bir kategorisi vardır. Bir konu, bir grup mesajın koleksiyonudur.

Evet

valueIndex

Kafka yazıcısında değer olarak kullanılan sütun. Bu belirtilmezse, varsayılan olarak tüm sütunlar birleştirilerek değer oluşturulur. Ayırıcı, fieldDelimiter tarafından belirtilir.

Hayır

writeMode

valueIndex yapılandırılmadığında, bu parametre kaynak kaydının tüm sütunlarını birleştirerek Kafka kaydının değerini oluşturmak için kullanılan biçimi belirler. Geçerli değerler text ve JSON'dur. Varsayılan değer text'tir.

  • text olarak ayarlanırsa, tüm sütunlar fieldDelimiter tarafından belirtilen ayırıcı kullanılarak birleştirilir.

  • JSON olarak ayarlanırsa, tüm sütunlar column parametresi tarafından belirtilen alan adlarına göre bir JSON dizesine birleştirilir.

Örneğin, bir kaynak kaydın a, b ve c değerlerine sahip üç sütunu varsa ve writeMode text olarak, fieldDelimiter ise # olarak ayarlanırsa, yazılan Kafka kaydının değeri a#b#c dizesi olur. writeMode JSON olarak ve column [{"name":"col1"},{"name":"col2"},{"name":"col3"}] olarak ayarlanırsa, yazılan Kafka kaydının değeri {"col1":"a","col2":"b","col3":"c"} dizesi olur.

valueIndex yapılandırılırsa bu parametre geçersizdir.

Hayır

column

Verilerin yazılacağı hedef tablodaki alanlar, virgülle ayrılmıştır. Örneğin: "column": ["id", "name", "age"].

valueIndex yapılandırılmadığında ve writeMode JSON olarak ayarlandığında, bu parametre kaynak kaydının sütun değerleri için JSON yapısındaki alan adlarını tanımlar. Örneğin, "column": [{"name":id","type":"JSON_NUMBER"}, {"name":"name","type":"JSON_STRING"}, {"name":"age","type":"JSON_NUMBER"}].

  • Kaynak kayıttaki sütun sayısı, column içinde yapılandırılan alan adı sayısından fazlaysa yazma sırasında veriler kırpılır. Örneğin:

    Bir kaynak kaydın a, b ve c değerlerine sahip üç sütunu varsa ve column [{"name":"col1","type":"JSON_STRING"},{"name":"col2","type":"JSON_STRING"}] olarak yapılandırılırsa, yazılan Kafka kaydının değeri {"col1":"a","col2":"b"} dizesi olur.

  • Kaynak kayıttaki sütun sayısı, column içinde belirtilen alan sayısından azsa ekstra alanlar null veya nullValueFormat tarafından belirtilen dizeyle doldurulur. Örneğin:

    Bir kaynak kaydın a ve b değerlerine sahip iki sütunu varsa ve column [{"name":"col1","type":"JSON_STRING"},{"name":"col2","type":"JSON_STRING"},{"name":"col3","type":"JSON_STRING"}] olarak yapılandırılırsa, yazılan Kafka kaydının değeri {"col1":"a","col2":"b","col3":null} dizesi olur. valueIndex yapılandırılırsa veya writeMode text olarak ayarlanırsa bu parametre geçersizdir.

  • JSON alan türü yapılandırılmazsa varsayılan alan türü JSON_STRING'dir.

  • JSON alan türünün geçerli değerleri için bkz. Ek: JSON alan türleri.

valueIndex yapılandırılırsa veya writeMode text olarak ayarlanırsa bu parametre geçersizdir.

valueIndex yapılandırılmadığında ve writeMode JSON olarak ayarlandığında gereklidir.

partition

Verilerin yazıldığı Kafka konusundaki bölüm numarasını belirtir. Bu, 0'a eşit veya 0'dan büyük bir tamsayı olmalıdır.

Hayır

keyIndex

Kafka yazıcısında anahtar olarak kullanılan sütun.

keyIndex parametresinin değeri 0'a eşit veya 0'dan büyük bir tamsayı olmalıdır. Aksi takdirde görev başarısız olur.

Hayır

keyIndexes

Kaynak kayıttaki, Kafka kaydı için anahtar olarak kullanılan sütunların sıra numaralarından oluşan bir dizi.

Sütun sıra numarası 0'dan başlar. Örneğin, [0,1,2] yapılandırılan tüm sütun numaralarının değerlerini virgülle birleştirerek Kafka kaydının anahtarını oluşturur. Bu belirtilmezse Kafka kaydının anahtarı null olur ve veriler konunun bölümlerine round-robin yöntemiyle yazılır. Yalnızca bu parametreyi veya keyIndex parametresini belirtebilirsiniz.

Hayır

fieldDelimiter

writeMode text olarak ayarlandığında ve valueIndex yapılandırılmadığında, kaynak kaydının tüm sütunları bu parametreyle belirtilen sütun ayırıcısı kullanılarak birleştirilerek Kafka kaydının değeri oluşturulur. Ayırıcı olarak tek bir karakter veya birden çok karakter yapılandırabilirsiniz. \u0001 biçiminde Unicode karakterleri yapılandırabilirsiniz. \t ve \n gibi kaçış karakterleri desteklenir. Varsayılan değer \t değeridir.

writeMode text olarak ayarlanmazsa veya valueIndex yapılandırılırsa bu parametre geçersizdir.

Hayır

keyType

Kafka anahtarının türü. Geçerli değerler: BYTEARRAY, DOUBLE, FLOAT, INTEGER, LONG ve SHORT.

Evet

valueType

Kafka değerinin türü. Geçerli değerler: BYTEARRAY, DOUBLE, FLOAT, INTEGER, LONG ve SHORT.

Evet

nullKeyFormat

keyIndex veya keyIndexes tarafından belirtilen kaynak sütunun değeri null ise bu değer, bu parametreyle belirtilen dizeyle değiştirilir. Bu yapılandırılmazsa değiştirme yapılmaz.

Hayır

nullValueFormat

Bir kaynak sütunun değeri null ise Kafka kaydının değeri oluşturulurken bu değer, bu parametreyle belirtilen dizeyle değiştirilir. Bu parametreyi belirtmezseniz değiştirme yapılmaz.

Hayır

acks

Kafka üreticisini başlatırken kullanılan acks yapılandırması. Bu, başarılı yazmalar için onaylama yöntemini belirler. Varsayılan olarak acks parametresi all olarak ayarlanır. acks için geçerli değerler şunlardır:

  • 0: Başarılı yazmalar için onaylama yok.

  • 1: Birincil çoğaltmaya başarılı yazma için onaylama.

  • all: Tüm çoğaltmalara başarılı yazma için onaylama.

Hayır

Ek: Kafka'ya yazma için mesaj biçimi tanımı

Gerçek zamanlı bir senkronizasyon görevini yapılandırıp çalıştırdıktan sonra kaynak veritabanından okunan veriler JSON biçiminde bir Kafka konusuna yazılır. İlk olarak, belirtilen kaynak tablodaki tüm mevcut veriler ilgili Kafka konusuna yazılır. Ardından görev, artımlı verileri sürekli olarak konuya yazmak için gerçek zamanlı senkronizasyonu başlatır. Kaynak tablodan gelen artımlı DDL değişiklik bilgileri de JSON biçiminde Kafka konusuna yazılır. Kafka'ya yazılan mesajların durumunu ve değişiklik bilgilerini edinebilirsiniz. Daha fazla bilgi için bkz. Ek: Mesaj biçimi.

Not

Çevrimdışı senkronizasyon görevinden gelen JSON verilerinde payload.sequenceId, payload.timestamp.eventTime ve payload.timestamp.checkpointTime alanları -1 olarak ayarlanır.

Ek: JSON alan türleri

writeMode JSON olarak ayarlandığında, column parametresi içindeki type alanını kullanarak JSON alan türünü tanımlayabilirsiniz. Bir yazma işlemi sırasında sistem, kaynak kayıttaki sütun değerini belirtilen türe dönüştürmeye çalışır. Başarısız tür dönüştürme, kirli veriyle sonuçlanır.


Geçerli değer


Açıklama


JSON_STRING


Kaynak kaydın sütun değerini bir dizeye dönüştürür ve JSON alanına yazar. Örneğin, kaynak kaydın sütun değeri 123 tamsayısı ise ve column [{"name":"col1","type":"JSON_STRING"}] olarak yapılandırılırsa Kafka kaydına yazılan değer {"col1":"123"} dizesi olur.


JSON_NUMBER


Kaynak kaydın sütun değerini bir sayıya dönüştürür ve JSON alanına yazar. Örneğin, kaynak kaydın sütun değeri 1.23 dizesi ise ve column [{"name":"col1","type":"JSON_NUMBER"}] olarak yapılandırılırsa Kafka kaydına yazılan değer {"col1":1.23} dizesi olur.


JSON_BOOL


Kaynak kayıt sütun değerini bir Boolean değerine dönüştürür ve JSON alanına yazar. Örneğin, kaynak kayıt sütun değeri true dizesi ise ve column [{"name":"col1","type":"JSON_BOOL"} olarak yapılandırılırsa yazılan Kafka kaydının değeri {"col1":true} dizesi olur


JSON_ARRAY


Kaynak kaydın sütun değerini bir JSON dizisine dönüştürür ve JSON alanına yazar. Örneğin, kaynak kaydın sütun değeri [1,2,3] dizesi ise ve column [{"name":"col1","type":"JSON_ARRAY"}] olarak yapılandırılırsa Kafka kaydına yazılan değer {"col1":[1,2,3]} dizesi olur.


JSON_MAP


Kaynak kaydın sütun değerini bir JSON nesnesine dönüştürür ve JSON alanına yazar. Örneğin, kaynak kaydın sütun değeri {"k1":"v1"} dizesi ise ve column [{"name":"col1","type":"JSON_MAP"}] olarak yapılandırılırsa Kafka kaydına yazılan değer {"col1":{"k1":"v1"}} dizesi olur.


JSON_BASE64


Kaynak sütundaki bir bayt dizisini BASE64 kodlu bir dizeye dönüştürür ve JSON alanına yazar. Örneğin, kaynak kaydın sütun değeri onaltılık olarak 0x01 0x02 şeklinde temsil edilen 2 baytlık bir dizi ise ve column [{"name":"col1","type":"JSON_BASE64"}] olarak yapılandırılırsa Kafka kaydına yazılan değer {"col1":"AQI="} dizesi olur.


JSON_HEX


Kaynak sütundaki bir bayt dizisini onaltılık bir dizeye dönüştürür ve JSON alanına yazar. Örneğin, kaynak kaydın sütun değeri onaltılık olarak 0x01 0x02 şeklinde temsil edilen 2 baytlık bir dizi ise ve column [{"name":"col1","type":"JSON_HEX"}] olarak yapılandırılırsa Kafka kaydına yazılan değer {"col1":"0102"} dizesi olur.