Bermigrasi dari Kafka ke Pub/Sub Lite

Dokumen ini berguna jika Anda mempertimbangkan untuk bermigrasi dari Apache Kafka yang dikelola sendiri ke Pub/Sub Lite.

Ringkasan Pub/Sub Lite

Pub/Sub Lite adalah layanan pesan bervolume tinggi yang dibuat untuk biaya operasi yang rendah. Pub/Sub Lite menawarkan Penyimpanan Zona dan Regional bersama dengan kapasitas yang disediakan sebelumnya. Dalam Pub/Sub Lite, Anda dapat memilih topik Lite zonal atau regional. Topik Lite regional menawarkan SLA ketersediaan yang sama dengan topik Pub/Sub. Namun, ada perbedaan keandalan antara Pub/Sub dan Pub/Sub Lite dalam hal replikasi pesan.

Untuk mempelajari Pub/Sub dan Pub/Sub Lite lebih lanjut, baca Apa itu Pub/Sub.

Untuk mempelajari lebih lanjut region dan zona yang didukung Lite, lihat Lokasi Pub/Sub Lite.

Terminologi di Pub/Sub Lite

Berikut adalah beberapa istilah utama untuk Pub/Sub Lite.

  • Pesan. Data yang bergerak melalui layanan Pub/Sub Lite.

  • Topik. Resource bernama yang mewakili feed pesan. Dalam Pub/Sub Lite, Anda dapat memilih untuk membuat topik Lite zonal atau regional. Topik regional Pub/Sub Lite menyimpan data di dua zona dalam satu region. Topik zonal Pub/Sub Lite mereplikasi data hanya dalam satu zona.

  • Reservasi. Kumpulan kapasitas throughput bernama yang digunakan bersama oleh beberapa topik Lite di suatu region.

  • Langganan Resource bernama yang mewakili minat untuk menerima pesan dari topik Lite tertentu. Langganan mirip dengan grup konsumen di Kafka yang hanya terhubung ke satu topik.

  • Pelanggan. Klien Pub/Sub Lite yang menerima pesan dari topik Lite dan pada langganan yang ditentukan. Langganan dapat memiliki beberapa klien pelanggan. Dalam hal ini, pesan akan di-load balance di seluruh klien pelanggan. Di Kafka, subscriber disebut konsumen.

  • Penayang. Aplikasi yang membuat pesan dan mengirim (memublikasikan) pesan ke topik Lite tertentu. Sebuah topik dapat memiliki beberapa penayang. Di Kafka, penayang disebut produsen.

Perbedaan antara Kafka dan Pub/Sub Lite

Meskipun secara konsep mirip dengan Kafka, Pub/Sub Lite adalah sistem yang berbeda dengan API yang lebih sempit dan lebih berfokus pada penyerapan data. Meskipun perbedaan tersebut tidak penting untuk penyerapan dan pemrosesan streaming, ada beberapa kasus penggunaan tertentu yang memerlukan perbedaan ini.

Kafka sebagai database

Tidak seperti Kafka, Pub/Sub Lite saat ini tidak mendukung publikasi transaksional atau pemadatan log, meskipun idempotence didukung. Fitur Kafka ini lebih berguna jika Anda menggunakan Kafka sebagai database, bukan sebagai sistem pesan. Jika Anda menggunakan Kafka terutama sebagai database, pertimbangkan untuk menjalankan cluster Kafka Anda sendiri atau menggunakan solusi Kafka terkelola seperti Confluent Cloud. Jika kedua solusi ini tidak memungkinkan, Anda juga dapat mempertimbangkan untuk menggunakan database yang skalabel secara horizontal seperti Cloud Spanner.

Aliran Kafka

Kafka streams adalah sistem pemrosesan data yang dibuat di atas Kafka. Meskipun mengizinkan injeksi klien konsumen, tindakan ini memerlukan akses ke semua operasi administrator. Kafka Streams juga menggunakan properti database transaksional Kafka untuk menyimpan metadata internal. Jadi, Pub/Sub Lite saat ini tidak dapat digunakan untuk aplikasi Kafka Streams.

