Apache Kafka
За дефиниция на високо ниво, нека представим кратка дефиниция за Apache Kafka:
Apache Kafka е разпределен, толерантен към грешки, хоризонтално мащабируем дневник на фиксиране.
Това бяха няколко думи на високо ниво за Apache Kafka. Нека разберем подробно понятията тук.
- Разпределени: Kafka разделя данните, които съдържа, на множество сървъри и всеки от тези сървъри е в състояние да обработва заявки от клиенти за дела на данните, които съдържа
- Толерантен към повреди: Кафка няма нито една точка на неуспех. В SPoF система, подобно на база данни MySQL, ако сървърът, хостващ базата данни, откаже, приложението се прецаква. В система, която няма SPoF и се състои от множество възли, дори ако по-голямата част от системата отпадне, тя все още е същата за крайния потребител.
- Хоризонтално-мащабируема: Този вид мащабиране се отнася до добавяне на повече машини към съществуващия клъстер. Това означава, че Apache Kafka е способен да приема повече възли в своя клъстер и да не осигурява време за престой за необходимите надстройки на системата. Погледнете изображението по-долу, за да разберете вида на мащабиращите концепции:
- Log Log: Дневникът на фиксирането е структура на данни точно като свързан списък. Той добавя всички съобщения, които идват към него, и винаги поддържа техния ред. Данните не могат да бъдат изтрити от този дневник, докато не се достигне определено време за тези данни.
Вертикално и хоризонтално скалиране
Темата в Apache Kafka е точно като опашка, където се съхраняват съобщения. Тези съобщения се съхраняват за конфигурируем период от време и съобщението не се изтрива, докато не се постигне това време, дори ако е било консумирано от всички известни потребители.
Kafka е мащабируема, тъй като потребителите са тези, които всъщност съхраняват това, което съобщението е извлечено от тях последно като стойност на „компенсиране“. Нека да разгледаме фигура, за да разберем това по-добре:
Разделяне на теми и компенсиране на потребителите в Apache Kafka
Първи стъпки с Apache Kafka
За да започнете да използвате Apache Kafka, той трябва да бъде инсталиран на машината. За да направите това, прочетете Инсталиране на Apache Kafka на Ubuntu.
Уверете се, че имате активна инсталация на Kafka, ако искате да изпробвате примери, които представяме по-късно в урока.
Как работи?
С Кафка, Продуцент приложения публикуват съобщения който пристига в Кафка Възел а не директно към потребител. От този възел Kafka съобщенията се консумират от Консуматор приложения.
Производител и потребител на Kafka
Тъй като една тема може да получи много данни наведнъж, за да запази Kafka хоризонтално мащабируема, всяка тема е разделена на дялове и всеки дял може да живее на всяка машина на възел на клъстер. Нека се опитаме да го представим:
Тематични дялове
Отново Kafka Broker не води отчет кой потребител е консумирал колко пакета данни. Това е отговорността на потребителите да следи данните, които е консумирала.
Устойчивост на диска
Kafka продължава записите на съобщенията, които получава от производителите на диск, и не ги съхранява в паметта. Въпрос, който може да възникне, е как това прави нещата осъществими и бързи? Зад това имаше няколко причини, които го правят оптимален начин за управление на записите на съобщенията:
- Кафка следва протокол за групиране на записите на съобщенията. Производителите произвеждат съобщения, които се запазват на диск на големи парчета, а потребителите консумират тези записи на съобщения и на големи линейни парчета.
- Причината, че записът на диска е линеен, е, че това прави четенето бързо поради силно намаленото време за четене на линейния диск.
- Линейните дискови операции се оптимизират от Операционна система както и чрез използване на техники на отзад и четене напред.
- Съвременните ОС също използват концепцията за Кеширане на страници което означава, че те кешират някои дискови данни в безплатна налична RAM.
- Тъй като Kafka запазва данните в единни стандартни данни в целия поток от производител до потребител, той използва оптимизация с нулево копие процес.
Разпределение и репликация на данни
Както проучихме по-горе, че дадена тема е разделена на дялове, всеки запис на съобщение се репликира на множество възли на клъстера, за да се поддържа редът и данните на всеки запис в случай, че някой от възела умре.
Въпреки че дялът се репликира на множество възли, все още има ръководител на дял възел, чрез който приложенията четат и записват данни по темата, а лидерът репликира данни на други възли, които се обозначават като последователи на този дял.
Ако данните от записа на съобщението са много важни за приложението, гаранцията за безопасността на записа на съобщението в един от възлите може да бъде увеличена чрез увеличаване на фактор на репликация на клъстера.
Какво е Zookeeper?
Zookeeper е силно толерантно към грешки, разпределено хранилище с ключ-стойност. Apache Kafka силно зависи от Zookeeper, за да съхранява клъстерни механики като сърдечния ритъм, разпространението на актуализации / конфигурации и т.н.).
Той позволява на брокерите на Kafka да се абонират за себе си и да знаят, когато се случи някаква промяна по отношение на лидера на дяла и разпределението на възлите.
Приложенията на производители и потребители директно комуникират със Zookeeper приложение, за да се знае кой възел е лидер на дяла за дадена тема, за да могат да извършват четене и запис от лидера на дяла.
Стрийминг
Потоковият процесор е основен компонент в клъстер на Kafka, който взема непрекъснат поток от данни за запис на съобщения от входни теми, обработва тези данни и създава поток от данни за извеждане на теми, които могат да бъдат всякакви, от кошче до база данни.
Напълно възможно е да се извърши проста обработка директно с помощта на API на производител / потребител, макар че за сложна обработка, като комбиниране на потоци, Kafka предоставя интегрирана библиотека Streaming API, но имайте предвид, че този API е предназначен да се използва в нашата собствена кодова база и това не не работи на брокер. Той работи подобно на потребителския API и ни помага да разширим работата по обработка на потока в множество приложения.
Кога да използвате Apache Kafka?
Както изучавахме в горните раздели, Apache Kafka може да се използва за справяне с голям брой записи на съобщения, които могат да принадлежат към практически безкраен брой теми в нашите системи.
Apache Kafka е идеалният кандидат, когато става въпрос за използване на услуга, която може да ни позволи да следваме управлявана от събития архитектура в нашите приложения. Това се дължи на възможностите му за устойчивост на данните, устойчива на грешки и силно разпределена архитектура, където критичните приложения могат да разчитат на нейната производителност.
Мащабируемата и разпределена архитектура на Kafka прави интеграцията с микроуслуги много лесна и дава възможност на приложението да се отдели с много бизнес логика.
Създаване на нова тема
Можем да създадем тестова тема тестване на сървъра на Apache Kafka със следната команда:
Създаване на тема
sudo kafka-теми.sh --create --zookeeper localhost: 2181 - репликационен фактор 1--дялове 1 - тематично тестване
Ето какво получаваме обратно с тази команда:
Създайте нова тема на Kafka
Ще бъде създадена тестова тема, която можем да потвърдим със споменатата команда:
Потвърждение за създаването на тема Kafka
Писане на съобщения по тема
Както проучихме по-рано, един от API, присъстващ в Apache Kafka, е API на продуцента. Ще използваме този API, за да създадем ново съобщение и да публикуваме в току-що създадената тема:
Писане на съобщение до тема
sudo kafka-производител на конзоли.sh --broker-list localhost: 9092 - тематично тестванеНека видим изхода за тази команда:
Публикуване на съобщение до Kafka Topic
След като натиснем клавиша, ще видим нова стрелка (>), което означава, че можем да извеждаме данни сега:
Въвеждане на съобщение
Просто напишете нещо и натиснете, за да започнете нов ред. Набрах 3 реда текстове:
Четене на съобщения от тема
След като публикувахме съобщение по темата Kafka, която създадохме, това съобщение ще бъде там за известно време, което може да се конфигурира. Сега можем да го прочетем с помощта на Потребителски API:
Четене на съобщения от тема
sudo kafka-console-consumer.sh --zookeeper localhost: 2181 --тестване на теми - от началото
Ето какво получаваме обратно с тази команда:
Команда за четене на Съобщение от Кафка Тема
Ще можем да видим съобщенията или редовете, които сме написали, използвайки Producer API, както е показано по-долу:
Ако напишем друго ново съобщение с помощта на Producer API, то също ще се покаже незабавно от страна на потребителите:
Публикуване и потребление едновременно
Заключение
В този урок разгледахме как започваме да използваме Apache Kafka, който е отличен посредник за съобщения и може да действа и като специална единица за съхранение на данни.