Migrasikan topik, kelompok konsumen, dan data pesan dari kluster Apache Kafka mandiri ke instans ApsaraMQ for Kafka menggunakan tool migrasi ApsaraMQ for Kafka dan Apache Kafka MirrorMaker.
Tool migrasi (kafka-migration-assessment.jar) menangani metadata:
Membaca konfigurasi topik dari kluster ZooKeeper sumber dan membuatnya kembali di instans tujuan.
Mengidentifikasi kelompok konsumen dari kluster Kafka sumber dan membuatnya kembali di instans tujuan.
MirrorMaker menangani data pesan (opsional):
Mengonsumsi pesan dari kluster sumber dan memproduksinya ke kluster tujuan.
Alur kerja migrasi
Migrasi end-to-end terdiri atas empat langkah:
Evaluasi spesifikasi — Evaluasi spesifikasi instans yang diperlukan untuk beban kerja Anda.
Beli dan deploy instans — Buat instans ApsaraMQ for Kafka berdasarkan hasil evaluasi.
Migrasi topik dan kelompok konsumen — Transfer metadata dari kluster mandiri ke instans baru.
(Opsional) Migrasi data pesan — Replikasi pesan menggunakan MirrorMaker.
Sebelum memulai
Jika kluster Apache Kafka mandiri Anda berjalan di Alibaba Cloud, beli instans ApsaraMQ for Kafka di wilayah yang sama dan deploy di Virtual Private Cloud (VPC) yang sama. Migrasi berbasis VPC lebih cepat dan aman dibandingkan migrasi berbasis Internet.
Panduan ini menggunakan contoh instans ApsaraMQ for Kafka yang terhubung ke Internet dan VPC.
Langkah 1: Evaluasi spesifikasi
ApsaraMQ for Kafka menyediakan fitur evaluasi spesifikasi yang merekomendasikan spesifikasi instans berdasarkan trafik, kapasitas disk, dan tipe disk kluster mandiri Anda.
Untuk petunjuknya, lihat Evaluasi spesifikasi.
Langkah 2: Beli dan deploy instans
Beli instans ApsaraMQ for Kafka yang sesuai dengan spesifikasi hasil evaluasi.
Untuk petunjuknya, lihat Beli dan deploy instans yang terhubung ke Internet dan VPC.
Langkah 3: Migrasi topik dan kelompok konsumen
Prasyarat
Sebelum memulai, pastikan Anda telah:
Menginstal JDK 8 atau 11 di server kluster Apache Kafka mandiri Anda. Untuk tautan unduhan, lihat Java Downloads.
Mengunduh tool migrasi kafka-migration-assessment.jar ke server.
Migrasi topik
Migrasi topik membaca metadata topik dari ZooKeeper sumber dan membuat topik yang sesuai di instans ApsaraMQ for Kafka tujuan. Proses ini terdiri dari dua fase: pemeriksaan awal (dry run) dan commit (migrasi aktual).
Fase 1: Pemeriksaan Awal
Pratinjau topik yang akan dimigrasikan:
java -jar kafka-migration-assessment.jar TopicMigrationFromZk \
--sourceZkConnect 192.168.XX.XX \
--destAk <your-access-key-id> \
--destSk <your-access-key-secret> \
--destRegionId <your-region-id> \
--destInstanceId <your-instance-id>Ganti placeholder berikut dengan nilai aktual Anda:
| Parameter | Deskripsi | Contoh |
|---|---|---|
192.168.XX.XX | Alamat IP kluster ZooKeeper sumber | 192.168.0.100 |
<your-access-key-id> | ID AccessKey akun Alibaba Cloud pemilik instans tujuan | LTAI5tXxx |
<your-access-key-secret> | Rahasia AccessKey akun Alibaba Cloud pemilik instans tujuan | xXxXxXx |
<your-region-id> | ID wilayah instans ApsaraMQ for Kafka tujuan | cn-hangzhou |
<your-instance-id> | ID instans instans ApsaraMQ for Kafka tujuan | alikafka_post-cn-xxx |
Contoh output:
13:40:08 INFO - Begin to migrate topics:[test]
13:40:08 INFO - Total topic number:1
13:40:08 INFO - Will create topic:test, isCompactTopic:false, partition number:1Tinjau output untuk memastikan daftar topik, jumlah partisi, dan pengaturan compaction.
Fase 2: Commit
Tambahkan flag --commit untuk menjalankan migrasi aktual:
java -jar kafka-migration-assessment.jar TopicMigrationFromZk \
--sourceZkConnect 192.168.XX.XX \
--destAk <your-access-key-id> \
--destSk <your-access-key-secret> \
--destRegionId <your-region-id> \
--destInstanceId <your-instance-id> \
--commitContoh output:
13:51:12 INFO - Begin to migrate topics:[test]
13:51:12 INFO - Total topic number:1
13:51:13 INFO - cmd=TopicMigrationFromZk, request=null, response={"code":200,"requestId":"7F76C7D7-AAB5-4E29-B49B-CD6F1E0F508B","success":true,"message":"operation success"}
13:51:13 INFO - TopicCreate success, topic=test, partition number=1, isCompactTopic=falseTanggapan "code":200 dengan "success":true mengonfirmasi bahwa topik berhasil dibuat di instans tujuan.
Migrasi kelompok konsumen
Migrasi kelompok konsumen memerlukan file properti consumer Kafka untuk membaca offset konsumen dari kluster sumber.
Langkah 1: Buat file kafka.properties
Buat file bernama kafka.properties dengan konten berikut:
# Titik akhir kluster Apache Kafka mandiri
bootstrap.servers=localhost:9092
# ID kelompok konsumen. Gunakan kelompok yang tidak memiliki data offset yang ada
# agar konsumsi dimulai dari pesan pertama.
group.id=XXX
## Jika kluster sumber memerlukan otentikasi, hapus komentar
## dan konfigurasikan parameter berikut:
# Mekanisme otentikasi SASL
#sasl.mechanism=PLAIN
# Protokol keamanan
#security.protocol=SASL_SSL
# Jalur truststore SSL
#ssl.truststore.location=/path/to/kafka.client.truststore.jks
# Kata sandi truststore SSL
#ssl.truststore.password=***
# Jalur konfigurasi JAAS SASL
#java.security.auth.login.config=/path/to/kafka_client_jaas.confLangkah 2: Pemeriksaan Awal
Pratinjau kelompok konsumen yang akan dimigrasikan:
java -jar kafka-migration-assessment.jar ConsumerGroupMigrationFromTopic \
--propertiesPath /usr/local/kafka_2.12-2.4.0/config/kafka.properties \
--destAk <your-access-key-id> \
--destSk <your-access-key-secret> \
--destRegionId <your-region-id> \
--destInstanceId <your-instance-id>| Parameter | Deskripsi |
|---|---|
--propertiesPath | Jalur absolut ke file kafka.properties |
--destAk | ID AccessKey akun tujuan |
--destSk | Rahasia AccessKey akun tujuan |
--destRegionId | ID wilayah instans tujuan |
--destInstanceId | ID instans instans tujuan |
Contoh output:
15:29:45 INFO - Will create consumer groups:[XXX, test-consumer-group]Langkah 3: Commit
Tambahkan flag --commit untuk menjalankan migrasi aktual:
java -jar kafka-migration-assessment.jar ConsumerGroupMigrationFromTopic \
--propertiesPath /usr/local/kafka_2.12-2.4.0/config/kafka.properties \
--destAk <your-access-key-id> \
--destSk <your-access-key-secret> \
--destRegionId <your-region-id> \
--destInstanceId <your-instance-id> \
--commitContoh output:
15:35:51 INFO - cmd=ConsumerGroupMigrationFromTopic, request=null, response={"code":200,"requestId":"C9797848-FD4C-411F-966D-0D4AB5D12F55","success":true,"message":"operation success"}
15:35:51 INFO - ConsumerCreate success, consumer group=XXX
15:35:57 INFO - cmd=ConsumerGroupMigrationFromTopic, request=null, response={"code":200,"requestId":"3BCFDBF2-3CD9-4D48-92C3-385C8DBB9709","success":true,"message":"operation success"}
15:35:57 INFO - ConsumerCreate success, consumer group=test-consumer-groupMonitor progres migrasi
Login ke Konsol ApsaraMQ for Kafka.
Di bagian Resource Distribution pada halaman Overview, pilih wilayah instans tujuan Anda.
Di panel navigasi kiri, klik Migration, lalu klik tab Metadata Import.
Temukan instans tujuan Anda dan periksa status migrasi untuk topik dan kelompok konsumen.
Verifikasi topik dan kelompok konsumen yang dimigrasikan
Login ke Konsol ApsaraMQ for Kafka.
Di bagian Resource Distribution pada halaman Overview, pilih wilayah instans tujuan Anda.
Di panel navigasi kiri, klik Instances, lalu klik nama instans.
Verifikasi bahwa resource yang dimigrasikan tersedia:
Klik Topics di panel navigasi kiri untuk memastikan semua topik tersedia.
Klik Groups di panel navigasi kiri untuk memastikan semua kelompok konsumen tersedia.
(Opsional) Langkah 4: Migrasi data pesan
Jika Anda perlu mereplikasi data pesan historis atau real-time, gunakan Apache Kafka MirrorMaker. MirrorMaker menjalankan consumer bawaan untuk membaca pesan dari kluster sumber dan producer bawaan untuk menulisnya ke kluster tujuan. Untuk informasi selengkapnya, lihat Mirroring data between clusters & Geo-replication.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Mengunduh MirrorMaker (termasuk dalam distribusi Apache Kafka).
Topik telah dimigrasikan ke instans tujuan (Langkah 3).
Batasan
Tinjau batasan berikut sebelum memulai migrasi data:
| Batasan | Detail |
|---|---|
| Nama topik | Harus sama antara sumber dan tujuan |
| Jumlah partisi | Boleh berbeda antara sumber dan tujuan |
| Penugasan partisi | Pesan dalam partisi sumber yang sama mungkin masuk ke partisi berbeda di tujuan |
| Routing berbasis kunci | Pesan dengan kunci yang sama tetap diarahkan ke partisi yang sama secara default |
| Pengurutan pesan | Pesan normal (tanpa kunci) mungkin tiba tidak berurutan saat terjadi kegagalan node. Pesan yang diurutkan berdasarkan partisi dapat mempertahankan urutannya. |
| Otentikasi | Jika kedua kluster menggunakan otentikasi berbasis kata sandi, kata sandinya harus sama. Kata sandi yang tidak cocok tidak didukung. |
Opsi A: Migrasi melalui Internet
Gunakan opsi ini ketika kluster sumber dan instans tujuan berada di jaringan berbeda.
Langkah 1: Unduh sertifikat SSL: mix.4096.client.truststore.jks.
Langkah 2: Buat file kafka_client_jaas.conf:
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="<your-username>"
password="<your-password>";
};Langkah 3: Buat file consumer.properties untuk kluster sumber:
# Titik akhir kluster Apache Kafka mandiri
bootstrap.servers=XXX.XXX.XXX.XXX:9092
# Strategi penugasan partisi
partition.assignment.strategy=org.apache.kafka.clients.consumer.RoundRobinAssignor
# Nama kelompok konsumen
group.id=test-consumer-groupLangkah 4: Buat file producer.properties untuk instans tujuan:
# Titik akhir SSL instans ApsaraMQ for Kafka.
# Dapatkan ini dari Konsol ApsaraMQ for Kafka.
bootstrap.servers=XXX.XXX.XXX.XXX:9093
# Metode kompresi data
compression.type=none
# Konfigurasi truststore SSL (gunakan sertifikat dari Langkah 1)
ssl.truststore.location=kafka.client.truststore.jks
ssl.truststore.password=KafkaOnsClient
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
# Hanya diperlukan untuk instans ApsaraMQ for Kafka 2.x
ssl.endpoint.identification.algorithm=Langkah 5: Atur jalur konfigurasi JAAS:
export KAFKA_OPTS="-Djava.security.auth.login.config=kafka_client_jaas.conf"Langkah 6: Jalankan MirrorMaker:
sh bin/kafka-mirror-maker.sh \
--consumer.config config/consumer.properties \
--producer.config config/producer.properties \
--whitelist topicNameGanti topicName dengan nama topik yang akan dimigrasikan. Gunakan ekspresi reguler untuk mencocokkan beberapa topik (misalnya, topic1|topic2 atau .* untuk semua topik).
Opsi B: Migrasi melalui VPC
Gunakan opsi ini ketika kluster sumber dan instans tujuan berada di VPC yang sama. Tidak diperlukan konfigurasi SSL atau SASL.
Langkah 1: Buat file consumer.properties untuk kluster sumber:
# Titik akhir kluster Apache Kafka mandiri
bootstrap.servers=XXX.XXX.XXX.XXX:9092
# Strategi penugasan partisi
partition.assignment.strategy=org.apache.kafka.clients.consumer.RoundRobinAssignor
# Nama kelompok konsumen
group.id=test-consumer-groupLangkah 2: Buat file producer.properties untuk instans tujuan:
# Titik akhir default instans ApsaraMQ for Kafka.
# Dapatkan ini dari Konsol ApsaraMQ for Kafka.
bootstrap.servers=XXX.XXX.XXX.XXX:9092
# Metode kompresi data
compression.type=noneLangkah 3: Jalankan MirrorMaker:
sh bin/kafka-mirror-maker.sh \
--consumer.config config/consumer.properties \
--producer.config config/producer.properties \
--whitelist topicNameGanti topicName dengan nama topik yang akan dimigrasikan. Gunakan ekspresi reguler untuk mencocokkan beberapa topik (misalnya, topic1|topic2 atau .* untuk semua topik).
Verifikasi replikasi pesan
Gunakan salah satu metode berikut untuk memastikan MirrorMaker berjalan:
Periksa lag konsumen di kluster sumber. Jalankan perintah berikut untuk memverifikasi bahwa MirrorMaker mengonsumsi pesan: Nilai
LAGyang menurun mengonfirmasi bahwa MirrorMaker aktif mengonsumsi dan meneruskan pesan.bin/kafka-consumer-groups.sh --new-consumer --describe \ --bootstrap-server <source-cluster-endpoint> \ --group test-consumer-groupKirim pesan uji dan verifikasi kedatangannya. Produksi pesan ke topik di kluster sumber, lalu periksa status partisi topik tersebut di Konsol ApsaraMQ for Kafka. Verifikasi bahwa jumlah total pesan meningkat dan konten pesannya benar. Untuk detailnya, lihat Query messages.
Beralih ke kluster baru
Setelah metadata dan data pesan dimigrasikan, alihkan trafik dari kluster mandiri ke instans ApsaraMQ for Kafka:
Jalankan konsumen baru. Hubungkan kelompok konsumen baru ke instans ApsaraMQ for Kafka dan mulai mengonsumsi pesan.
Alihkan produsen. Arahkan produsen baru ke instans ApsaraMQ for Kafka dan matikan produsen asli. Biarkan kelompok konsumen asli tetap berjalan di kluster mandiri untuk menghabiskan pesan yang tersisa.
Hentikan kluster lama. Setelah kelompok konsumen asli mengonsumsi semua pesan yang tersisa di kluster mandiri, matikan kelompok tersebut dan hentikan kluster mandiri.