View a markdown version of this page

Memecahkan masalah Amazon MSK Replicator - Amazon Managed Streaming untuk Apache Kafka

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memecahkan masalah Amazon MSK Replicator

Informasi berikut dapat membantu Anda memecahkan masalah dengan MSK Replicator. Lihat Memecahkan masalah cluster Amazon MSK Anda fitur Amazon MSK lainnya. Anda juga dapat memposting masalah Anda ke AWS re:Post.

Status replikator berubah dari MENCIPTAKAN menjadi GAGAL

Penyebab umum kegagalan pembuatan Replicator MSK:

  1. Pastikan grup keamanan yang Anda berikan untuk cluster target memiliki aturan keluar untuk mengizinkan lalu lintas ke grup keamanan cluster target Anda, dan bahwa grup keamanan cluster target Anda memiliki aturan masuk yang menerima lalu lintas dari grup keamanan Replicator.

  2. Untuk replikasi lintas wilayah, verifikasi bahwa cluster sumber Anda memiliki konektivitas multi-VPC yang diaktifkan untuk kontrol akses IAM dan kebijakan cluster diatur pada cluster sumber.

  3. Verifikasi bahwa peran IAM yang disediakan selama pembuatan memiliki izin yang diperlukan untuk membaca dan menulis ke cluster sumber dan target Anda, termasuk izin untuk menulis ke topik.

  4. Pastikan ACL jaringan Anda tidak memblokir koneksi antara MSK Replicator dan cluster Anda.

  5. Ada kemungkinan bahwa cluster sumber atau target tidak sepenuhnya tersedia ketika MSK Replicator mencoba untuk terhubung. Ini mungkin karena beban yang berlebihan, penggunaan disk, atau penggunaan CPU. Perbaiki masalah dengan broker dan coba lagi pembuatan Replicator.

Setelah Anda melakukan validasi di atas, buat MSK Replicator lagi.

Replikator tampak macet dalam status CREATING

Pembuatan MSK Replicator dapat memakan waktu hingga 30 menit. Tunggu selama 30 menit dan periksa kembali keadaan Replikator.

Replikator tidak mereplikasi data atau mereplikasi hanya sebagian data

  1. Verifikasi bahwa Replikator Anda tidak mengalami kesalahan otentikasi menggunakan AuthError metrik di Amazon CloudWatch. Jika metrik ini di atas 0, periksa kebijakan peran IAM dan pastikan tidak ada izin penolakan yang ditetapkan untuk izin cluster.

  2. Pastikan cluster sumber dan target Anda tidak mengalami masalah (terlalu banyak koneksi, disk pada kapasitas penuh, atau penggunaan CPU yang tinggi).

  3. Verifikasi bahwa cluster Anda dapat dijangkau menggunakan KafkaClusterPingSuccessCount metrik. Jika metrik ini 0 atau tidak memiliki titik data, periksa izin peran jaringan dan IAM.

  4. Verifikasi bahwa Replicator Anda tidak mengalami kegagalan menggunakan ReplicatorFailure metrik. Jika di atas 0, periksa peran IAM untuk izin tingkat topik.

  5. Verifikasi bahwa ekspresi reguler dalam daftar izinkan cocok dengan nama topik yang ingin Anda tiru, dan topik tersebut tidak dikecualikan oleh daftar tolak.

  6. Diperlukan waktu hingga 30 detik bagi Replicator untuk mendeteksi dan membuat topik baru. Pesan yang dihasilkan sebelum topik dibuat pada cluster target tidak akan direplikasi jika posisi awal terbaru (default).

Offset pesan di cluster target berbeda dari cluster sumber

MSK Replicator mengkonsumsi pesan dari cluster sumber dan memproduksinya ke cluster target, yang dapat menyebabkan offset yang berbeda. Jika Anda telah mengaktifkan sinkronisasi offset grup konsumen, MSK Replicator akan secara otomatis menerjemahkan offset sehingga setelah failover, konsumen Anda dapat melanjutkan pemrosesan dari dekat tempat mereka tinggalkan.

