Mengapa storm memutar ulang tupel dari cerat alih-alih mencoba lagi pada komponen yang mogok?

Saya menggunakan storm untuk memproses masalah online, tetapi saya tidak mengerti mengapa storm memutar ulang Tuple dari spout . Mencoba ulang apa yang crash mungkin lebih efektif daripada memutar ulang dari root bukan? Adakah yang bisa membantu saya? Terima kasih


person user1221244    schedule 27.02.2014    source sumber


Jawaban (2)


Implementasi spout pada umumnya hanya akan memutar ulang tupel FAILED. Seperti yang dijelaskan di sini tupel yang dipancarkan dari cerat dapat memicu ribuan tupel lainnya dan badai menciptakan pohon dari Tuple berdasarkan itu. Sekarang sebuah tuple disebut "sepenuhnya diproses" ketika setiap pesan di pohon telah diproses. Saat memancarkan cerat, tambahkan message id yang digunakan untuk mengidentifikasi tupel di fase selanjutnya. Ini disebut penahan dan dapat dilakukan dengan cara berikut

    _collector.emit(new Values("field1", "field2", 3) , msgId);

Sekarang dari tautan yang diposting di atas tertulis

Sebuah tupel dianggap gagal jika pohon pesannya gagal diproses sepenuhnya dalam waktu tunggu yang ditentukan. Batas waktu ini dapat dikonfigurasi berdasarkan topologi tertentu menggunakan konfigurasi Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS dan defaultnya adalah 30 detik.

Jika waktu tupel habis, Storm akan memanggil metode FAIL pada spout dan jika berhasil, metode ACK akan dipanggil.

Jadi pada titik ini storm akan memberi tahu Anda tupel mana yang gagal diproses tetapi jika Anda melihat kode sumbernya Anda akan melihat bahwa implementasi metode fail kosong di kelas BaseRichSpout, jadi Anda perlu menggantinya Metode gagal BaseRichSpout agar memiliki kemampuan memutar ulang di aplikasi Anda.

person user2720864    schedule 27.02.2014
comment
Jawaban yang bagus. Terutama tip tentang mengganti metode gagal BaseRichSpout. Terima kasih banyak. - person Lelouch Lamperouge; 21.11.2014

Pemutaran ulang tupel yang gagal seharusnya hanya mewakili sebagian kecil dari keseluruhan lalu lintas tupel, sehingga efisiensi dari kebijakan pemutaran ulang dari awal yang sederhana ini biasanya tidak menjadi perhatian.

Mendukung "langkah pemutaran ulang dari kesalahan" akan menimbulkan banyak kerumitan karena lokasi kesalahan terkadang sulit ditentukan dan akan ada kebutuhan untuk mendukung "pemutaran ulang di tempat lain" jika node cluster tempat kesalahan terjadi saat ini (atau secara permanen) turun. Hal ini juga akan memperlambat eksekusi seluruh lalu lintas yang mungkin tidak akan dikompensasi oleh efisiensi yang diperoleh dari penanganan kesalahan (yang, sekali lagi, diasumsikan jarang dipicu).

Jika menurut Anda strategi replay-from-start ini akan berdampak negatif pada topologi Anda, coba bagi menjadi beberapa strategi lebih kecil yang dipisahkan oleh sistem antrian persisten seperti Kafka.

person Svend    schedule 27.02.2014
comment
Hai Svend, Apakah itu berarti pemutaran ulang baut ke baut hanya dapat dilakukan jika, kami memiliki cerat yang andal? kami benar-benar tidak dapat memilih keandalan hanya antara dua baut dan menonaktifkannya di semua tempat. - person kartik; 04.05.2015
comment
Tidak, kami tidak dapat memilih keandalan antara dua baut. Kita harus memiliki spout yang andal agar memiliki kemampuan memutar ulang jika terjadi kegagalan. - person Rajat Garg; 03.02.2016