Sumber data Kafka menyediakan saluran dua arah untuk membaca dan menulis data ke Kafka. Topik ini menjelaskan kemampuan sinkronisasi data yang disediakan DataWorks untuk Kafka.
Versi yang didukung
DataWorks mendukung Alibaba Cloud Kafka dan versi Kafka yang dikelola sendiri mulai dari 0.10.2 hingga 3.6.x.
Sinkronisasi data tidak didukung untuk versi Kafka sebelum 0.10.2 karena versi tersebut tidak mendukung pengambilan offset partisi dan struktur datanya mungkin tidak kompatibel dengan timestamp.
Pembacaan real-time
-
Jika Anda menggunakan Serverless resource group berlangganan, perkirakan spesifikasi yang dibutuhkan terlebih dahulu untuk mencegah kegagalan tugas akibat kekurangan resource.
Perkirakan 1 CU per topik. Anda juga harus memperkirakan resource berdasarkan traffic:
-
Untuk data Kafka yang tidak dikompresi, perkirakan 1 CU untuk setiap traffic 10 MB/s.
-
Untuk data Kafka yang dikompresi, perkirakan 2 CU untuk setiap traffic 10 MB/s.
-
Untuk data Kafka yang dikompresi dan memerlukan parsing JSON, perkirakan 3 CU untuk setiap traffic 10 MB/s.
-
-
Saat menggunakan Serverless resource group berlangganan atau versi lama grup sumber daya eksklusif untuk Integrasi Data:
-
Jika workload Anda memiliki toleransi tinggi terhadap failover, penggunaan slot kluster tidak boleh melebihi 80%.
-
Jika workload Anda memiliki toleransi rendah terhadap failover, penggunaan slot kluster tidak boleh melebihi 70%.
-
Penggunaan resource aktual bergantung pada faktor-faktor seperti konten dan format data. Setelah penilaian awal, sesuaikan alokasi resource berdasarkan penggunaan aktual saat runtime.
Batasan
Sumber data Kafka mendukung Serverless resource groups (direkomendasikan) dan versi lama grup sumber daya eksklusif untuk Integrasi Data.
Pembacaan offline dari satu tabel
Jika kedua parameter parameter.groupId dan parameter.kafkaConfig.group.id dikonfigurasi, parameter.groupId memiliki prioritas lebih tinggi daripada group.id dalam parameter kafkaConfig.
Penulisan real-time ke satu tabel
Deduplikasi data tidak didukung untuk operasi penulisan. Jika tugas dijalankan ulang setelah reset offset atau failover, data duplikat mungkin ditulis.
Penulisan real-time untuk seluruh database
-
Tugas sinkronisasi data real-time mendukung Serverless resource groups (direkomendasikan) dan versi lama grup sumber daya eksklusif untuk Integrasi Data.
-
Jika tabel sumber memiliki primary key, nilai primary key digunakan sebagai kunci untuk record Kafka. Hal ini memastikan bahwa perubahan pada primary key yang sama ditulis ke partisi Kafka yang sama secara berurutan.
-
Jika tabel sumber tidak memiliki primary key, Anda memiliki dua opsi. Jika Anda memilih opsi untuk menyinkronkan tabel tanpa primary key, kunci untuk record Kafka akan kosong. Untuk memastikan perubahan tabel ditulis ke Kafka secara berurutan, topik Kafka tujuan harus hanya memiliki satu partisi. Jika Anda memilih primary key kustom, kombinasi satu atau beberapa field non-primary key digunakan sebagai kunci untuk record Kafka.
-
Untuk memastikan perubahan dengan primary key yang sama ditulis ke partisi Kafka yang sama secara berurutan, bahkan jika kluster Kafka mengembalikan exception, tambahkan konfigurasi berikut dalam formulir parameter tambahan.
{"max.in.flight.requests.per.connection":1,"buffer.memory": 100554432}PentingKonfigurasi ini secara signifikan menurunkan performa replikasi. Anda harus menyeimbangkan antara performa dengan kebutuhan pengurutan dan keandalan yang ketat.
-
Untuk informasi lebih lanjut tentang format keseluruhan pesan yang ditulis ke Kafka dalam sinkronisasi real-time, format pesan heartbeat, dan format pesan yang sesuai dengan perubahan data sumber, lihat Apendiks: Format pesan.
Tipe field yang didukung
Kafka menyediakan penyimpanan data tidak terstruktur. Record Kafka biasanya mencakup field-field berikut: key, value, offset, timestamp, headers, dan partition. Saat DataWorks membaca atau menulis data ke Kafka, data diproses sebagai berikut.
Baca data
Saat DataWorks membaca data dari Kafka, data dapat diurai dalam format JSON. Tabel berikut menjelaskan cara setiap modul data diproses.
|
Modul data record Kafka |
Tipe data yang diproses |
|
key |
Bergantung pada item konfigurasi keyType dalam tugas sinkronisasi data. Untuk informasi lebih lanjut tentang parameter keyType, lihat deskripsi parameter lengkap di apendiks. |
|
value |
Bergantung pada item konfigurasi valueType dalam tugas sinkronisasi data. Untuk informasi lebih lanjut tentang parameter valueType, lihat deskripsi parameter lengkap di apendiks. |
|
offset |
Long |
|
timestamp |
Long |
|
headers |
String |
|
partition |
Long |
Tulis data
DataWorks menulis data ke Kafka dalam format JSON atau teks. Kebijakan pemrosesan bervariasi berdasarkan jenis tugas sinkronisasi, seperti yang dijelaskan dalam tabel berikut.
-
Saat data ditulis dalam format teks, nama field tidak disertakan. Nilai field dipisahkan oleh pemisah.
-
Saat tugas sinkronisasi real-time menulis data ke Kafka, format JSON bawaan digunakan. Data mencakup informasi seperti pesan perubahan database, waktu bisnis, dan informasi Data Definition Language (DDL). Untuk detail format data, lihat Apendiks: Format pesan.
|
Jenis tugas sinkronisasi |
Format value yang ditulis ke Kafka |
Tipe field sumber |
Metode pemrosesan untuk operasi penulisan |
|
Sinkronisasi offline Node sinkronisasi offline di DataStudio |
json |
String |
String yang dikodekan UTF-8 |
|
Boolean |
Dikonversi ke string "true" atau "false" yang dikodekan UTF-8 |
||
|
Waktu/Tanggal |
String yang dikodekan UTF-8 dalam format yyyy-MM-dd HH:mm:ss |
||
|
Numerik |
String numerik yang dikodekan UTF-8 |
||
|
Aliran byte |
Aliran byte diperlakukan sebagai string yang dikodekan UTF-8 dan dikonversi menjadi string. |
||
|
text |
String |
String yang dikodekan UTF-8 |
|
|
Boolean |
Dikonversi ke string "true" atau "false" yang dikodekan UTF-8 |
||
|
Waktu/Tanggal |
String yang dikodekan UTF-8 dalam format yyyy-MM-dd HH:mm:ss |
||
|
Numerik |
String numerik yang dikodekan UTF-8 |
||
|
Aliran byte |
Aliran byte diperlakukan sebagai string yang dikodekan UTF-8 dan dikonversi menjadi string. |
||
|
Sinkronisasi real-time: ETL real-time ke Kafka Node sinkronisasi real-time di DataStudio |
json |
String |
String yang dikodekan UTF-8 |
|
Boolean |
Tipe Boolean JSON |
||
|
Waktu/Tanggal |
|
||
|
Numerik |
Tipe numerik JSON |
||
|
Aliran byte |
Aliran byte dikodekan Base64 lalu dikonversi ke string yang dikodekan UTF-8. |
||
|
text |
String |
String yang dikodekan UTF-8 |
|
|
Boolean |
Dikonversi ke string "true" atau "false" yang dikodekan UTF-8 |
||
|
Waktu/Tanggal |
String yang dikodekan UTF-8 dalam format yyyy-MM-dd HH:mm:ss |
||
|
Numerik |
String numerik yang dikodekan UTF-8 |
||
|
Aliran byte |
Aliran byte dikodekan Base64 lalu dikonversi ke string yang dikodekan UTF-8. |
||
|
Sinkronisasi real-time: Sinkronisasi real-time seluruh database ke Kafka Hanya sinkronisasi data inkremental |
Format JSON bawaan |
String |
String yang dikodekan UTF-8 |
|
Boolean |
Tipe Boolean JSON |
||
|
Waktu/Tanggal |
Timestamp milidetik 13 digit |
||
|
Numerik |
Nilai numerik JSON |
||
|
Aliran byte |
Aliran byte dikodekan Base64 lalu dikonversi ke string yang dikodekan UTF-8. |
||
|
Solusi sinkronisasi: Sinkronisasi real-time sekali klik ke Kafka Sinkronisasi offline penuh + sinkronisasi real-time inkremental |
Format JSON bawaan |
String |
String yang dikodekan UTF-8 |
|
Boolean |
Tipe Boolean JSON |
||
|
Waktu/Tanggal |
Timestamp milidetik 13 digit |
||
|
Numerik |
Nilai numerik JSON |
||
|
Aliran byte |
Aliran byte dikodekan Base64 lalu dikonversi ke string yang dikodekan UTF-8. |
Tambahkan sumber data
Sebelum mengembangkan tugas sinkronisasi di DataWorks, Anda harus menambahkan sumber data yang diperlukan ke DataWorks dengan mengikuti petunjuk di Manajemen sumber data. Anda dapat melihat deskripsi parameter di Konsol DataWorks untuk memahami arti parameter saat menambahkan sumber data.
Kembangkan tugas sinkronisasi data
Untuk informasi tentang titik masuk dan prosedur konfigurasi tugas sinkronisasi, lihat panduan konfigurasi berikut.
Konfigurasikan tugas sinkronisasi offline untuk satu tabel
-
Untuk informasi lebih lanjut tentang prosedur, lihat Konfigurasikan tugas sinkronisasi offline di antarmuka tanpa kode dan Konfigurasikan tugas sinkronisasi offline di editor kode.
-
Untuk daftar lengkap parameter dan demo skrip untuk editor kode, lihat Apendiks: Demo skrip dan deskripsi parameter.
Konfigurasikan tugas sinkronisasi real-time untuk satu tabel atau seluruh database
Untuk petunjuknya, lihat Konfigurasikan tugas sinkronisasi real-time untuk satu tabel dan Konfigurasikan tugas sinkronisasi real-time untuk seluruh database.
Konfigurasi autentikasi
SSL
Saat mengonfigurasi sumber data Kafka, jika Anda mengatur Special Authentication Method ke SSL atau SASL_SSL, Anda mengaktifkan autentikasi SSL untuk kluster Kafka. Anda harus mengunggah file sertifikat truststore klien dan memasukkan passphrase truststore.
-
Jika kluster Kafka adalah instans Alibaba Cloud Kafka, lihat Petunjuk peningkatan algoritma sertifikat SSL untuk mengunduh file sertifikat truststore yang benar. Passphrase truststore adalah KafkaOnsClient.
-
Jika kluster Kafka adalah instans EMR, lihat Gunakan enkripsi SSL untuk koneksi Kafka untuk mengunduh file sertifikat truststore yang benar dan mendapatkan passphrase truststore.
-
Untuk kluster yang dikelola sendiri, Anda harus mengunggah sertifikat truststore yang benar dan memasukkan passphrase truststore yang sesuai.
File sertifikat keystore, passphrase keystore, dan passphrase SSL hanya diperlukan ketika autentikasi SSL dua arah diaktifkan untuk kluster Kafka. Server kluster Kafka menggunakannya untuk mengotentikasi identitas klien. Autentikasi SSL dua arah diaktifkan ketika ssl.client.auth=required diatur dalam file server.properties kluster Kafka. Untuk informasi lebih lanjut, lihat Gunakan enkripsi SSL untuk koneksi Kafka.
GSSAPI
Jika Anda mengatur Sasl Mechanism ke GSSAPI saat mengonfigurasi sumber data Kafka, Anda harus mengunggah tiga file autentikasi: file konfigurasi JAAS, file konfigurasi Kerberos, dan file Keytab. Anda juga harus mengonfigurasi pengaturan DNS/HOST untuk grup sumber daya eksklusif. Bagian berikut menjelaskan file-file ini serta pengaturan DNS dan HOST yang diperlukan.
Untuk Serverless resource group, Anda harus mengonfigurasi informasi alamat host menggunakan resolusi DNS internal. Untuk informasi lebih lanjut, lihat Resolusi DNS internal (PrivateZone).
-
File konfigurasi JAAS
File JAAS harus dimulai dengan KafkaClient, diikuti oleh semua item konfigurasi yang diapit sepasang tanda kurung kurawal {}:
-
Baris pertama di dalam tanda kurung kurawal menentukan kelas komponen logon yang digunakan. Untuk mekanisme autentikasi SASL yang berbeda, kelas komponen logon bersifat tetap. Setiap item konfigurasi berikutnya ditulis dalam format key=value.
-
Semua item konfigurasi kecuali yang terakhir tidak boleh diakhiri dengan titik koma.
-
Item konfigurasi terakhir harus diakhiri dengan titik koma, dan titik koma lain harus mengikuti tanda kurung kurawal penutup
}.
Jika persyaratan format tidak dipenuhi, file konfigurasi JAAS tidak dapat diurai. Kode berikut menunjukkan format file konfigurasi JAAS yang umum. Ganti placeholder xxx dengan informasi aktual Anda.
KafkaClient { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="xxx" storeKey=true serviceName="kafka-server" principal="kafka-client@EXAMPLE.COM"; };Item konfigurasi
Deskripsi
Modul logon
Harus diatur ke com.sun.security.auth.module.Krb5LoginModule.
useKeyTab
Harus diatur ke true.
keyTab
Anda dapat menentukan path apa pun. Saat tugas sinkronisasi dijalankan, sistem secara otomatis mengunduh file keytab yang Anda unggah selama konfigurasi sumber data ke path lokal. Sistem kemudian menggunakan path lokal ini untuk item konfigurasi keytab.
storeKey
Menentukan apakah klien menyimpan kunci. Anda dapat mengatur ini ke true atau false. Ini tidak memengaruhi sinkronisasi data.
serviceName
Sesuai dengan item konfigurasi sasl.kerberos.service.name dalam file konfigurasi server.properties server Kafka. Konfigurasikan item ini sesuai kebutuhan.
principal
Principal Kerberos yang digunakan oleh klien Kafka. Konfigurasikan sesuai kebutuhan dan pastikan file keytab yang diunggah berisi kunci untuk principal ini.
-
-
File konfigurasi Kerberos
File konfigurasi Kerberos harus berisi dua modul: [libdefaults] dan [realms].
-
Modul [libdefaults] menentukan parameter autentikasi Kerberos. Setiap item konfigurasi dalam modul ditulis dalam format key=value.
-
Modul [realms] menentukan alamat Key Distribution Center (KDC). Modul ini dapat berisi beberapa submodul realm. Setiap submodul realm dimulai dengan nama realm diikuti tanda sama dengan (=).
Ini diikuti oleh serangkaian item konfigurasi yang diapit tanda kurung kurawal. Setiap item konfigurasi juga ditulis dalam format key=value. Kode berikut menunjukkan format file konfigurasi Kerberos yang umum. Ganti placeholder xxx dengan informasi aktual Anda.
[libdefaults] default_realm = xxx [realms] xxx = { kdc = xxx }Item konfigurasi
Deskripsi
[libdefaults].default_realm
Realm default yang digunakan saat mengakses node kluster Kafka. Biasanya sama dengan realm principal klien yang ditentukan dalam file konfigurasi JAAS.
Parameter [libdefaults] lainnya
Modul [libdefaults] dapat menentukan parameter autentikasi Kerberos lainnya, seperti ticket_lifetime. Konfigurasikan sesuai kebutuhan.
[realms].realm name
Harus sama dengan realm principal klien yang ditentukan dalam file konfigurasi JAAS dan [libdefaults].default_realm. Jika realm principal klien dalam file konfigurasi JAAS berbeda dari [libdefaults].default_realm, Anda perlu menyertakan dua submodul realms. Submodul ini harus sesuai dengan realm principal klien dalam file konfigurasi JAAS dan [libdefaults].default_realm, masing-masing.
[realms].nama realm.kdc
Menentukan alamat dan port KDC dalam format ip:port, misalnya kdc=10.0.0.1:88. Jika port dihilangkan, sistem menggunakan port default 88, misalnya kdc=10.0.0.1.
-
-
File Keytab
File keytab harus berisi kunci untuk principal yang ditentukan dalam file konfigurasi JAAS dan harus dapat diverifikasi oleh KDC. Misalnya, jika ada file bernama client.keytab di direktori kerja saat ini, Anda dapat menjalankan perintah berikut untuk memverifikasi apakah file keytab berisi kunci untuk principal yang ditentukan.
klist -ket ./client.keytab Keytab name: FILE:client.keytab KVNO Timestamp Principal ---- ------------------- ------------------------------------------------------ 7 2018-07-30T10:19:16 te**@**.com (des-cbc-md5) -
Konfigurasi DNS dan HOST untuk grup sumber daya eksklusif
Saat kluster Kafka menggunakan autentikasi Kerberos, KDC mendaftarkan principal setiap node menggunakan hostname node tersebut. Saat klien terhubung ke node kluster Kafka, klien menggunakan pengaturan DNS dan HOST lokal untuk menurunkan principal node dan kemudian meminta kredensial akses untuk node tersebut dari KDC. Saat Anda menggunakan grup sumber daya eksklusif untuk mengakses kluster Kafka dengan autentikasi Kerberos yang diaktifkan, Anda harus mengonfigurasi pengaturan DNS dan HOST dengan benar untuk memastikan kredensial akses untuk node kluster dapat diperoleh dari KDC:
-
Pengaturan DNS
Jika Anda menggunakan instans PrivateZone untuk resolusi nama domain node kluster Kafka di VPC tempat grup sumber daya eksklusif dilampirkan, Anda dapat menambahkan rute kustom untuk alamat IP 100.100.2.136 dan 100.100.2.138 ke lampiran VPC. Hal ini memastikan pengaturan resolusi nama domain PrivateZone untuk node kluster Kafka berlaku untuk grup sumber daya eksklusif. Di panel navigasi kiri Konsol DataWorks, klik daftar grup sumber daya. Di kolom Aksi grup sumber daya eksklusif Anda, klik pengaturan jaringan. Di tab Lampiran VPC, klik rute kustom di kolom Aksi. Di kotak dialog yang muncul, klik Tambah Rute, atur Jenis Tujuan ke IDC dan Metode Koneksi ke IP Langsung, masukkan alamat IP langsung, lalu klik Hasilkan Rute.
-
Pengaturan HOST
Jika Anda tidak menggunakan instans PrivateZone untuk resolusi nama domain node kluster Kafka di VPC tempat grup sumber daya eksklusif dilampirkan, Anda harus menambahkan pemetaan alamat IP ke nama domain untuk setiap node kluster Kafka ke konfigurasi host. Di panel navigasi kiri Konsol DataWorks, klik daftar grup sumber daya. Temukan grup sumber daya Anda, klik pengaturan jaringan di kolom Aksi, dan pilih tab konfigurasi host. Klik Tambah untuk menambahkan domain host. Konfigurasi host memiliki prioritas lebih tinggi daripada pengaturan DNS.
-
PLAIN
Saat mengonfigurasi sumber data Kafka, jika Anda mengatur Sasl Mechanism ke PLAIN, file JAAS harus dimulai dengan KafkaClient, diikuti oleh semua item konfigurasi yang diapit sepasang tanda kurung kurawal {}.
-
Baris pertama di dalam tanda kurung kurawal menentukan kelas komponen logon yang digunakan. Untuk mekanisme autentikasi SASL yang berbeda, kelas komponen logon bersifat tetap. Setiap item konfigurasi berikutnya ditulis dalam format key=value.
-
Semua item konfigurasi kecuali yang terakhir tidak boleh diakhiri dengan titik koma.
-
Item konfigurasi terakhir harus diakhiri dengan titik koma. Titik koma juga harus ditambahkan setelah tanda kurung kurawal penutup "}".
Jika persyaratan format tidak dipenuhi, file konfigurasi JAAS tidak dapat diurai. Kode berikut menunjukkan format file konfigurasi JAAS yang umum. Ganti placeholder xxx dengan informasi aktual Anda.
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="xxx"
password="xxx";
};
|
Item konfigurasi |
Deskripsi |
|
Modul logon |
Harus diatur ke org.apache.kafka.common.security.plain.PlainLoginModul |
|
username |
Username. Konfigurasikan item ini sesuai kebutuhan. |
|
password |
Password. Konfigurasikan item ini sesuai kebutuhan. |
FAQ
Apendiks: Demo skrip dan deskripsi parameter
Konfigurasikan tugas sinkronisasi batch menggunakan editor kode
Jika Anda ingin mengonfigurasi tugas sinkronisasi batch menggunakan editor kode, Anda harus mengonfigurasi parameter terkait dalam skrip berdasarkan persyaratan format skrip terpadu. Untuk informasi lebih lanjut, lihat Konfigurasi mode skrip. Informasi berikut menjelaskan parameter yang harus Anda konfigurasi untuk sumber data saat mengonfigurasi tugas sinkronisasi batch menggunakan editor kode.
Demo skrip Reader
Konfigurasi JSON berikut membaca data dari Kafka.
{
"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,//Ketika throttle adalah false, parameter mbps tidak berlaku, yang berarti laju tidak dibatasi. Ketika throttle adalah true, laju dibatasi.
"concurrent": 1,//Jumlah thread konkuren.
"mbps":"12"//Laju transmisi maksimum. 1 mbps sama dengan 1 MB/s.
}
}
}
Parameter skrip Reader
|
Parameter |
Deskripsi |
Wajib |
|
datasource |
Nama sumber data. Editor kode mendukung penambahan sumber data. Nilai parameter ini harus sama dengan nama sumber data yang ditambahkan. |
Ya |
|
server |
Alamat server broker Kafka dalam format ip:port. Anda hanya dapat mengonfigurasi satu server, tetapi Anda harus memastikan DataWorks dapat terhubung ke alamat IP semua broker di kluster Kafka. |
Ya |
|
topic |
Topik Kafka. Topik adalah agregasi feed pesan yang diproses Kafka. |
Ya |
|
column |
Data Kafka yang akan dibaca. Kolom konstan, kolom data, dan kolom atribut didukung.
|
Ya |
|
keyType |
Tipe kunci Kafka. Nilai yang valid: BYTEARRAY, DOUBLE, FLOAT, INTEGER, LONG, dan SHORT. |
Tidak |
|
valueType |
Tipe nilai Kafka. Nilai yang valid: BYTEARRAY, DOUBLE, FLOAT, INTEGER, LONG, dan SHORT. |
Tidak |
|
beginDateTime |
Waktu mulai untuk konsumsi data. Parameter ini menentukan batas kiri rentang waktu, yang inklusif. Ini adalah string waktu dalam format yyyymmddhhmmss. Anda dapat menggunakan parameter ini dengan scheduling parameters. Untuk informasi lebih lanjut, lihat Format yang didukung untuk parameter penjadwalan. Catatan
Fitur ini didukung di Kafka 0.10.2 dan versi selanjutnya. |
Anda harus menentukan salah satu parameter ini atau beginOffset. Catatan
beginDateTime dan endDateTime digunakan bersama. |
|
endDateTime |
Waktu akhir untuk konsumsi data. Parameter ini menentukan batas kanan rentang waktu, yang eksklusif. Ini adalah string waktu dalam format yyyymmddhhmmss. Anda dapat menggunakan parameter ini dengan scheduling parameters. Untuk informasi lebih lanjut, lihat Format yang didukung untuk parameter penjadwalan. Catatan
Fitur ini didukung di Kafka 0.10.2 dan versi selanjutnya. |
Anda harus menentukan salah satu parameter ini atau endOffset. Catatan
endDateTime dan beginDateTime digunakan bersama. |
|
beginOffset |
Offset awal untuk konsumsi data. Anda dapat mengonfigurasinya dalam bentuk berikut:
|
Anda harus menentukan salah satu parameter ini atau beginDateTime. |
|
endOffset |
Offset akhir untuk konsumsi data. Ini digunakan untuk mengontrol kapan tugas konsumsi data berhenti. |
Anda harus menentukan salah satu parameter ini atau endDateTime. |
|
skipExceedRecord |
Kafka menggunakan
|
Tidak. Nilai default adalah false. |
|
partition |
Topik Kafka memiliki beberapa partisi (partition). Secara default, tugas sinkronisasi data membaca data dari rentang offset yang mencakup semua partisi dalam topik. Anda juga dapat menentukan partition untuk hanya membaca data dari rentang offset satu partisi. |
Tidak. Tidak ada nilai default. |
|
kafkaConfig |
Saat membuat klien KafkaConsumer untuk konsumsi data, Anda dapat menentukan parameter tambahan seperti bootstrap.servers, auto.commit.interval.ms, dan session.timeout.ms. Anda dapat menggunakan kafkaConfig untuk mengontrol perilaku konsumsi KafkaConsumer. |
Tidak |
|
encoding |
Saat keyType atau valueType diatur ke STRING, encoding yang ditentukan oleh parameter ini digunakan untuk mengurai string. |
Tidak. Nilai default adalah UTF-8. |
|
waitTIme |
Waktu maksimum, dalam detik, yang ditunggu objek konsumen untuk menarik data dari Kafka dalam satu percobaan. |
Tidak. Nilai default adalah 60. |
|
stopWhenPollEmpty |
Nilai yang valid adalah true dan false. Jika parameter ini diatur ke true dan konsumen menarik data kosong dari Kafka (biasanya karena semua data di topik telah dibaca, atau karena masalah ketersediaan jaringan atau kluster Kafka), tugas berhenti segera. Jika tidak, tugas mencoba lagi hingga data berhasil dibaca. |
Tidak. Nilai default adalah true. |
|
stopWhenReachEndOffset |
Parameter ini hanya berlaku saat stopWhenPollEmpty adalah true. Nilai yang valid adalah true dan false.
|
Tidak. Nilai default adalah false. Catatan
Pengaturan ini menyediakan kompatibilitas mundur. Versi Kafka sebelum 0.10.2 tidak mendukung pemeriksaan offset terbaru semua partisi. |
Tabel berikut menjelaskan parameter kafkaConfig.
|
Parameter |
Deskripsi |
|
fetch.min.bytes |
Jumlah minimum data, dalam byte, yang diambil konsumen dari broker dalam satu permintaan. Broker menunggu hingga jumlah data ini tersedia sebelum merespons konsumen. |
|
fetch.max.wait.ms |
Waktu maksimum, dalam milidetik, yang ditunggu broker agar data tersedia sebelum merespons permintaan fetch. Nilai default adalah 500. Broker merespons ketika salah satu kondisi fetch.min.bytes atau fetch.max.wait.ms terpenuhi. |
|
max.partition.fetch.bytes |
Menentukan jumlah maksimum byte yang dapat dikembalikan broker ke konsumen dari setiap partition. Nilai default adalah 1 MB. |
|
session.timeout.ms |
Menentukan waktu yang dapat dilewati konsumen terputus dari server sebelum berhenti menerima layanan. Nilai default adalah 30 detik. |
|
auto.offset.reset |
Tindakan yang diambil konsumen saat membaca tanpa offset atau offset tidak valid (karena konsumen tidak aktif dalam waktu lama dan catatan dengan offset tersebut telah kedaluwarsa dan dihapus). Nilai default adalah none, yang berarti offset tidak diatur ulang secara otomatis. Anda dapat mengubahnya ke earliest, yang berarti konsumen membaca catatan partition dari offset paling awal. |
|
max.poll.records |
Jumlah pesan yang dapat dikembalikan oleh satu panggilan ke metode poll. |
|
key.deserializer |
Metode deserialisasi untuk kunci pesan, seperti org.apache.kafka.common.serialization.StringDeserializer. |
|
value.deserializer |
Metode deserialisasi untuk nilai data, seperti org.apache.kafka.common.serialization.StringDeserializer. |
|
ssl.truststore.location |
Path sertifikat root SSL. |
|
ssl.truststore.password |
Password untuk penyimpanan sertifikat root. Jika Anda menggunakan Alibaba Cloud Kafka, atur ini ke KafkaOnsClient. |
|
security.protocol |
Protokol akses. Saat ini, hanya protokol SASL_SSL yang didukung. |
|
sasl.mechanism |
Metode autentikasi SASL. Jika Anda menggunakan Alibaba Cloud Kafka, gunakan PLAIN. |
|
java.security.auth.login.config |
Path file autentikasi SASL. |
Demo skrip Writer
Kode berikut menunjukkan konfigurasi JSON untuk menulis data ke Kafka.
{
"type":"job",
"version":"2.0",//Nomor versi.
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"Kafka",//Nama plug-in.
"parameter":{
"server": "ip:9092", //Alamat server Kafka.
"keyIndex": 0, //Kolom yang akan digunakan sebagai kunci. Harus mengikuti konvensi penamaan camel case, dengan k huruf kecil.
"valueIndex": 1, //Kolom yang akan digunakan sebagai nilai. Saat ini, Anda hanya dapat memilih satu kolom dari data sumber atau meninggalkan parameter ini kosong. Jika kosong, semua data sumber digunakan.
//Misalnya, untuk menggunakan kolom ke-2, ke-3, dan ke-4 dari tabel ODPS sebagai kafkaValue, buat tabel ODPS baru, bersihkan dan integrasikan data dari tabel ODPS asli ke tabel baru, lalu gunakan tabel baru untuk sinkronisasi.
"keyType": "Integer", //Tipe kunci Kafka.
"valueType": "Short", //Tipe nilai Kafka.
"topic": "t08", //Topik Kafka.
"batchSize": 1024 //Jumlah data yang ditulis ke Kafka sekaligus, dalam byte.
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"//Jumlah catatan error.
},
"speed":{
"throttle":true,//Ketika throttle adalah false, parameter mbps tidak berlaku, yang berarti laju tidak dibatasi. Ketika throttle adalah true, laju dibatasi.
"concurrent":1, //Jumlah pekerjaan konkuren.
"mbps":"12"//Laju transmisi maksimum. 1 mbps sama dengan 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
Parameter skrip Writer
|
Parameter |
Deskripsi |
Wajib |
|
datasource |
Nama sumber data. Editor kode mendukung penambahan sumber data. Nilai parameter ini harus sama dengan nama sumber data yang ditambahkan. |
Ya |
|
server |
Alamat server Kafka dalam format ip:port. |
Ya |
|
topic |
Topik Kafka. Ini adalah kategori untuk feed pesan berbeda yang diproses Kafka. Setiap pesan yang dipublikasikan ke kluster Kafka memiliki kategori, yang disebut topik. Topik adalah kumpulan sekelompok pesan. |
Ya |
|
valueIndex |
Kolom di writer Kafka yang digunakan sebagai nilai. Jika tidak ditentukan, semua kolom digabungkan untuk membentuk nilai secara default. Pemisah ditentukan oleh fieldDelimiter. |
Tidak |
|
writeMode |
Saat valueIndex tidak dikonfigurasi, parameter ini menentukan format penggabungan semua kolom catatan sumber untuk membentuk nilai record Kafka. Nilai yang valid adalah text dan JSON. Nilai default adalah text.
Misalnya, jika catatan sumber memiliki tiga kolom dengan nilai a, b, dan c, dan writeMode diatur ke text dan fieldDelimiter diatur ke #, nilai record Kafka yang ditulis adalah string a#b#c. Jika writeMode diatur ke JSON dan column diatur ke [{"name":"col1"},{"name":"col2"},{"name":"col3"}], nilai record Kafka yang ditulis adalah string {"col1":"a","col2":"b","col3":"c"}. Jika valueIndex dikonfigurasi, parameter ini tidak berlaku. |
Tidak |
|
column |
Field di tabel tujuan tempat data akan ditulis, dipisahkan koma. Contoh: Saat valueIndex tidak dikonfigurasi dan writeMode diatur ke JSON, parameter ini menentukan nama bidang dalam struktur JSON untuk nilai kolom dari catatan sumber. Contohnya:
Jika valueIndex dikonfigurasi, atau jika writeMode diatur ke text, parameter ini tidak berlaku. |
Wajib saat valueIndex tidak dikonfigurasi dan writeMode diatur ke JSON. |
|
partition |
Menentukan nomor partisi di topik Kafka tempat data ditulis. Ini harus berupa bilangan bulat yang lebih besar dari atau sama dengan 0. |
Tidak |
|
keyIndex |
Kolom di writer Kafka yang digunakan sebagai kunci. Nilai parameter keyIndex harus berupa bilangan bulat yang lebih besar dari atau sama dengan 0. Jika tidak, tugas akan gagal. |
Tidak |
|
keyIndexes |
Array nomor ordinal kolom dalam catatan sumber yang digunakan sebagai kunci untuk record Kafka. Nomor ordinal kolom dimulai dari 0. Misalnya, [0,1,2] akan menggabungkan nilai semua nomor kolom yang dikonfigurasi dengan koma untuk membentuk kunci record Kafka. Jika tidak ditentukan, kunci record Kafka adalah null, dan data ditulis ke partisi topik secara round-robin. Anda hanya dapat menentukan salah satu parameter ini atau keyIndex. |
Tidak |
|
fieldDelimiter |
Saat writeMode diatur ke text dan valueIndex tidak dikonfigurasi, semua kolom catatan sumber digabungkan menggunakan pemisah kolom yang ditentukan oleh parameter ini untuk membentuk nilai record Kafka. Anda dapat mengonfigurasi satu karakter atau beberapa karakter sebagai pemisah. Anda dapat mengonfigurasi karakter Unicode dalam format \u0001. Karakter escape seperti \t dan \n didukung. Nilai default adalah \t. Jika writeMode tidak diatur ke text atau jika valueIndex dikonfigurasi, parameter ini tidak berlaku. |
Tidak |
|
keyType |
Tipe kunci Kafka. Nilai yang valid: BYTEARRAY, DOUBLE, FLOAT, INTEGER, LONG, dan SHORT. |
Ya |
|
valueType |
Tipe nilai Kafka. Nilai yang valid: BYTEARRAY, DOUBLE, FLOAT, INTEGER, LONG, dan SHORT. |
Ya |
|
nullKeyFormat |
Jika nilai kolom sumber yang ditentukan oleh keyIndex atau keyIndexes adalah null, nilai tersebut diganti dengan string yang ditentukan oleh parameter ini. Jika tidak dikonfigurasi, tidak ada penggantian yang dilakukan. |
Tidak |
|
nullValueFormat |
Jika nilai kolom sumber adalah null, nilai tersebut diganti dengan string yang ditentukan oleh parameter ini saat merakit nilai record Kafka. Jika Anda tidak menentukan parameter ini, tidak ada penggantian yang dilakukan. |
Tidak |
|
acks |
Konfigurasi acks saat menginisialisasi produsen Kafka. Ini menentukan metode acknowledgment untuk penulisan yang berhasil. Secara default, parameter acks diatur ke all. Nilai yang valid untuk acks adalah:
|
Tidak |
Apendiks: Definisi format pesan untuk penulisan ke Kafka
Setelah Anda mengonfigurasi dan menjalankan tugas sinkronisasi real-time, data yang dibaca dari database sumber ditulis ke topik Kafka dalam format JSON. Pertama, semua data yang ada di tabel sumber yang ditentukan ditulis ke topik Kafka yang sesuai. Kemudian, tugas memulai sinkronisasi real-time untuk terus menulis data inkremental ke topik tersebut. Informasi perubahan DDL inkremental dari tabel sumber juga ditulis ke topik Kafka dalam format JSON. Anda dapat memperoleh status dan informasi perubahan pesan yang ditulis ke Kafka. Untuk informasi lebih lanjut, lihat Apendiks: Format pesan.
Dalam data JSON dari tugas sinkronisasi offline, field payload.sequenceId, payload.timestamp.eventTime, dan payload.timestamp.checkpointTime diatur ke -1.
Apendiks: Tipe field JSON
Saat writeMode diatur ke JSON, Anda dapat menentukan tipe field JSON menggunakan field type dalam parameter column. Selama operasi penulisan, sistem mencoba mengonversi nilai kolom dari catatan sumber ke tipe yang ditentukan. Konversi tipe yang gagal menghasilkan data kotor.
|
Nilai yang valid |
Deskripsi |
|
JSON_STRING |
Mengonversi nilai kolom catatan sumber ke string dan menulisnya ke field JSON. Misalnya, jika nilai kolom catatan sumber adalah bilangan bulat |
|
JSON_NUMBER |
Mengonversi nilai kolom catatan sumber ke angka dan menulisnya ke field JSON. Misalnya, jika nilai kolom catatan sumber adalah string |
|
JSON_BOOL |
Mengonversi nilai kolom catatan sumber ke nilai Boolean dan menulisnya ke field JSON. Misalnya, jika nilai kolom catatan sumber adalah string |
|
JSON_ARRAY |
Mengonversi nilai kolom catatan sumber ke array JSON dan menulisnya ke field JSON. Misalnya, jika nilai kolom catatan sumber adalah string |
|
JSON_MAP |
Mengonversi nilai kolom catatan sumber ke objek JSON dan menulisnya ke field JSON. Misalnya, jika nilai kolom catatan sumber adalah string |
|
JSON_BASE64 |
Mengonversi array byte dari kolom sumber ke string yang dikodekan BASE64 dan menulisnya ke field JSON. Misalnya, jika nilai kolom catatan sumber adalah array 2 byte yang direpresentasikan dalam heksadesimal sebagai |
|
JSON_HEX |
Mengonversi array byte dari kolom sumber ke string heksadesimal dan menulisnya ke field JSON. Misalnya, jika nilai kolom catatan sumber adalah array 2 byte yang direpresentasikan dalam heksadesimal sebagai |