Broker offline dan failover klien - 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.

Broker offline dan failover klien

Kafka memungkinkan broker offline; broker offline tunggal dalam cluster yang sehat dan seimbang mengikuti praktik terbaik tidak akan melihat dampak atau menyebabkan kegagalan untuk memproduksi atau mengkonsumsi. Ini karena broker lain akan mengambil alih kepemimpinan partisi dan karena lib klien Kafka akan secara otomatis gagal dan mulai mengirim permintaan ke broker pemimpin baru.

Kontrak server klien

Ini menghasilkan kontrak bersama antara pustaka klien dan perilaku sisi server; server harus berhasil menetapkan satu atau lebih pemimpin baru dan klien harus mengubah broker untuk mengirim permintaan kepada pemimpin baru pada waktu yang tepat.

Kafka menggunakan pengecualian untuk mengontrol aliran ini:

Contoh prosedur
  1. Broker A memasuki keadaan offline.

  2. Klien Kafka menerima pengecualian (biasanya pemutusan jaringan atau not_leader_for_partition).

  3. Pengecualian ini memicu klien Kafka untuk memperbarui metadatanya sehingga mengetahui tentang pemimpin terbaru.

  4. Klien Kafka melanjutkan pengiriman permintaan ke pemimpin partisi baru di broker lain.

Proses ini biasanya memakan waktu kurang dari 2 detik dengan klien Java vended dan konfigurasi default. Kesalahan sisi klien bertele-tele dan berulang tetapi tidak menimbulkan kekhawatiran, seperti yang dilambangkan dengan level “”. WARN

Contoh: Pengecualian 1

10:05:25.306 [kafka-producer-network-thread | producer-1] WARN o.a.k.c.producer.internals.Sender - [Producer clientId=producer-1] Got error produce response with correlation id 864845 on topic-partition msk-test-topic-1-0, retrying (2147483646 attempts left). Error: NETWORK_EXCEPTION. Error Message: Disconnected from node 2

Contoh: Pengecualian 2

10:05:25.306 [kafka-producer-network-thread | producer-1] WARN o.a.k.c.producer.internals.Sender - [Producer clientId=producer-1] Received invalid metadata error in produce request on partition msk-test-topic-1-41 due to org.apache.kafka.common.errors.NotLeaderOrFollowerException: For requests intended only for the leader, this error indicates that the broker is not the current leader. For requests intended for any replica, this error indicates that the broker is not a replica of the topic partition.. Going to request metadata update now"

Klien Kafka akan secara otomatis menyelesaikan kesalahan ini biasanya dalam 1 detik dan paling lama 3 detik. Ini muncul sebagai latensi produksi/konsumsi pada p99 dalam metrik sisi klien (biasanya milidetik tinggi di tahun 100-an). Lebih lama dari ini biasanya menunjukkan masalah dengan konfigurasi klien atau beban pengontrol sisi server. Silakan lihat bagian pemecahan masalah.

Kegagalan yang berhasil dapat diverifikasi dengan memeriksa peningkatan LeaderCount metrik BytesInPerSec dan pada broker lain yang membuktikan bahwa lalu lintas dan kepemimpinan bergerak seperti yang diharapkan. Anda juga akan mengamati peningkatan UnderReplicatedPartitions metrik, yang diharapkan ketika replika offline dengan broker shutdown.

Pemecahan Masalah

Aliran di atas dapat terganggu dengan melanggar kontrak client-server. Alasan paling umum untuk masalah meliputi:

  • Kesalahan konfigurasi atau penggunaan lib klien Kafka yang salah.

  • Perilaku dan bug default yang tidak terduga dengan lib klien pihak ke-3.

  • Pengontrol kelebihan beban menghasilkan penugasan pemimpin partisi yang lebih lambat.

  • Pengontrol baru dipilih sehingga penugasan pemimpin partisi lebih lambat.

Untuk memastikan perilaku yang benar untuk menangani kegagalan kepemimpinan, kami merekomendasikan:

  • Praktik terbaik sisi server harus diikuti untuk memastikan bahwa broker pengontrol diskalakan dengan tepat untuk menghindari penugasan kepemimpinan yang lambat.

  • Pustaka klien harus mengaktifkan percobaan ulang untuk memastikan bahwa klien menangani failover.

  • Pustaka klien harus memiliki retry.backoff.ms yang dikonfigurasi (default 100) untuk menghindari badai koneksi/permintaan.

  • Pustaka klien harus menyetel request.timeout.ms dan delivery.timeout.ms ke nilai sejalan dengan aplikasi '. SLA Nilai yang lebih tinggi akan menghasilkan fail-over yang lebih lambat untuk jenis kegagalan tertentu.

  • Pustaka klien harus memastikan bahwa bootstrap.servers berisi setidaknya 3 broker acak untuk menghindari dampak ketersediaan pada penemuan awal.

  • Beberapa pustaka klien memiliki level yang lebih rendah daripada yang lain dan mengharapkan pengembang aplikasi untuk mengimplementasikan logika coba ulang dan penanganan pengecualian itu sendiri. Silakan merujuk ke dokumentasi khusus lib klien misalnya penggunaan, dan pastikan bahwa logika sambungan/coba ulang yang benar diikuti.

  • Kami merekomendasikan pemantauan latensi sisi klien untuk produksi, jumlah permintaan yang berhasil, dan jumlah kesalahan untuk kesalahan yang tidak dapat dicoba ulang.

  • Kami telah mengamati bahwa pustaka golang dan ruby pihak ke-3 yang lebih tua tetap bertele-tele selama seluruh periode waktu offline broker meskipun permintaan produksi dan konsumsi tidak terpengaruh. Kami menyarankan Anda untuk selalu memantau metrik tingkat bisnis Anda selain metrik permintaan untuk keberhasilan dan kesalahan untuk menentukan apakah ada dampak nyata vs kebisingan di log Anda.

  • Pelanggan tidak boleh alarm tentang pengecualian sementara untuk jaringan/not_leader karena mereka normal, tidak berdampak, dan diharapkan sebagai bagian dari protokol kafka.

  • Pelanggan tidak boleh alarm UnderReplicatedPartitions karena mereka normal, tidak berdampak, dan diharapkan selama satu broker offline.