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.
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.
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}ÖnemliBu 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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
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 |
|
||
|
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
Yordam hakkında daha fazla bilgi için bkz. Kodsuz kullanıcı arabiriminde çevrimdışı senkronizasyon görevi yapılandırma ve Kod düzenleyicide çevrimdışı senkronizasyon görevi yapılandırma.
Parametrelerin tam listesi ve kod düzenleyici için bir komut dosyası demosu için bkz. Ek: Komut dosyası demoları ve parametre açıklamaları.
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.
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";
};
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
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:
|
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
|
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.
|
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
Ö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: 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,
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:
|
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.
Ç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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|