Cara menggunakan perpesanan Apache Kafka di .Net

Apache Kafka adalah broker pesan open source, terdistribusi, terukur, berkinerja tinggi, dan mempublikasikan-berlangganan. Ini adalah pilihan tepat untuk membangun sistem yang mampu memproses data dalam volume tinggi. Pada artikel ini kita akan melihat bagaimana kita dapat membuat aplikasi produsen dan konsumen untuk Kafka di C #.

Untuk mulai menggunakan Kafka, Anda harus mengunduh Kafka dan Zookeeper dan menginstalnya di sistem Anda. Artikel DZone ini berisi petunjuk langkah demi langkah untuk menyiapkan Kafka dan Zookeeper di Windows. Setelah Anda menyelesaikan penyiapan, mulai Zookeeper dan Kafka, lalu temui saya kembali di sini.

Arsitektur Apache Kafka

Pada bagian ini, kita akan memeriksa komponen arsitektural dan terminologi terkait di Kafka. Pada dasarnya Kafka terdiri dari komponen-komponen berikut ini:

  • Kafka Cluster — kumpulan satu atau lebih server yang dikenal sebagai broker
  • Produser - komponen yang digunakan untuk mempublikasikan pesan
  • Konsumen - komponen yang digunakan untuk mengambil atau menggunakan pesan
  • ZooKeeper - layanan koordinasi terpusat yang digunakan untuk memelihara informasi konfigurasi di seluruh node cluster dalam lingkungan terdistribusi

Unit dasar data di Kafka adalah pesan. Pesan di Kafka direpresentasikan sebagai pasangan nilai kunci. Kafka mengubah semua pesan menjadi array byte. Perlu dicatat bahwa komunikasi antara produsen, konsumen, dan cluster di Kafka menggunakan protokol TCP. Setiap server dalam cluster Kafka dikenal sebagai broker. Anda dapat menskalakan Kafka secara horizontal hanya dengan menambahkan broker tambahan ke cluster.

Diagram berikut mengilustrasikan komponen arsitektur di Kafka - tampilan tingkat tinggi.

PONDASI ​​Apache

Topik di Kafka mewakili kumpulan pesan yang logis. Anda dapat menganggapnya sebagai umpan atau kategori tempat produsen dapat mempublikasikan pesan. Kebetulan, broker Kafka berisi satu atau lebih topik yang pada gilirannya dibagi menjadi satu atau lebih partisi. Partisi didefinisikan sebagai urutan pesan yang teratur. Partisi adalah kunci dari kemampuan Kafka untuk menskalakan secara dinamis, karena partisi didistribusikan ke beberapa broker.

Anda dapat memiliki satu atau lebih produser yang mendorong pesan ke dalam cluster pada titik waktu tertentu. Produser di Kafka menerbitkan pesan ke topik tertentu, dan konsumen berlangganan ke topik untuk menerima pesan.

Memilih antara Kafka dan RabbitMQ

Baik Kafka dan RabbitMQ adalah broker pesan open source populer yang telah digunakan secara luas selama beberapa waktu. Kapan Anda harus memilih Kafka daripada RabbitMQ? Pilihannya bergantung pada beberapa faktor.

RabbitMQ adalah broker pesan cepat yang ditulis dalam bahasa Erlang. Kemampuan peruteannya yang kaya dan kemampuannya untuk menawarkan pengakuan per pesan adalah alasan kuat untuk menggunakannya. RabbitMQ juga menyediakan antarmuka web yang ramah pengguna yang dapat Anda gunakan untuk memantau server RabbitMQ Anda. Bacalah artikel saya untuk mempelajari cara bekerja dengan RabbitMQ di .Net.  

Namun, ketika datang untuk mendukung penerapan besar, Kafka berskala jauh lebih baik daripada RabbitMQ - yang perlu Anda lakukan hanyalah menambahkan lebih banyak partisi. Perlu juga dicatat bahwa cluster RabbitMQ tidak mentolerir partisi jaringan. Jika Anda berencana mengelompokkan server RabbitMQ, Anda harus menggunakan federasi. Anda dapat membaca lebih lanjut tentang cluster RabbitMQ dan partisi jaringan di sini.

Kafka juga jelas mengungguli RabbitMQ dalam performa. Instans Kafka tunggal dapat menangani 100 ribu pesan per detik, dibandingkan mendekati 20 ribu pesan per detik untuk RabbitMQ. Kafka juga merupakan pilihan yang baik ketika Anda ingin mengirimkan pesan dengan latensi rendah untuk mendukung konsumen batch, dengan asumsi bahwa konsumen tersebut dapat online atau offline.

Membangun Produsen Kafka dan Konsumen Kafka

Pada bagian ini kita akan membahas bagaimana kita dapat membangun produsen dan konsumen untuk digunakan dengan Kafka. Untuk melakukan ini, kami akan membangun dua aplikasi konsol dalam Visual Studio - salah satunya akan mewakili produsen dan yang lainnya akan mewakili konsumen. Dan kita perlu menginstal penyedia Kafka untuk .Net di aplikasi produsen dan konsumen.

Kebetulan, ada banyak penyedia yang tersedia, tetapi dalam posting ini kita akan menggunakan kafka-net, klien C # asli untuk Apache Kafka. Anda dapat menginstal kafka-net melalui manajer paket NuGet dari dalam Visual Studio. Anda dapat mengikuti tautan ini ke repositori GitHub kafka-net.

Berikut adalah metode utama untuk produsen Kafka kami:

static void Main (string [] args)

        {

            muatan string;

            topik string;

            Pesan msg = Pesan baru (payload);

            Uri uri = new Uri (“// localhost: 9092”);

            var options = new KafkaOptions (uri);

            var router = new BrokerRouter (opsi);

            var client = Produser baru (router);

            client.SendMessageAsync (topic, new List {msg}). Wait ();

            Console.ReadLine ();

        }

Dan berikut adalah kode untuk konsumen Kafka kami:

static void Main (string [] args)

        {

            topik string;

            Uri uri = new Uri (“// localhost: 9092”);

            var options = new KafkaOptions (uri);

            var router = new BrokerRouter (opsi);

            var consumer = new Consumer (new ConsumerOptions (topic, router));

            foreach (pesan var di consumer.Consume ())

            {

                Console.WriteLine (Encoding.UTF8.GetString (message.Value));

            }

            Console.ReadLine ();

        }

Perhatikan bahwa Anda harus menyertakan ruang nama Kafka di aplikasi produsen dan konsumen seperti yang ditunjukkan di bawah ini.

menggunakan KafkaNet;

menggunakan KafkaNet.Model;

menggunakan KafkaNet.Protocol;

Terakhir, jalankan saja produsen (produsen pertama) dan kemudian konsumen. Dan itu dia! Anda akan melihat pesan "Selamat datang di Kafka!" ditampilkan di jendela konsol konsumen.

Meskipun kami memiliki banyak sistem perpesanan yang tersedia untuk dipilih — RabbitMQ, MSMQ, IBM MQ Series, dll. — Kafka berada di depan untuk menangani aliran data besar yang dapat berasal dari banyak penerbit. Kafka sering digunakan untuk aplikasi IoT dan agregasi log serta kasus penggunaan lain yang memerlukan latensi rendah dan jaminan pengiriman pesan yang kuat.

Jika aplikasi Anda membutuhkan broker pesan yang cepat dan dapat diskalakan, Kafka adalah pilihan yang bagus. Nantikan postingan lainnya tentang Kafka di blog ini.