.Net'te Apache Kafka mesajlaşma nasıl kullanılır

Apache Kafka açık kaynak kodlu, dağıtılmış, ölçeklenebilir, yüksek performanslı, yayınlama-abone olma mesaj aracısıdır. Yüksek hacimli verileri işleyebilen sistemler oluşturmak için mükemmel bir seçimdir. Bu yazıda Kafka için C #'da nasıl üretici ve tüketici uygulaması oluşturabileceğimize bakacağız.

Kafka'yı kullanmaya başlamak için Kafka ve ZooKeeper'ı indirmeli ve sisteminize yüklemelisiniz. Bu DZone makalesi, Windows'ta Kafka ve ZooKeeper'ı kurmak için adım adım talimatlar içerir. Kurulumu tamamladığınızda ZooKeeper ve Kafka'yı başlatın ve benimle burada buluşun.

Apache Kafka mimarisi

Bu bölümde, Kafka'daki mimari bileşenleri ve ilgili terminolojiyi inceleyeceğiz. Kafka temel olarak aşağıdaki bileşenlerden oluşur:

  • Kafka Kümesi - aracılar olarak bilinen bir veya daha fazla sunucudan oluşan bir koleksiyon
  • Üretici - mesajları yayınlamak için kullanılan bileşen
  • Tüketici - mesajları almak veya tüketmek için kullanılan bileşen
  • ZooKeeper - dağıtılmış bir ortamda küme düğümlerinde yapılandırma bilgilerini korumak için kullanılan merkezi bir koordinasyon hizmeti

Kafka'daki temel veri birimi bir mesajdır. Kafka'da bir mesaj, bir anahtar-değer çifti olarak temsil edilir. Kafka, tüm mesajları bayt dizilerine dönüştürür. Kafka'daki üreticiler, tüketiciler ve kümeler arasındaki iletişimin TCP protokolünü kullandığına dikkat edilmelidir. Bir Kafka kümesindeki her sunucu bir aracı olarak bilinir. Kafka'yı, kümeye ek aracılar ekleyerek yatay olarak ölçeklendirebilirsiniz.

Aşağıdaki şema, Kafka'daki mimari bileşenleri - üst düzey bir görünüm - göstermektedir.

Apaçi Vakfı

Kafka'daki bir konu, mantıksal bir mesaj koleksiyonunu temsil eder. Bir üreticinin mesajlarını yayınlayabileceği bir besleme veya kategori olarak düşünebilirsiniz. Bu arada, bir Kafka komisyoncusu sırayla bir veya daha fazla bölüme bölünmüş bir veya daha fazla konu içerir. Bölüm, sıralı bir mesaj dizisi olarak tanımlanır. Bölümler, birden çok aracıya dağıtıldığı için Kafka'nın dinamik olarak ölçeklendirme becerisinin anahtarıdır.

Herhangi bir zamanda mesajları bir kümeye iten bir veya daha fazla üreticiye sahip olabilirsiniz. Kafka'daki bir yapımcı, belirli bir konu hakkında mesajlar yayınlar ve bir tüketici, mesajları almak için bir konuya abone olur.

Kafka ve RabbitMQ arasında seçim yapmak

Hem Kafka hem de RabbitMQ, oldukça uzun süredir yaygın olarak kullanılan popüler açık kaynaklı mesaj aracılarıdır. RabbitMQ yerine Kafka'yı ne zaman seçmelisiniz? Seçim birkaç faktöre bağlıdır.

RabbitMQ, Erlang'da yazılmış hızlı bir mesaj komisyoncusu. Zengin yönlendirme yetenekleri ve ileti başına alındı ​​bildirimleri sunma yeteneği, onu kullanmak için güçlü nedenlerdir. RabbitMQ ayrıca RabbitMQ sunucunuzu izlemek için kullanabileceğiniz kullanıcı dostu bir web arayüzü sağlar. .Net'te RabbitMQ ile nasıl çalışılacağını öğrenmek için makaleme bir göz atın.  