Apache Beam adalah sistem pemrosesan data streaming serupa yang terintegrasi dengan Kafka, Pub/Sub, dan Pub/Sub Lite. Anda dapat menjalankan pipeline Beam dengan cara yang terkelola sepenuhnya dengan Dataflow, atau di cluster Apache Flink dan Apache Spark yang sudah ada.

Memantau

Klien Kafka dapat membaca metrik sisi server. Di Pub/Sub Lite, metrik yang relevan dengan perilaku penayang dan pelanggan dikelola melalui Cloud Monitoring tanpa konfigurasi tambahan.

Pengelolaan kapasitas

Kapasitas topik Kafka ditentukan oleh kapasitas cluster. Setelan replikasi, pemadatan kunci, dan batch menentukan kapasitas yang diperlukan untuk melayani topik tertentu di cluster Kafka. Throughput topik Kafka dibatasi oleh kapasitas mesin tempat broker berjalan. Sebaliknya, Anda harus menentukan kapasitas penyimpanan dan throughput untuk topik Pub/Sub Lite. Kapasitas penyimpanan Pub/Sub Lite adalah properti topik yang dapat dikonfigurasi. Kapasitas throughput didasarkan pada kapasitas reservasi yang dikonfigurasi, dan batas per partisi yang melekat atau dikonfigurasi.

Autentikasi dan keamanan

Apache Kafka mendukung beberapa mekanisme autentikasi dan enkripsi terbuka. Dengan Pub/Sub Lite, autentikasi didasarkan pada sistem IAM. Keamanan terjamin melalui enkripsi dalam penyimpanan dan dalam pengiriman. Baca selengkapnya tentang autentikasi Pub/Sub Lite di bagian alur kerja Migrasi, nanti dalam dokumen ini.

Memetakan properti Kafka ke properti Pub/Sub Lite

Kafka memiliki banyak opsi konfigurasi yang mengontrol struktur topik, batas, dan properti broker. Beberapa yang umum dan berguna untuk penyerapan data dibahas di bagian ini, dengan yang setara di Pub/Sub Lite. Karena Pub/Sub Lite adalah sistem terkelola, Anda tidak perlu mempertimbangkan banyak properti broker.

Properti konfigurasi topik

Properti Kafka Properti Pub/Sub Lite Deskripsi
retention.bytes Penyimpanan per partisi Semua partisi dalam topik Lite memiliki kapasitas penyimpanan yang dikonfigurasi sama. Total kapasitas penyimpanan topik Lite adalah jumlah kapasitas penyimpanan semua partisi dalam topik.
retention.ms Periode retensi pesan Jumlah waktu maksimum yang digunakan topik Lite untuk menyimpan pesan. Jika Anda tidak menentukan periode retensi pesan, topik Lite akan menyimpan pesan hingga Anda melampaui kapasitas penyimpanan.
flush.ms, acks Tidak dapat dikonfigurasi di Pub/Sub Lite Publikasi tidak akan dikonfirmasi hingga dijamin akan dipertahankan ke penyimpanan yang direplikasi.
max.message.bytes Tidak dapat dikonfigurasi di Pub/Sub Lite 3,5 MiB adalah ukuran pesan maksimum yang dapat dikirim ke Pub/Sub Lite. Ukuran pesan dihitung dengan cara yang dapat diulang.
message.timestamp.type Tidak dapat dikonfigurasi di Pub/Sub Lite Saat menggunakan implementasi konsumen, stempel waktu peristiwa dipilih jika ada atau stempel waktu publikasi digunakan sebagai gantinya. Stempel waktu publikasi dan peristiwa tersedia saat menggunakan Beam.

Untuk mempelajari properti topik Lite lebih lanjut, lihat Properti topik Lite.

Properti konfigurasi produsen

Pub/Sub Lite mendukung Protokol wire produsen. Beberapa properti mengubah perilaku Library Klien Cloud produsen; beberapa properti umum dibahas dalam tabel berikut.

Properti Kafka Properti Pub/Sub Lite Deskripsi
auto.create.topics.enable Tidak dapat dikonfigurasi di Pub/Sub Lite Buat topik dan langganan yang kira-kira setara dengan grup konsumen untuk satu topik di Pub/Sub Lite. Anda dapat menggunakan konsol, gcloud CLI, API, atau Library Klien Cloud.
key.serializer, value.serializer Tidak dapat dikonfigurasi di Pub/Sub Lite