Replikator tidak menyinkronkan offset grup konsumen

  1. Verifikasi bahwa replikasi data berfungsi seperti yang diharapkan.

  2. Pastikan ekspresi reguler dalam daftar izinkan cocok dengan grup konsumen yang ingin Anda tiru.

  3. Verifikasi bahwa MSK Replicator telah membuat topik pada cluster target. Jika grup konsumen Anda di cluster sumber hanya menggunakan pesan yang belum direplikasi, grup konsumen tidak akan direplikasi ke cluster target. Setelah grup konsumen Anda mulai membaca pesan yang baru direplikasi, MSK Replicator akan secara otomatis mereplikasi grup konsumen.

catatan

MSK Replicator mengoptimalkan sinkronisasi offset grup konsumen untuk konsumen yang membaca dari dekat akhir partisi topik. Jika kelompok konsumen Anda tertinggal di cluster sumber, Anda mungkin melihat lag yang lebih tinggi pada target. Saat konsumen Anda mengejar ketinggalan, MSK Replicator akan secara otomatis mengurangi lag.

Latensi replikasi tinggi atau terus meningkat

  1. Pastikan Anda memiliki jumlah partisi yang tepat. Tabel berikut menunjukkan jumlah partisi minimum yang disarankan untuk throughput yang Anda inginkan.

    Throughput dan jumlah partisi minimum yang disarankan
    Throughput (MB/s) Partisi minimum diperlukan
    50167
    100334
    250833
    5001666
    10003333
  2. Pastikan Anda memiliki kapasitas baca dan tulis yang cukup di cluster Anda. MSK Replicator bertindak sebagai konsumen untuk cluster sumber Anda (keluar) dan sebagai produsen untuk cluster target Anda (masuk). Menyediakan kapasitas cluster untuk mendukung lalu lintas replikasi selain lalu lintas lainnya.

  3. Latensi replikasi bervariasi menurut jarak pasangan Wilayah.

  4. Pastikan bahwa Replicator Anda tidak dibatasi menggunakan metrik. ThrottleTime Jika di atas 0, sesuaikan kuota Kafka. Lihat Mengelola throughput dengan kuota Kafka.

  5. Periksa Dasbor Kesehatan AWS Layanan untuk acara layanan MSK di Wilayah Anda.

Pemecahan masalah menggunakan ReplicatorFailure metrik

Met ReplicatorFailure rik membantu Anda memantau dan mendeteksi masalah replikasi. Nilai bukan nol biasanya menunjukkan kegagalan replikasi yang disebabkan oleh batasan ukuran pesan, pelanggaran rentang stempel waktu, atau masalah ukuran batch rekaman. Jika pengiriman log dikonfigurasi untuk replikator Anda, Anda dapat menggunakan pesan log yang dikirimkan untuk mengidentifikasi kegagalan tertentu. Untuk detail selengkapnya, lihat Log Replikator MSK. Jika pengiriman log tidak dikonfigurasi, ikuti langkah-langkah di bawah ini untuk menanyakan topik status replikator untuk pesan kesalahan.

