Dokumentasi penyetelan kinerja yang disediakan oleh Storm menyatakan untuk penskalaan kinerja terbaik mutlak beberapa topologi paralel dapat menghasilkan kinerja yang lebih baik daripada sekadar penskalaan pekerja.

Saya mencoba membandingkan teori ini dengan penskalaan pekerja.

Namun, menggunakan versi 1.2.1 semburan badai Kafka tidak berperilaku seperti yang saya harapkan di beberapa topologi yang berbeda.

Menetapkan client.id dan group.id umum untuk konsumen kafka spout di semua topologi untuk satu topik, setiap topologi masih berlangganan semua partisi yang tersedia dan tupel duplikat, dengan kesalahan yang dilemparkan karena tupel yang sudah dikomit akan dikomit ulang.

Saya terkejut dengan perilaku ini karena saya berasumsi bahwa API konsumen akan mendukung kasus penggunaan yang cukup sederhana ini.

Saya akan sangat berterima kasih jika seseorang akan menjelaskan

  1. apa logika implementasi dari perilaku ini dengan cerat kafka?
  2. cara mengatasi masalah ini?
0
Oliver Fletcher 12 Desember 2019, 13:12

1 menjawab

Jawaban Terbaik

Perilaku default untuk cerat adalah menetapkan semua partisi untuk suatu topik ke pekerja di topologi, menggunakan KafkaConsumer.assign API. Ini adalah perilaku yang Anda lihat. Dengan perilaku ini, Anda tidak boleh berbagi id grup di antara topologi.

Jika Anda ingin kontrol yang lebih baik atas partisi mana yang ditetapkan untuk pekerja atau topologi mana, Anda dapat mengimplementasikan TopicFilter antarmuka, dan teruskan ke KafkaSpoutConfig Anda. Ini seharusnya membiarkan Anda melakukan apa yang Anda inginkan.

Mengenai menjalankan beberapa topologi menjadi lebih cepat, saya berasumsi Anda merujuk ke bagian ini dari dokumen: In multiworker mode, messages often cross worker process boundaries. For performance sensitive cases, if it is possible to configure a topology to run as many single-worker instances [...] it may yield significantly better throughput and latency. Tujuannya di sini adalah untuk menghindari pengiriman pesan antar pekerja, dan sebagai gantinya menjaga pemrosesan setiap partisi internal dalam satu pekerja. Jika Anda ingin menghindari menjalankan banyak topologi, Anda dapat melihat menyesuaikan penjadwal Storm untuk mengalokasikannya mis. satu salinan lengkap dari saluran Anda di setiap pekerja. Dengan begitu, jika Anda menggunakan localOrShuffleGrouping, akan selalu ada baut lokal untuk dikirim, jadi Anda tidak perlu pergi melalui jaringan ke pekerja lain.

0
Stig Rohde Døssing 19 Desember 2019, 16:39