Diperlukan saat menggunakan Produsen Kafka atau library yang setara yang berkomunikasi menggunakan wire protocol.

batch.size Didukung di Pub/Sub Lite Pengelompokan didukung. Nilai yang direkomendasikan untuk nilai ini adalah 10 MiB untuk performa terbaik.
linger.ms Didukung di Pub/Sub Lite Pengelompokan didukung. Nilai yang direkomendasikan untuk nilai ini adalah 50 md untuk performa terbaik.
max.request.size Didukung di Pub/Sub Lite Server menetapkan batas 20 MiB per batch. Tetapkan nilai ini ke lebih rendah dari 20 MiB di klien Kafka Anda.
enable.idempotence Didukung di Pub/Sub Lite
compression.type Tidak didukung di Pub/Sub Lite Anda harus menetapkan nilai ini secara eksplisit ke none.

Properti konfigurasi konsumen

Pub/Sub Lite mendukung Protokol wire konsumen. Beberapa properti mengubah perilaku Library Klien Cloud konsumen; beberapa properti umum dibahas dalam tabel berikut.

Properti Kafka Deskripsi
key.deserializer, value.deserializer

Diperlukan saat menggunakan Kafka Consumer atau library yang setara yang berkomunikasi menggunakan wire protocol.

auto.offset.reset Konfigurasi ini tidak didukung atau diperlukan. Langganan dijamin memiliki lokasi offset yang ditentukan setelah dibuat.
message.timestamp.type Stempel waktu publikasi selalu tersedia dari Pub/Sub Lite dan dijamin tidak akan menurun berdasarkan per partisi. Stempel waktu peristiwa mungkin ada atau tidak, bergantung pada apakah stempel waktu tersebut dilampirkan ke pesan saat dipublikasikan. Stempel waktu publikasi dan peristiwa tersedia secara bersamaan saat menggunakan Dataflow.
max.partition.fetch.bytes, max.poll.records Menerapkan batas lunak pada jumlah data dan byte yang ditampilkan dari panggilan poll() dan jumlah byte yang ditampilkan dari permintaan pengambilan internal. Nilai default untuk `max.partition.fetch.bytes` sebesar 1 MiB dapat membatasi throughput klien Anda. Pertimbangkan untuk menaikkan nilai ini.

Membandingkan fitur Kafka dan Pub/Sub Lite

Tabel berikut membandingkan fitur Apache Kafka dengan fitur Pub/Sub Lite:

Fitur Kafka Pub/Sub Lite
Pengurutan pesan Ya Ya
Penghapusan duplikat pesan Ya Ya, menggunakan Dataflow
Langganan push Tidak Ya, menggunakan ekspor Pub/Sub
Transaksi Ya Tidak
Penyimpanan pesan Dibatasi oleh penyimpanan mesin yang tersedia Tidak terbatas
Putar ulang pesan Ya Ya
Logging dan pemantauan Dikelola sendiri Otomatis dengan Cloud Monitoring
Stream processing Ya, dengan Kafka Streams, Apache Beam, atau Dataproc. Ya, dengan Beam atau Dataproc.

Tabel berikut membandingkan fungsi yang dihosting sendiri dengan Kafka dan fungsi yang dikelola oleh Google menggunakan Pub/Sub Lite:

Fitur Kafka Pub/Sub Lite
Ketersediaan Men-deploy Kafka secara manual ke lokasi tambahan. Di-deploy di seluruh dunia. Lihat lokasi.
Pemulihan dari bencana Mendesain dan mengelola pencadangan dan replikasi Anda sendiri. Dikelola oleh Google.
Pengelolaan infrastruktur Men-deploy dan mengoperasikan virtual machine (VM) atau mesin secara manual. Pertahankan versi dan patch yang konsisten. Dikelola oleh Google.
Perencanaan kapasitas Merencanakan kebutuhan penyimpanan dan komputasi secara manual terlebih dahulu. Dikelola oleh Google. Anda dapat meningkatkan komputasi dan penyimpanan kapan saja.
Dukungan Tidak ada. Staf dan dukungan siaga tersedia 24 jam.

Perbandingan biaya Kafka dan Pub/Sub Lite