Jika ReplicatorFailure metrik melaporkan nilai bukan nol, ikuti langkah-langkah ini untuk memecahkan masalah:

  1. Konfigurasikan klien yang dapat terhubung ke cluster MSK target dan menyiapkan alat CLI Apache Kafka. Lihat Connect ke kluster Amazon MSK Provisioned.

  2. Buka konsol Amazon MSK di? https://console.aws.amazon.com/msk/home wilayah = us-east-1#/rumah/.

    Dapatkan ARN dari MSK Replicator dan target cluster MSK, dan dapatkan titik akhir broker dari cluster MSK target.

  3. Ekspor MSK Replicator ARN dan titik akhir broker:

    export TARGET_CLUSTER_SERVER_STRING=<BootstrapServerString> export REPLICATOR_ARN=<ReplicatorARN> export CONSUMER_CONFIG_FILE=<ConsumerConfigFile>
  4. Di <path-to-your-kafka-installation>/bin direktori Anda, simpan skrip berikut sebagaiquery-replicator-failure-message.sh.

    #!/bin/bash # Script: Query MSK Replicator Failure Message # Description: This script queries exceptions from AWS MSK Replicator status topics # It takes a replicator ARN and bootstrap server as input and searches for replicator exceptions # in the replicator's status topic, formatting and displaying them in a readable manner # # Required Arguments: # --replicator-arn: The ARN of the AWS MSK Replicator # --bootstrap-server: The Kafka bootstrap server to connect to # --consumer.config: Consumer config properties file # Usage Example: # ./query-replicator-failure-message.sh --replicator-arn <replicator-arn> --bootstrap-server <bootstrap-server> --consumer.config <consumer.config> print_usage() { echo "USAGE: $0 ./query-replicator-failure-message.sh --replicator-arn <replicator-arn> --bootstrap-server <bootstrap-server> --consumer.config <consumer.config>" echo "--replicator-arn <String: MSK Replicator ARN> REQUIRED: The ARN of AWS MSK Replicator." echo "--bootstrap-server <String: server to connect to> REQUIRED: The Kafka server to connect to." echo "--consumer.config <String: config file> REQUIRED: Consumer config properties file." exit 1 } # Initialize variables replicator_arn="" bootstrap_server="" consumer_config="" # Parse arguments while [[ $# -gt 0 ]]; do case "$1" in --replicator-arn) if [ -z "$2" ]; then echo "Error: --replicator-arn requires an argument." print_usage fi replicator_arn="$2"; shift 2 ;; --bootstrap-server) if [ -z "$2" ]; then echo "Error: --bootstrap-server requires an argument." print_usage fi bootstrap_server="$2"; shift 2 ;; --consumer.config) if [ -z "$2" ]; then echo "Error: --consumer.config requires an argument." print_usage fi consumer_config="$2"; shift 2 ;; *) echo "Unknown option: $1"; print_usage ;; esac done # Check for required arguments if [ -z "$replicator_arn" ] || [ -z "$bootstrap_server" ] || [ -z "$consumer_config" ]; then echo "Error: --replicator-arn, --bootstrap-server, and --consumer.config are required." print_usage fi # Extract replicator name and suffix from ARN replicator_arn_suffix=$(echo "$replicator_arn" | awk -F'/' '{print $NF}') replicator_name=$(echo "$replicator_arn" | awk -F'/' '{print $(NF-1)}') echo "Replicator name: $replicator_name" # List topics and find the status topic topics=$(./kafka-topics.sh --command-config client.properties --list --bootstrap-server "$bootstrap_server") status_topic_name="__amazon_msk_replicator_status_${replicator_name}_${replicator_arn_suffix}" # Check if the status topic exists if echo "$topics" | grep -Fq "$status_topic_name"; then echo "Found replicator status topic: '$status_topic_name'" ./kafka-console-consumer.sh --bootstrap-server "$bootstrap_server" --consumer.config "$consumer_config" --topic "$status_topic_name" --from-beginning | stdbuf -oL grep "Exception" | stdbuf -oL sed -n 's/.*Exception:\(.*\) Topic: \([^,]*\), Partition: \([^\]*\).*/ReplicatorException:\1 Topic: \2, Partition: \3/p' else echo "No topic matching the pattern '$status_topic_name' found." fi

    Jalankan skrip ini untuk menanyakan pesan kegagalan MSK Replicator:

    <path-to-your-kafka-installation>/bin/query-replicator-failure-message.sh --replicator-arn $REPLICATOR_ARN --bootstrap-server $TARGET_CLUSTER_SERVER_STRING --consumer.config $CONSUMER_CONFIG_FILE

    Skrip ini menampilkan semua kesalahan dengan pesan pengecualian dan partisi topik yang terpengaruh. Karena topik berisi semua pesan kegagalan historis, mulailah penyelidikan menggunakan pesan terakhir. Berikut ini adalah contoh pesan kegagalan:

    ReplicatorException: The request included a message larger than the max message size the server will accept. Topic: test, Partition: 1
