Konektor BigQuery Sink memungkinkan Anda melakukan streaming data dari Managed Service untuk Apache Kafka ke tabel BigQuery secara real time. Anda dapat menggunakan konektor ini untuk menyerap data streaming ke BigQuery untuk data warehousing, pelaporan analisis, dan mendukung dasbor real-time.
Sebelum memulai
Sebelum membuat konektor BigQuery Sink, pastikan Anda memiliki hal berikut:
Buat cluster Managed Service untuk Apache Kafka untuk cluster Connect Anda. Cluster ini adalah cluster Kafka utama yang terkait dengan cluster Connect. Cluster ini juga merupakan cluster sumber yang membentuk salah satu ujung pipeline konektor BigQuery Sink.
Buat cluster Connect untuk menghosting konektor BigQuery Sink Anda.
Buat set data BigQuery untuk menyimpan data yang di-streaming dari Kafka.
Buat dan konfigurasikan topik Kafka dalam cluster sumber. Data berpindah dari topik Kafka ini ke set data BigQuery tujuan.
Peran dan izin yang diperlukan
Untuk mendapatkan izin yang
diperlukan guna membuat konektor,
minta administrator untuk memberi Anda
peran IAM Managed Kafka Connector Editor (roles/managedkafka.connectorEditor) di project Anda.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Peran bawaan ini berisi izin yang diperlukan untuk membuat konektor. Untuk melihat izin yang benar-benar diperlukan, perluas bagian Izin yang diperlukan:
Izin yang diperlukan
Izin berikut diperlukan untuk membuat konektor:
-
Buat konektor:
managedkafka.connectors.create
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.
Memberikan izin untuk menulis ke tabel BigQuery
Agen Layanan Kafka Terkelola
harus memiliki izin untuk menulis pesan ke tabel BigQuery.
Berikan peran BigQuery Data Editor (roles/bigquery.dataEditor) kepada agen layanan
pada project yang berisi tabel.
Jika cluster Connect Anda berada di project yang berbeda dengan cluster Managed Service untuk Apache Kafka, lihat Membuat cluster Connect di project yang berbeda.
Parameter konfigurasi utama
Berikut adalah rekomendasi konfigurasi untuk konektor sink BigQuery.
Ukuran antrean
Setelan queueSize mengontrol jumlah maksimum permintaan tulis ke BigQuery. Secara default, nilai ini tidak dikonfigurasi, yang dapat
mengakibatkan error kehabisan memori di cluster Connect. Sebaiknya konfigurasikan nilai ini untuk mengurangi kemungkinan error tersebut. Item dalam antrean adalah permintaan tulis, dan tidak sesuai secara langsung dengan jumlah pesan atau byte. Oleh karena itu, nilai yang direkomendasikan sulit diketahui sebelumnya.
Saat pesan di-polling dari Kafka, konektor akan membagi pekerjaan berdasarkan tabel tujuannya. Jika semua pesan dalam polling akan ditulis ke satu tabel, hanya satu item kerja yang akan ditambahkan. Namun, jika pesan dalam polling ditulis ke tiga tabel, misalnya, tiga item pekerjaan akan ditambahkan. Ukuran item tugas dapat diperkirakan secara kasar berdasarkan konfigurasi polling pesan, ukuran pesan Kafka, dan jumlah tabel yang ditulis.
Skema untuk konektor BigQuery Sink
Konektor BigQuery Sink menggunakan pengonversi nilai yang dikonfigurasi
(value.converter) untuk mengurai nilai kumpulan data Kafka ke dalam kolom. Kemudian, pipeline akan menulis kolom ke kolom dengan nama yang sama di tabel BigQuery.
Konektor memerlukan skema untuk beroperasi. Skema dapat diberikan dengan cara berikut:
- Skema berbasis pesan: Skema disertakan sebagai bagian dari setiap pesan.
- Skema berbasis tabel: Konektor menyimpulkan skema pesan dari skema tabel BigQuery.
- Registry skema: Konektor membaca skema dari registry skema, seperti registry skema Managed Service untuk Apache Kafka (Pratinjau).
Bagian berikutnya menjelaskan opsi ini.
Skema berbasis pesan
Dalam mode ini, setiap data Kafka menyertakan skema JSON. Konektor menggunakan skema untuk menulis data kumpulan data sebagai baris tabel BigQuery.
Untuk menggunakan skema berbasis pesan, tetapkan properti berikut pada konektor:
value.converter=org.apache.kafka.connect.json.JsonConvertervalue.converter.schemas.enable=true
Contoh nilai data Kafka:
{
"schema": {
"type": "struct",
"fields": [
{
"field": "user",
"type": "string",
"optional": false
},
{
"field": "age",
"type": "int64",
"optional": false
}
]
},
"payload": {
"user": "userId",
"age": 30
}
}
Jika tabel tujuan sudah ada, skema tabel BigQuery harus kompatibel dengan skema pesan tersemat. Jika
autoCreateTables=true, konektor akan otomatis membuat tabel tujuan
jika diperlukan. Untuk mengetahui informasi selengkapnya, lihat Pembuatan tabel.
Jika Anda ingin konektor memperbarui skema tabel BigQuery saat skema pesan berubah, tetapkan allowNewBigQueryFields, allowSchemaUnionization, atau allowBigQueryRequiredFieldRelaxation ke true.
Skema berbasis tabel
Dalam mode ini, kumpulan data Kafka berisi data JSON biasa tanpa skema eksplisit. Konektor menyimpulkan skema dari tabel tujuan.
Persyaratan:
- Tabel BigQuery harus sudah ada.
- Data kumpulan data Kafka harus kompatibel dengan skema tabel.
- Mode ini tidak mendukung pembaruan skema dinamis berdasarkan pesan masuk.
Untuk menggunakan skema berbasis tabel, tetapkan properti berikut pada konektor:
value.converter=org.apache.kafka.connect.json.JsonConvertervalue.converter.schemas.enable=falsebigQueryPartitionDecorator=false
Jika tabel BigQuery menggunakan
partisi berbasis waktu dengan
partisi harian, bigQueryPartitionDecorator dapat berupa true. Jika tidak, tetapkan
properti ini ke false.
Contoh nilai data Kafka:
{
"user": "userId",
"age": 30
}
Registry skema
Dalam mode ini, setiap data Kafka berisi data Apache Avro, dan skema pesan disimpan dalam registry skema.
Untuk menggunakan konektor BigQuery Sink dengan registry skema, tetapkan properti berikut pada konektor:
value.converter=io.confluent.connect.avro.AvroConvertervalue.converter.schema.registry.url=SCHEMA_REGISTRY_URL
Ganti SCHEMA_REGISTRY_URL dengan URL registry skema.
Untuk menggunakan konektor dengan registry skema Managed Service untuk Apache Kafka, tetapkan properti berikut:
value.converter.bearer.auth.credentials.source=GCP
Untuk mengetahui informasi selengkapnya, lihat Menggunakan Kafka Connect dengan registry skema.
Tabel terkelola Apache Iceberg
Konektor BigQuery Sink mendukung tabel terkelola Apache Iceberg (selanjutnya disebut tabel terkelola Iceberg) sebagai target sink.
Tabel terkelola Iceberg menyediakan fondasi untuk membangun lakehouse format terbuka di Google Cloud. Tabel terkelola Iceberg menawarkan pengalaman terkelola sepenuhnya yang sama seperti tabel BigQuery, tetapi menyimpan data di bucket penyimpanan milik pelanggan menggunakan Parquet agar dapat dioperasikan dengan format tabel terbuka Apache Iceberg.
Untuk mengetahui informasi tentang cara membuat tabel Apache Iceberg, lihat Membuat tabel Apache Iceberg.
Membuat konektor BigQuery Sink
Konsol
Di konsol Google Cloud , buka halaman Connect Clusters.
Klik cluster Connect tempat Anda ingin membuat konektor.
Klik Create connector.
Untuk nama konektor, masukkan string.
Untuk panduan tentang cara memberi nama konektor, lihat Panduan untuk memberi nama resource Managed Service untuk Apache Kafka.
Untuk Connector plugin, pilih BigQuery Sink.
Di bagian Topics, tentukan topik Kafka yang akan dibaca. Anda dapat menentukan daftar topik atau ekspresi reguler agar sesuai dengan nama topik.
Opsi 1: Pilih Select a list of Kafka topics. Dalam daftar Kafka topics, pilih satu atau beberapa topik. Klik OK.
Opsi 2: Pilih Use a topic regex. Di kolom Topic regex, masukkan ekspresi reguler.
Klik Dataset dan tentukan set data BigQuery. Anda dapat memilih set data yang ada atau membuat set data baru.
Opsional: Di kotak Configurations, tambahkan properti konfigurasi atau edit properti default. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi konektor.
Pilih Task restart policy. Untuk mengetahui informasi selengkapnya, lihat Kebijakan memulai ulang tugas.
Klik Create.
gcloud
Jalankan perintah gcloud
managed-kafka connectors create:
gcloud managed-kafka connectors create CONNECTOR_ID \
--connect-cluster=CONNECT_CLUSTER_ID \
--location=LOCATION \
--config-file=CONFIG_FILE
Ganti kode berikut:
CONNECTOR_ID: ID atau nama konektor.CONNECT_CLUSTER_ID: ID cluster Connect tempat konektor dibuat.LOCATION: Lokasi cluster Connect.CONFIG_FILE: Jalur ke file konfigurasi YAML atau JSON lokal.
Berikut adalah contoh file konfigurasi untuk konektor BigQuery Sink:
name: "BQ_SINK_CONNECTOR_ID"
project: "GCP_PROJECT_ID"
topics: "GMK_TOPIC_ID"
tasks.max: 3
connector.class: "com.wepay.kafka.connect.bigquery.BigQuerySinkConnector"
key.converter: "org.apache.kafka.connect.storage.StringConverter"
value.converter: "org.apache.kafka.connect.json.JsonConverter"
value.converter.schemas.enable: "false"
defaultDataset: "BQ_DATASET_ID"
Ganti kode berikut:
BQ_SINK_CONNECTOR_ID: ID atau nama konektor BigQuery Sink. Untuk panduan tentang cara memberi nama konektor, lihat Panduan untuk memberi nama resource Managed Service untuk Apache Kafka. Nama konektor tidak dapat diubah.
GCP_PROJECT_ID: ID project Google Cloud tempat set data BigQuery Anda berada.
GMK_TOPIC_ID: ID topik Managed Service untuk Apache Kafka tempat data mengalir ke konektor BigQuery Sink.
BQ_DATASET_ID: ID set data BigQuery yang bertindak sebagai sink untuk pipeline.
Terraform
Anda dapat menggunakan resource Terraform untuk membuat konektor.
Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.
Go
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Menginstal library klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Managed Service for Apache Kafka Go API.
Untuk melakukan autentikasi ke Managed Service untuk Apache Kafka, siapkan Kredensial Default Aplikasi(ADC). Untuk mengetahui informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.
Java
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Menginstal library klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Managed Service for Apache Kafka Java API.
Untuk melakukan autentikasi ke Managed Service untuk Apache Kafka, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Menginstal library klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Python API Managed Service untuk Apache Kafka.
Untuk melakukan autentikasi ke Managed Service untuk Apache Kafka, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.
Setelah membuat konektor, Anda dapat mengedit, menghapus, menjeda, menghentikan, atau memulai ulang konektor.
Mengonfigurasi konektor
Bagian ini menjelaskan beberapa properti konfigurasi yang dapat Anda tetapkan pada konektor. Untuk mengetahui daftar lengkap properti yang khusus untuk konektor ini, lihat Konfigurasi konektor BigQuery Sink.
Nama tabel
Secara default, konektor menggunakan nama topik sebagai nama tabel BigQuery. Untuk menggunakan nama tabel yang berbeda, tetapkan properti topic2TableMap
dengan format berikut:
topic2TableMap=TOPIC_1:TABLE_1,TOPIC_2:TABLE_2,...
Pembuatan tabel
Konektor BigQuery Sink dapat membuat tabel tujuan jika tabel tersebut belum ada.
Jika
autoCreateTables=true, konektor akan mencoba membuat tabel BigQuery yang belum ada. Setelan ini adalah perilaku default.Jika
autoCreateTables=false, konektor tidak akan membuat tabel apa pun. Jika tabel tujuan tidak ada, akan terjadi error.
Jika autoCreateTables adalah true, Anda dapat menggunakan properti konfigurasi berikut untuk kontrol yang lebih mendetail atas cara konektor membuat dan mengonfigurasi tabel baru:
allBQFieldsNullableclusteringPartitionFieldNamesconvertDoubleSpecialValuespartitionExpirationMssanitizeFieldNamessanitizeTopicstimestampPartitionFieldName
Untuk mengetahui informasi tentang properti ini, lihat Konfigurasi konektor BigQuery Sink.
Metadata Kafka
Anda dapat memetakan data tambahan dari Kafka seperti informasi metadata dan informasi kunci ke dalam tabel BigQuery dengan mengonfigurasi kolom kafkaDataFieldName dan kafkaKeyFieldName. Contoh informasi metadata mencakup topik, partisi, offset, dan waktu penyisipan Kafka.