Cara Anda memperkirakan dan mengelola biaya di Pub/Sub Lite berbeda dengan di Kafka. Biaya untuk cluster Kafka di lokal atau di cloud mencakup biaya mesin, disk, jaringan, pesan masuk, dan pesan keluar. Biaya ini juga mencakup biaya overhead untuk mengelola dan memelihara sistem ini serta infrastruktur terkaitnya. Saat mengelola cluster Kafka, Anda harus mengupgrade komputer secara manual, merencanakan kapasitas cluster, dan menerapkan disaster recovery yang mencakup perencanaan dan pengujian yang ekstensif. Anda harus menggabungkan semua biaya ini untuk menentukan total biaya kepemilikan (TCO) yang sebenarnya.

Harga Pub/Sub Lite mencakup biaya reservasi (byte yang dipublikasikan, byte yang dilanggani, byte yang ditangani oleh proxy Kafka) dan biaya penyimpanan yang disediakan. Anda membayar tepat resource yang Anda pesan selain biaya pesan keluar. Anda dapat menggunakan kalkulator harga untuk memberikan perkiraan biaya.

Alur kerja migrasi

Untuk memigrasikan topik dari cluster Kafka ke Pub/Sub Lite, gunakan petunjuk berikut.

Mengonfigurasi resource Pub/Sub Lite

  1. Buat reservasi Pub/Sub Lite untuk throughput yang diharapkan untuk semua topik yang Anda migrasikan.

    Gunakan kalkulator harga Pub/Sub Lite untuk menghitung metrik throughput agregat dari topik Kafka yang ada. Untuk informasi selengkapnya tentang cara membuat pemesanan, lihat Membuat dan mengelola pemesanan Lite.

  2. Buat satu topik Pub/Sub Lite untuk setiap topik yang sesuai di Kafka.

    Untuk mengetahui informasi selengkapnya tentang cara membuat topik Lite, lihat Membuat dan mengelola topik Lite.

  3. Buat satu langganan Pub/Sub Lite untuk setiap grup konsumen dan pasangan topik yang sesuai di cluster Kafka.

    Misalnya, untuk grup konsumen bernama consumers yang menggunakan dari topic-a dan topic-b, Anda harus membuat langganan consumers-a yang dilampirkan ke topic-a dan langganan consumers-b yang dilampirkan ke topic-b. Untuk mengetahui informasi selengkapnya tentang cara membuat langganan, lihat Membuat dan mengelola langganan Lite.

Melakukan autentikasi ke Pub/Sub Lite

Berdasarkan jenis klien Kafka Anda, pilih salah satu metode berikut:

Klien Kafka berbasis Java versi 3.1.0 atau yang lebih baru dengan mem-build ulang

Untuk klien Kafka berbasis Java versi 3.1.0 atau yang lebih baru yang dapat di-build ulang di instance tempat Anda menjalankan klien Kafka:

  1. Instal paket com.google.cloud:pubsublite-kafka-auth.

  2. Dapatkan parameter yang diperlukan untuk mengautentikasi ke Pub/Sub Lite dengan bantuan com.google.cloud.pubsublite.kafka.ClientParameters.getParams.

    Metode getParams() (lihat contoh kode ) melakukan inisialisasi konfigurasi JAAS dan SASL berikut sebagai parameter untuk mengautentikasi ke Pub/Sub Lite:

    security.protocol=SASL_SSL
    sasl.mechanism=OAUTHBEARER
    sasl.oauthbearer.token.endpoint.url=http://localhost:14293
    sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.secured.OAuthBearerLoginCallbackHandler
    

Klien Kafka berbasis Java yang menjalankan versi 3.1.0 atau yang lebih baru tanpa mem-build ulang

Untuk klien Kafka yang mendukung KIP-768, kami mendukung autentikasi OAUTHBEARER khusus konfigurasi yang menggunakan skrip sidecar Python. Versi ini mencakup Java versi 3.1.0 atau yang lebih baru Januari 2022.