Bununla birlikte, büyük dağıtımları desteklemek söz konusu olduğunda, Kafka, RabbitMQ'dan çok daha iyi ölçeklenir - yapmanız gereken tek şey daha fazla bölüm eklemek. Ayrıca, RabbitMQ kümelerinin ağ bölümlerine tolerans göstermediği de unutulmamalıdır. RabbitMQ sunucularını kümelemeyi planlıyorsanız, bunun yerine federasyonları kullanmalısınız. RabbitMQ kümeleri ve ağ bölümleri hakkında daha fazla bilgiyi buradan okuyabilirsiniz.

Kafka ayrıca performans açısından RabbitMQ'yu açıkça geride bırakıyor. Tek bir Kafka örneği, saniyede 100K mesajı işleyebilirken, RabbitMQ için saniyede 20K mesaja yakındır. Kafka, tüketicilerin çevrimiçi veya çevrimdışı olabileceğini varsayarak, toplu tüketicileri desteklemek için düşük gecikmeyle mesaj iletmek istediğinizde de iyi bir seçimdir.

Kafka üreticisini ve Kafka tüketicisini inşa etmek

Bu bölümde Kafka ile kullanmak için bir üretici ve tüketiciyi nasıl oluşturabileceğimizi inceleyeceğiz. Bunu yapmak için, Visual Studio'da iki konsol uygulaması oluşturacağız - bunlardan biri üreticiyi, diğeri tüketiciyi temsil edecek. Ve hem üretici hem de tüketici uygulamasında .Net için bir Kafka sağlayıcısı kurmamız gerekecek.

Bu arada, birçok sağlayıcı mevcuttur, ancak bu yazıda Apache Kafka için yerel bir C # istemcisi olan kafka-net'i kullanacağız. NuGet paket yöneticisi aracılığıyla kafka-net'i Visual Studio içinden yükleyebilirsiniz. Bu bağlantıyı kafka-net GitHub deposuna takip edebilirsiniz.

İşte Kafka üreticimiz için ana yöntem:

statik geçersiz Ana (dize [] değiştirgeler)

        {

            dize yükü;

            dize konusu;

            Mesaj msg = yeni Mesaj (yük);

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

            var seçenekler = new KafkaOptions (uri);

            var yönlendirici = new BrokerRouter (seçenekler);

            var müşteri = yeni Üretici (yönlendirici);

            client.SendMessageAsync (konu, yeni Liste {msg}). Bekleyin ();

            Console.ReadLine ();

        }

Ve işte Kafka tüketicimiz için kod:

statik geçersiz Ana (dize [] değiştirgeler)

        {

            dize konusu;

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

            var seçenekler = new KafkaOptions (uri);

            var yönlendirici = new BrokerRouter (seçenekler);

            var tüketici = new Consumer (new ConsumerOptions (konu, yönlendirici));

            foreach (tüketici mesajında ​​var. tüket ())

            {

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

            }

            Console.ReadLine ();

        }

Kafka ad alanlarını hem üretici hem de tüketici uygulamalarına aşağıda gösterildiği gibi dahil etmeniz gerektiğini unutmayın.

KafkaNet kullanarak;

KafkaNet.Model kullanarak;

KafkaNet.Protocol kullanarak;

Son olarak, üreticiyi (önce üreticiyi) ve sonra tüketiciyi çalıştırın. Ve bu kadar! "Kafka'ya Hoş Geldiniz!" Mesajını görmelisiniz. tüketici konsolu penceresinde görüntülenir.

Aralarından seçim yapabileceğimiz pek çok mesajlaşma sistemimiz olsa da - RabbitMQ, MSMQ, IBM MQ Series, vb. - Kafka, birçok yayıncıdan gelebilecek büyük veri akışlarıyla başa çıkmak için paketin önündedir. Kafka, genellikle IoT uygulamaları ve günlük toplama ve düşük gecikme süresi ve güçlü mesaj teslim garantileri gerektiren diğer kullanım durumları için kullanılır.

Uygulamanız hızlı ve ölçeklenebilir bir mesaj aracısına ihtiyaç duyuyorsa, Kafka harika bir seçimdir. Bu blogda Kafka ile ilgili daha fazla gönderi için bizi izlemeye devam edin.