Как да използвам съобщенията на Apache Kafka в .Net

Apache Kafka е брокер за съобщения с отворен код, разпределен, мащабируем, с висока производителност и публикуване-абониране. Това е чудесен избор за изграждане на системи, способни да обработват големи обеми данни. В тази статия ще разгледаме как можем да създадем приложение за производители и потребители за Kafka в C #.

За да започнете да използвате Kafka, трябва да изтеглите Kafka и ZooKeeper и да ги инсталирате на вашата система. Тази статия от DZone съдържа инструкции стъпка по стъпка за настройка на Kafka и ZooKeeper в Windows. Когато завършите настройката, стартирайте ZooKeeper и Kafka и се срещнете тук.

Архитектура на Apache Kafka

В този раздел ще разгледаме архитектурните компоненти и свързаната с тях терминология в Кафка. По принцип Kafka се състои от следните компоненти:

  • Клъстер Kafka - колекция от един или повече сървъри, известни като брокери
  • Producer - компонентът, който се използва за публикуване на съобщения
  • Потребител - компонентът, който се използва за извличане или консумиране на съобщения
  • ZooKeeper - централизирана координационна услуга, използвана за поддържане на информация за конфигурацията между възлите на клъстера в разпределена среда

Основната единица данни в Кафка е съобщение. Съобщението в Kafka е представено като двойка ключ-стойност. Kafka преобразува всички съобщения в байтови масиви. Трябва да се отбележи, че комуникациите между производителите, потребителите и клъстерите в Kafka използват протокола TCP. Всеки сървър в клъстер Kafka е известен като брокер. Можете да мащабирате Kafka хоризонтално, просто като добавите допълнителни брокери към клъстера.

Следващата диаграма илюстрира архитектурните компоненти в Кафка - изглед на високо ниво.

ФОНДАЦИЯ Apache

Тема в Kafka представлява логическа колекция от съобщения. Можете да го възприемате като емисия или категория, към която производителят може да публикува съобщения. Между другото, брокерът на Kafka съдържа една или повече теми, които от своя страна са разделени на един или повече дялове. Разделът се дефинира като подредена последователност от съобщения. Дяловете са ключът към способността на Kafka да се мащабира динамично, тъй като дяловете се разпределят между множество брокери.

Можете да имате един или повече производители, които изтласкват съобщенията в клъстер във всеки даден момент от времето. Производител в Kafka публикува съобщения в определена тема, а потребителят се абонира за тема, за да получи съобщенията.

Избор между Kafka и RabbitMQ

Както Kafka, така и RabbitMQ са популярни брокери за съобщения с отворен код, които се използват широко от доста време. Кога трябва да изберете Kafka пред RabbitMQ? Изборът зависи от няколко фактора.

RabbitMQ е бърз посредник за съобщения, написан на Erlang. Богатите му възможности за маршрутизация и способността да предлагат потвърждения на съобщение са сериозни причини да го използвате. RabbitMQ предлага и удобен за потребителя уеб интерфейс, който можете да използвате за наблюдение на вашия сървър RabbitMQ. Разгледайте статията ми, за да научите как да работите с RabbitMQ в .Net.  

Когато става въпрос за поддържане на големи внедрявания, Kafka се мащабира много по-добре от RabbitMQ - всичко, което трябва да направите, е да добавите повече дялове. Трябва също да се отбележи, че RabbitMQ клъстерите не толерират мрежови дялове. Ако планирате да клъстерирате RabbitMQ сървъри, вместо това трябва да използвате федерации. Можете да прочетете повече за RabbitMQ клъстери и мрежови дялове тук.

Kafka също очевидно засенчва RabbitMQ в изпълнението. Един-единствен екземпляр на Kafka може да обработва 100K съобщения в секунда, в сравнение с по-близо до 20K съобщения в секунда за RabbitMQ. Kafka също е добър избор, когато искате да предавате съобщения с ниска латентност, за да поддържате партидни потребители, като приемете, че потребителите могат да бъдат онлайн или офлайн.

Изграждане на производителя на Kafka и потребителя на Kafka

В този раздел ще разгледаме как можем да изградим производител и потребител за използване с Kafka. За целта ще изградим две конзолни приложения в Visual Studio - едното ще представлява производителя, а другото потребителя. И ще трябва да инсталираме доставчик на Kafka за .Net както в производителското, така и в потребителското приложение.

Между другото има много доставчици на разположение, но в тази публикация ще използваме kafka-net, роден C # клиент за Apache Kafka. Можете да инсталирате kafka-net чрез мениджъра на пакети NuGet от Visual Studio. Можете да следвате тази връзка към хранилището на GitHub на kafka-net.

Ето основния метод за нашия производител на Kafka:

static void Main (низ [] аргументи)

        {

            низ полезен товар;

            низ тема;

            Съобщение съобщение = ново съобщение (полезен товар);

            Uri uri = нов Uri (“// localhost: 9092”);

            var options = new KafkaOptions (uri);

            var router = нов BrokerRouter (опции);

            var клиент = нов производител (рутер);

            client.SendMessageAsync (тема, нов списък {msg}). Изчакайте ();

            Console.ReadLine ();

        }

И ето кода за нашия потребител на Kafka:

static void Main (низ [] аргументи)

        {

            низ тема;

            Uri uri = нов Uri (“// localhost: 9092”);

            var options = new KafkaOptions (uri);

            var router = нов BrokerRouter (опции);

            var потребител = нов потребител (нов ConsumerOptions (тема, рутер));

            foreach (съобщение от var в потребителя. Консумиране ())

            {

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

            }

            Console.ReadLine ();

        }

Обърнете внимание, че трябва да включите пространствата от имена на Kafka както в приложенията за производители, така и в потребителите, както е показано по-долу.

използване на KafkaNet;

използване на KafkaNet.Model;

използване на KafkaNet.Protocol;

И накрая, просто стартирайте производителя (първо производител) и след това потребителя. И това е! Трябва да видите съобщението „Добре дошли в Кафка!“ показва в прозореца на потребителската конзола.

Въпреки че имаме на разположение много системи за съобщения - RabbitMQ, MSMQ, IBM MQ Series и др. - Kafka изпреварва пакета за работа с големи потоци от данни, които могат да произхождат от много издатели. Kafka често се използва за IoT приложения и агрегиране на регистрационни файлове и други случаи на употреба, които изискват ниска латентност и силни гаранции за доставка на съобщения.

Ако вашето приложение се нуждае от бърз и мащабируем посредник за съобщения, Kafka е чудесен избор. Следете за още публикации в Kafka в този блог.