Lakukan langkah-langkah berikut di instance tempat Anda menjalankan klien Kafka:

  1. Instal Python 3.6 atau yang lebih tinggi.

    Lihat Menginstal Python.

  2. Instal paket autentikasi Google: pip install google-auth

    Library ini menyederhanakan berbagai mekanisme autentikasi server ke server untuk mengakses Google API. Lihat halaman google-auth.

  3. Jalankan skrip kafka_gcp_credentials.py.

    Skrip ini memulai server HTTP lokal dan mengambil kredensial Google Cloud default di lingkungan menggunakan google.auth.default().

    Prinsipal dalam kredensial yang diambil harus memiliki izin pubsublite.locations.openKafkaStream untuk project Google Cloud yang Anda gunakan dan lokasi tempat Anda terhubung. Peran Pub/Sub Lite Publisher (roles/pubsublite.publisher) dan Pub/Sub Lite Subscriber (roles/pubsublite.subscriber) memiliki izin yang diperlukan ini. Tambahkan peran ini ke prinsipal Anda.

    Kredensial digunakan dalam autentikasi SASL/OAUTHBEARER untuk klien Kafka.

    Parameter berikut diperlukan di properti Anda untuk melakukan autentikasi ke Pub/Sub Lite dari klien Kafka:

    security.protocol=SASL_SSL
    sasl.mechanism=OAUTHBEARER
    sasl.oauthbearer.token.endpoint.url=localhost:14293
    sasl.login.callback.handler.class=org.apache.kafka.common.security.oauthbearer.secured.OAuthBearerLoginCallbackHandler
    sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule \
      required clientId="unused" clientSecret="unused" \
      extension_pubsubProject="PROJECT_ID";
    

    Ganti PROJECT_ID dengan ID project Anda yang menjalankan Pub/Sub Lite.

Semua klien lainnya tanpa membangun ulang

Untuk semua klien lainnya, lakukan langkah-langkah berikut:

  1. Download file JSON kunci akun layanan untuk akun layanan yang ingin Anda gunakan untuk klien.

  2. Enkode file akun layanan menggunakan encoding base64 untuk digunakan sebagai string autentikasi Anda.

    Pada sistem Linux atau macOS, Anda dapat menggunakan perintah base64 (sering kali diinstal secara default) sebagai berikut:

    base64 < my_service_account.json > password.txt
    

    Anda dapat menggunakan konten file sandi untuk autentikasi dengan parameter berikut.

    Java

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
     username="PROJECT_ID" \
     password="contents of base64 encoded password file";
    

    Ganti PROJECT_ID dengan ID project Anda yang menjalankan Pub/Sub.

    librdkafka

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.username=PROJECT_ID
    sasl.password=contents of base64 encoded password file
    

    Ganti PROJECT_ID dengan ID project Anda yang menjalankan Pub/Sub.

Meng-clone data menggunakan Kafka Connect

Tim Pub/Sub Lite mengelola penerapan Kafka Connect Sink. Anda dapat mengonfigurasi implementasi ini untuk menyalin data dari topik Kafka ke topik Pub/Sub Lite menggunakan cluster Kafka Connect.

Untuk mengonfigurasi konektor guna melakukan penyalinan data, lihat Konektor Kafka Grup Pub/Sub.

Jika Anda ingin memastikan bahwa afinitas partisi tidak terpengaruh oleh proses migrasi, pastikan topik kafka dan topik Pub/Sub Lite memiliki jumlah partisi yang sama, dan properti pubsublite.ordering.mode ditetapkan ke KAFKA. Hal ini menyebabkan konektor merutekan pesan ke partisi Pub/Sub Lite dengan indeks yang sama dengan partisi kafka tempat pesan tersebut awalnya dipublikasikan.

Memigrasikan konsumen

Model resource Pub/Sub Lite berbeda dengan Kafka. Yang paling penting, tidak seperti grup konsumen, langganan adalah resource eksplisit dan dikaitkan dengan tepat satu topik. Karena perbedaan ini, di mana pun di Kafka Consumer API yang memerlukan topic untuk diteruskan, jalur langganan lengkap harus diteruskan.

Selain konfigurasi SASL untuk klien Kafka, setelan berikut juga diperlukan saat menggunakan Kafka Consumer API untuk berinteraksi dengan Pub/Sub Lite.

bootstrap.servers=REGION-kafka-pubsub.googleapis.com:443
group.id=unused

Ganti REGION dengan region tempat langganan Pub/Sub Lite Anda berada.