Kegagalan dan solusi umum

Berikut ini menjelaskan kegagalan Replicator MSK yang umum dan cara menguranginya.

Ukuran pesan lebih besar dari max.request.size

Penyebab: Ukuran pesan individu melebihi 10 MB (maksimum default).

Berikut ini adalah contoh dari jenis pesan kegagalan ini.

ReplicatorException: The message is 20635370 bytes when serialized which is larger than 10485760, which is the value of the max.request.size configuration. Topic: test, Partition: 1

Solusi: Kurangi ukuran pesan individual dalam topik Anda. Jika Anda tidak bisa, ikuti instruksi untuk meminta kenaikan batas.

Ukuran pesan lebih besar dari ukuran pesan maksimum yang akan diterima server

Penyebab: Ukuran pesan melebihi ukuran pesan maksimum cluster target.

Berikut ini adalah contoh dari jenis pesan kegagalan ini.

ReplicatorException: The request included a message larger than the max message size the server will accept. Topic: test, Partition: 1

Solusi: Tingkatkan max.message.bytes konfigurasi pada cluster atau topik target. Lihat max.message.bytes.

Stempel waktu berada di luar jangkauan

Penyebab: Stempel waktu pesan berada di luar rentang yang diizinkan cluster target.

Berikut ini adalah contoh dari jenis pesan kegagalan ini.

ReplicatorException: Timestamp 1730137653724 of message with offset 0 is out of range. The timestamp should be within [1730137892239, 1731347492239] Topic: test, Partition: 1

Solusi: Perbarui message.timestamp.before.max.ms konfigurasi cluster target. Lihat messag e.timestamp.before.max.ms.

Rekam batch terlalu besar

Penyebab: Ukuran batch rekaman melebihi ukuran segmen yang ditetapkan untuk topik pada cluster target. MSK Replicator mendukung ukuran batch maksimum 1 MB.

Berikut ini adalah contoh dari jenis pesan kegagalan ini.

ReplicatorException: The request included message batch larger than the configured segment size on the server. Topic: test, Partition: 1

Solusi: Perbarui cluster target segment.bytes menjadi setidaknya 1048576 (1 MB). Lihat segment.bytes.

catatan

Jika ReplicatorFailure metrik terus memancarkan nilai bukan nol setelah menerapkan solusi ini, ulangi proses pemecahan masalah sampai metrik memancarkan nilai nol.

Memecahkan masalah replikasi dari cluster Kafka yang dikelola sendiri

MSK Replicator tidak dapat terhubung ke cluster Kafka yang dikelola sendiri

Lakukan pemeriksaan berikut jika MSK Replicator tidak dapat terhubung ke cluster Kafka yang dikelola sendiri:

  1. Pastikan koneksi VPN atau Direct Connect Anda aktif dan tabel rute sudah benar.

  2. Verifikasi bahwa grup keamanan mengizinkan lalu lintas masuk dari subnet Replicator MSK pada port SASL_SSL (biasanya 9096).

  3. Verifikasi resolusi DNS dari VPC ke nama host broker cluster yang dikelola sendiri.

  4. Periksa KafkaClusterPingSuccessCount metrik di Amazon CloudWatch — nilai 0 menunjukkan kegagalan konektivitas.

SASL/SCRAM atau kegagalan otentikasi MTL

