Jaminan Produsen Kafka
Saya menggunakan Kafka Producer dan aplikasi saya mengirimkan ProducerRecords individu semua dengan kunci yang sama ke dalam satu partisi, dan ProducerRecords ini kemudian dikumpulkan (menggunakan parameter batch.size dan linger.ms) sebelum dikirim ke broker. Saya memiliki enable.idempotence = true dan acks = all.
Jika satu catatan di tengah batch gagal untuk ditulis, misalnya jika host macet atau kegagalan jaringan atau kegagalan disk terjadi atau catatan gagal ditangani oleh replika minimum, apakah Kafka menjamin bahwa semua catatan berikutnya juga tidak akan ditulis? Atau adakah kemungkinan bahwa catatan di tengah batch bisa hilang?
Jawaban
Jika satu catatan di tengah batch gagal untuk ditulis, misalnya jika host macet atau kegagalan jaringan atau kegagalan disk terjadi atau catatan gagal ditangani oleh replika minimum, apakah Kafka menjamin bahwa semua catatan berikutnya juga tidak akan ditulis?
Ya, jika ada pesan dalam kelompok yang gagal, maka semua pesan dalam kelompok yang sama gagal. Jadi tidak ada pesan dalam batch yang akan ditulis ke disk broker.
Atau adakah kemungkinan bahwa catatan di tengah batch bisa hilang?
Tidak, baik semua atau tidak ada pesan batch yang ditulis ke broker.
Ini dicapai dengan pemisahan antara thread klien Producer dan buffer lokal yang mengantrekan dan mengumpulkan data sebelum mengirimkannya secara fisik ke broker.
Karena semua record Anda akan berada di partisi yang sama, Anda dapat dengan aman mengasumsikan semua record sebelumnya juga akan ada di sana.
Kafka menjamin pengurutan di partisi tertentu, jadi jika Anda mengirim pesan m1 dan m2 (secara berurutan) ke partisi, logika batch dan linger tidak akan menimpa pengurutan. Dengan kata lain, jika Anda melihat pesan m2 di konsumen Anda, Anda dapat dengan aman berasumsi bahwa m1 juga telah terkirim dengan aman.