Sebelum memulai tugas konsumen Pub/Sub Lite pertama untuk langganan tertentu, Anda dapat memulai (tetapi jangan menunggu) operasi penelusuran admin untuk menetapkan lokasi awal bagi konsumen.

Saat Anda memulai konsumen, konsumen akan terhubung kembali ke offset saat ini dalam data pesan yang tertunda. Jalankan klien lama dan baru secara paralel selama waktu yang diperlukan untuk memverifikasi perilakunya, lalu nonaktifkan klien konsumen lama.

Memigrasikan produser

Selain konfigurasi SASL untuk klien Kafka, hal berikut juga diperlukan sebagai parameter produsen saat menggunakan Kafka Producer API untuk berinteraksi dengan Pub/Sub Lite.

bootstrap.servers=REGION-kafka-pubsub.googleapis.com:443

Ganti REGION dengan region tempat topik Pub/Sub Lite Anda berada.

Setelah memigrasikan semua konsumen topik untuk membaca dari Pub/Sub Lite, pindahkan traffic produsen Anda untuk menulis ke Pub/Sub Lite secara langsung.

Migrasikan klien produsen secara bertahap untuk menulis ke topik Pub/Sub Lite, bukan topik Kafka.

Mulai ulang klien produsen untuk mengambil konfigurasi baru.

Menonaktifkan Kafka Connect

Setelah Anda memigrasikan semua produsen untuk menulis ke Pub/Sub Lite secara langsung, konektor tidak akan menyalin data lagi.

Anda dapat menonaktifkan instance Kafka Connect.

Memecahkan masalah koneksi Kafka

Karena klien Kafka berkomunikasi melalui wire protocol khusus, kami tidak dapat memberikan pesan error untuk kegagalan dalam semua permintaan. Mengandalkan kode error yang dikirim sebagai bagian dari pesan.

Anda dapat melihat detail selengkapnya tentang error yang terjadi di klien dengan menetapkan tingkat logging untuk awalan org.apache.kafka ke FINEST.

Throughput rendah dan backlog yang meningkat

Ada beberapa alasan mengapa Anda mungkin melihat throughput rendah dan backlog yang meningkat. Salah satu alasannya mungkin karena kapasitas tidak memadai.

Anda dapat mengonfigurasi kapasitas throughput di tingkat topik atau dengan menggunakan reservasi. Jika kapasitas throughput untuk langganan dan publikasi tidak memadai, throughput yang sesuai untuk langganan dan publikasi akan dibatasi.

Error throughput ini ditandai oleh metrik topic/flow_control_status untuk penayang, dan metrik subscription/flow_control_status untuk pelanggan. Metrik ini memberikan status berikut:

  • NO_PARTITION_CAPACITY: Pesan ini menunjukkan bahwa batas throughput per partisi telah tercapai.

  • NO_RESERVATION_CAPACITY: Pesan ini menunjukkan bahwa batas throughput per pemesanan telah tercapai.

Anda dapat melihat grafik penggunaan untuk kuota publikasi dan langganan topik atau pemesanan, lalu memeriksa apakah penggunaannya mencapai atau mendekati 100%.

Untuk mengatasi masalah ini, tingkatkan kapasitas throughput topik atau reservasi.

Pesan error otorisasi topik gagal

Publikasi menggunakan Kafka API mengharuskan agen layanan Lite memiliki izin yang tepat untuk memublikasikan ke topik Pub/Sub Lite.

Anda mendapatkan error TOPIC_AUTHORIZATION_FAILED di klien jika tidak memiliki izin yang benar untuk memublikasikan ke topik Pub/Sub Lite.

Untuk mengatasi masalah ini, periksa apakah agen layanan Lite untuk project diteruskan dalam konfigurasi autentikasi.

Pesan error topik tidak valid

Berlangganan menggunakan Kafka API memerlukan penerusan jalur langganan lengkap di semua tempat yang mengharapkan topic di Kafka Consumer API.

Anda mendapatkan error INVALID_TOPIC_EXCEPTION di klien Konsumen jika tidak meneruskan jalur langganan yang diformat dengan baik.

Permintaan tidak valid saat tidak menggunakan reservasi

Penggunaan dukungan protokol wire kafka mengharuskan semua topik memiliki reservasi terkait untuk menagih penggunaan.