Jika AuthError metriknya bukan nol atau log Replicator menunjukkan SASL/SCRAM atau kesalahan MTL:

  1. Verifikasi bahwa kredenSIAL yang disimpan di AWS Secrets Manager cocok dengan kredenSIAL pengguna SCRAM pada cluster yang dikelola sendiri (untuk SASL/SCRAM) atau bahwa sertifikat klien dan kunci pribadi sudah benar (untuk MTL).

  2. Verifikasi bahwa pengguna SCRAM atau prinsipal sertifikat memiliki izin ACL yang diperlukan (Baca, Jelaskan topik; Baca, Jelaskan pada kelompok konsumen; Jelaskan pada cluster).

  3. Periksa AuthError metrik untuk mengonfirmasi kesalahan otentikasi dan mengidentifikasi apakah cluster sumber atau target terpengaruh menggunakan ClusterAlias dimensi.

SASL/OAUTHBEARER Kegagalan otentikasi (OAuth)

Jika AuthError metriknya bukan nol atau log Replicator menunjukkan pengambilan token akses atau kesalahan: SASL/OAUTHBEARER

  1. Pastikan tokenEndpointUrl sudah benar, menggunakan skema HTTPS, dan dapat dijangkau dari subnet VPC yang Anda sediakan untuk Replicator. A KafkaClusterPingSuccessCount dari 0 dikombinasikan dengan kesalahan token sering menunjukkan titik akhir token tidak dapat dijangkau.

  2. Untuk mekanisme kredenSIAL klien, verifikasi bahwa client_id dan client_secret di AWS Secrets Manager sudah benar dan bahwa mekanisme akuisisi token cocok dengan apa yang diharapkan IDP Anda.

  3. Pastikan tokenEndpointAuthenticationMethod itu valid untuk mekanisme akuisisi token Anda. Mekanisme kredenSIAL klien memerlukan POST atauBASIC, dan mekanisme pernyataan kredenSIAL klien memerlukanNONE.

  4. Untuk mekanisme pernyataan kredentif pembawa IAM JWT dan klien, verifikasi bahwa peran eksekusi layanan memiliki sts:GetWebIdentityToken izin, dan bahwa dan cocok dengan apa yang diharapkan audience IDP Anda ketika memvalidasi token. signingAlgorithm

  5. Jika IDP Anda menggunakan CA pribadi, verifikasi bahwa sertifikat CA yang dirujuk oleh tokenEndpointTlsCertificateArn lengkap dan valid.

  6. Verifikasi bahwa prinsipal Kafka tempat IDP Anda memetakan token akses memiliki izin ACL yang diperlukan MSK Replicator pada cluster sumber.

  7. Periksa log Replicator untuk status HTTP dan error kode OAuth yang dikembalikan oleh titik akhir token. MSK Replicator mencatat bidang ini tetapi tidak pernah mencatat badan respons titik akhir token.

Masalah sertifikat SSL

Jika Replicator tidak dapat membuat koneksi aman ke cluster yang dikelola sendiri:

  1. Verifikasi bahwa certificate nilai di AWS Secrets Manager menyertakan rantai sertifikat CA lengkap dalam format PEM.

  2. Verifikasi bahwa pendengar SSL dikonfigurasi pada semua broker cluster yang dikelola sendiri.

  3. Verifikasi bahwa sertifikat belum kedaluwarsa dan dikeluarkan oleh CA tepercaya.

Kegagalan sinkronisasi mengimbangi grup konsumen untuk cluster yang dikelola sendiri

Jika offset grup konsumen tidak disinkronkan dengan benar:

  1. Verifikasi ConsumerGroupOffsetSyncFailure metrik — seharusnya 0.

  2. Verifikasi bahwa kelompok konsumen secara aktif mengkonsumsi pada cluster sumber (grup konsumen yang tidak aktif mungkin tidak disinkronkan).

  3. Untuk replikasi dua arah, verifikasi bahwa synchroniseConsumerGroupOffsets disetel ke true pada kedua Replikator.