В този урок ще видим какво е Apache Kafka и как работи той, заедно с някои от най-често използваните случаи. Apache Kafka първоначално е разработен в LinkedIn през 2010 г. и е преместен, за да стане проект на Apache от най-високо ниво през 2012 г. Той има три основни компонента:
- Издател-абонат: Този компонент е отговорен за ефективното управление и доставяне на данни в Kafka Nodes и потребителските приложения, които се мащабират много (като буквално).
- API за свързване: API на Connect е най-полезната функция за Kafka и позволява интегрирането на Kafka с много външни източници на данни и мивки за данни.
- Кафка потоци: Използвайки потоци Kafka, можем да помислим за обработка на входящи данни в мащаб в почти реално време.
Ще проучим много повече концепции на Kafka в следващите раздели. Да вървим напред.
Концепции на Apache Kafka
Преди да се задълбочим, трябва да сме задълбочени относно някои концепции в Apache Kafka. Ето термините, които трябва да знаем, съвсем накратко:
-
- Продуцент: Това е приложение, което изпраща съобщение до Kafka
- Консуматор: Това е приложение, което консумира данни от Kafka
- Съобщение: Данни, които се изпращат от приложението Producer до приложението Consumer чрез Kafka
- Връзка: Kafka установява TCP връзка между клъстера Kafka и приложенията
- Тема: Тема е категория, към която изпратените данни се маркират и доставят на заинтересованите потребителски приложения
- Тема дял: Тъй като една тема може да получи много данни наведнъж, за да запази Kafka хоризонтално мащабируема, всяка тема е разделена на дялове и всеки дял може да живее на всяка машина на възел на клъстер. Нека се опитаме да го представим:
Тематични дялове
- Реплики: Както проучихме по-горе, че дадена тема е разделена на дялове, всеки запис на съобщение се репликира на множество възли на клъстера, за да се поддържа редът и данните на всеки запис в случай, че някой от възела умре.
- Потребителски групи: Множество потребители, които се интересуват от една и съща тема, могат да бъдат държани в група, която се нарича потребителска група
- Изместване: Kafka е мащабируема, тъй като потребителите всъщност съхраняват кое съобщение е изтеглено от тях последно като стойност на „компенсиране“. Това означава, че за същата тема, изместването на потребителя А може да има стойност 5, което означава, че трябва да обработи шестия пакет след това, а за потребителя Б стойността на изместването може да бъде 7, което означава, че следва да обработи осмия пакет след това. Това напълно премахна зависимостта от самата тема за съхраняване на тези мета-данни, свързани с всеки потребител.
- Възел: Възелът е единична сървърна машина в клъстера Apache Kafka.
- Клъстер: Клъстерът е група от възли i.д., група сървъри.
Концепцията за Тема, Тематични дялове и компенсиране също може да бъде изяснена с илюстративна фигура:
Разделяне на теми и компенсиране на потребителите в Apache Kafka
Apache Kafka като система за съобщения за публикуване-абониране
С Kafka приложенията на Producer публикуват съобщения, които пристигат в възел на Kafka, а не директно до потребител. От този възел Kafka съобщенията се консумират от потребителските приложения.
Производител и потребител на Kafka
Тъй като една тема може да получи много данни наведнъж, за да запази Kafka хоризонтално мащабируема, всяка тема е разделена на дялове и всеки дял може да живее на всяка машина на възел на клъстер.
Отново Kafka Broker не води записи кой потребител е консумирал колко пакета данни. Това е отговорността на потребителите да следи данните, които е консумирала. Поради причината, че Kafka не следи потвържденията и съобщенията на всяко потребителско приложение, той може да управлява много повече потребители с незначително въздействие върху производителността. В производството много приложения дори следват модел на партидни потребители, което означава, че потребителят консумира всички съобщения на опашка през редовен интервал от време.
Инсталация
За да започнете да използвате Apache Kafka, той трябва да бъде инсталиран на машината. За да направите това, прочетете Инсталиране на Apache Kafka на Ubuntu.
Случай на употреба: Проследяване на използването на уебсайта
Kafka е отличен инструмент, който трябва да се използва, когато трябва да проследяваме активност в уебсайт. Данните за проследяване включват и не се ограничават до изгледи на страници, търсения, качвания или други действия, които потребителите могат да предприемат. Когато потребителят е на уебсайт, той може да предприеме произволен брой действия, когато сърфира из уебсайта.
Например, когато нов потребител се регистрира на уебсайт, активността може да бъде проследена в какъв ред нов потребител изследва характеристиките на уебсайт, ако потребителят зададе своя профил според нуждите или предпочита директно да премине към функциите на уебсайт. Всеки път, когато потребителят щракне върху бутон, метаданните за този бутон се събират в пакет данни и се изпращат в клъстера Kafka, откъдето услугата за анализ на приложението може да събира тези данни и да дава полезна информация за свързаните данни. Ако се опитаме да разделим задачите на стъпки, ето как ще изглежда процесът:
- Потребителят се регистрира в уебсайт и влиза в таблото. Потребителят се опитва да получи достъп до функция веднага, като взаимодейства с бутон.
- Уеб приложението изгражда съобщение с тези метаданни към темен дял на тема „щракване“.
- Съобщението се добавя към регистъра на фиксирането и компенсирането се увеличава
- Потребителят вече може да изтегли съобщението от Kafka Broker и да показва използването на уебсайта в реално време и да показва минали данни, ако нулира компенсирането си до възможна минала стойност
Случай на употреба: Опашка за съобщения
Apache Kafka е отличен инструмент, който може да действа като заместител на инструменти за посредник на съобщения като RabbitMQ. Асинхронните съобщения помагат за отделянето на приложенията и създават силно мащабируема система.
Подобно на концепцията за микроуслуги, вместо да изградим едно голямо приложение, ние можем да разделим приложението на множество части и всяка част има много специфична отговорност. По този начин различните части могат да бъдат написани и на напълно независими езици за програмиране! Kafka има вградена система за разделяне, репликация и устойчивост на грешки, което я прави добра като мащабна система за посредник на съобщения.
Напоследък Kafka се разглежда и като много добро решение за събиране на журнали, което може да управлява сървъра за събиране на регистрационни файлове и да предоставя тези файлове на централна система. С Kafka е възможно да генерирате всяко събитие, за което искате да знае друга част от приложението ви.
Използване на Kafka в LinkedIn
Интересно е да се отбележи, че Apache Kafka по-рано е бил разглеждан и използван като начин, чрез който тръбопроводите за данни могат да бъдат направени последователни и чрез които данните са поглъщани в Hadoop. Kafka работи отлично, когато са налице множество източници на данни и дестинации и не е възможно да се осигури отделен процес на тръбопровод за всяка комбинация от източник и дестинация. Архитектът на Kafka на LinkedIn, Джей Крепс описва добре този познат проблем в публикация в блог:
Моето собствено участие в това започна около 2008 г., след като изпратихме нашия магазин за ключови стойности. Следващият ми проект беше да се опитам да задействам работеща настройка на Hadoop и да преместя там някои от нашите препоръчителни процеси. Като имаме малко опит в тази област, ние естествено предвидихме няколко седмици за получаване и извличане на данни, а останалото време за внедряване на фантастични алгоритми за прогнозиране. Така започна дълъг лозунг.
Apache Kafka и Flume
Ако се преместите да сравните тези две въз основа на техните функции, ще намерите много общи характеристики. Ето някои от тях:
- Препоръчително е да използвате Kafka, когато имате множество приложения, консумиращи данните, вместо Flume, който е специално създаден за интегриране с Hadoop и може да се използва само за поглъщане на данни в HDFS и HBase. Flume е оптимизиран за HDFS операции.
- С Kafka е недостатък да се кодират производителите и потребителските приложения, докато във Flume има много вградени източници и мивки. Това означава, че ако съществуващите нужди съвпадат с функциите на Flume, препоръчваме ви да използвате самия Flume, за да спестите време.
- Flume може да консумира данни в полет с помощта на прехващачи. Това може да е важно за маскиране и филтриране на данни, докато Kafka се нуждае от външна система за обработка на потоци.
- Възможно е Kafka да използва Flume като потребител, когато трябва да погълнем данни към HDFS и HBase. Това означава, че Kafka и Flume се интегрират наистина добре.
- Kakfa и Flume могат да гарантират нулева загуба на данни с правилната конфигурация, която също е лесна за постигане. И все пак, за да отбележим, Flume не репликира събития, което означава, че ако някой от възлите на Flume се провали, ще загубим достъп до събитие, докато дискът бъде възстановен
Заключение
В този урок разгледахме много концепции за Apache Kafka. Прочетете повече публикации, базирани на Kafka, тук.