Kafka - для найменших
В інтирнеті тисячі мільйонів статей на тему Kafka. І навіть не дивлячись на це я все одно хочу поділитися своїми знаннями в галузі цієї чудової штуки.
Наразі жодне інтерв'ю на позицію backend developer не обходиться без знань брокерів повідомлень, і в більшості випадків це Kafka.
Давайте розберемо основні моменти з самого нуля для тих, хто ніколи не працював і не був знайомий з Kafka, а потім заглибимося докладніше.
А вже у наступній статті поговоримо про Kafka Streams.
Що таке Kafka?
Для початку максимально коротко, а потім зупинимося на кожній деталі і все буде зрозуміло.
Kafka – це розподілений брокер повідомлень, який працює за принципом Видавець-передплатник.
Kafka необхідна організації потокової обробки даних.
Складається з двох типів компонентів:
- кластер zookeeper (zookeeper вбудовується у брокер в останніх версіях)
- кластер брокерів
Черга у Kafka завжди односпрямована! Не можна зробити двонаправлену!
Дані Kafka представлені у вигляді пар ключ-значення.
Kafka гарантує, що всі повідомлення будуть упорядковані саме у тій послідовності, в якій надійшли.
Kafka зберігає прочитані повідомлення певний період часу (не видаляє їх після прочитання – за умовчанням зберігає 1 тиждень).
Kafka зберігає свої записи на диску та нічого не тримає в оперативній пам'яті.
Особливості:
- Конкретною партицією має один брокер-лідер (інші брокери, у яких також розміщена ця партиція - репліки).
- За замовчуванням створюється одна партиція на топік.
- Повідомлення у партіях суворо впорядковані, але не впорядковані між партіціями одного топіка, тому що запис повідомлень у партиції відбувається паралельно.
- Повідомлення у партиції зберігаються до накопичення певного обсягу чи періоду зберігання.
- Якщо consumer об'єднані в consumer group, то в кожній consumer group кожна партиція належить лише одному consumer (тобто consumer може читати кілька партій, але одна партиція не може читатися кількома consumer).
- Якщо consumers не об'єднані в consumer group, вони читають незалежно (тобто кожен consumer, не об'єднаний у consumer group, читає з усіх партицій).
- Consumer може підписуватися на топики по regular expression, у разі при створенні відповідного топіка відбудеться rebalance і consumer почне читати також цей топік.
- Consumer може читати тільки після того, як повідомлення запишеться на всі репліки, що не відстають, для того щоб гарантувати, що прочитані повідомлення не пропадуть з Kafka під час збою (Через виходу з ладу лідера, якщо повідомлення є тільки на ньому) і зможуть бути прочитані всіма consumers. (Бо consumer зможе читати тільки після запису повідомлення на відстаючу репліку, яка все ще вважається "не відстає").
- Для того щоб при виході consumer з ладу було відомо, які повідомлення він встиг прочитати, consumer робить commit offset — записує офсет останнього записаного повідомлення.Раніше consumer записував офсети прямо в zookeeper.
- Consumer може вручну підписатися на певні партиції топіка (наприклад, усі), не входячи в consumer group, але в цьому випадку він повинен періодично уточнювати, чи не з'явилися нові партиції, тому що у разі ручної підписки додавання партицій не призведе до ребалансування.
- Порядок усередині партиції: якщо повідомлення А записано в партицію після повідомлення Б, вони будуть прочитані з цієї партиції у тому порядку і повідомлення А матиме менший оффсет.
- Підтримується атомарний запис у кілька топиків у межах однієї транзакції.
Consumer може читати в режимах:
- read_committed — у цьому режимі consumer прочитає повідомлення, записані в рамках транзакції, лише після коміту транзакції.
- read_uncommitted - У цьому режимі consumer прочитає повідомлення, записані в рамках транзакції відразу після їх запису, не чекаючи коміту транзакції.
Apache Kafka
Apache Kafka — розподілена система обміну повідомленнями між серверними програмами в режимі реального часу. Завдяки високій пропускній здатності, масштабованості та надійності застосовується в компаніях, що працюють з великими обсягами даних. Написана мовами Java та Scala.
Освойте професію
"Fullstack-розробник на Python"
Kafka розроблена компанією LinkedIn. 2011 року розробник опублікував вихідний код системи. З того часу платформа розвивається та підтримується як відкритий проект у рамках фонду Apache Software Foundation. Apache Kafka використовують багато великих компаній, таких як LinkedIn, Microsoft, The New York Times, Netflix та інші.
Офіційний логотип Kafka Apache
Безкоштовний профорієнтаційний проект
Пройдіть тест та визначте ваш напрямок у IT. Вигравайте призи, отримуйте подарунки та особистий план розвитку через безкоштовні гайди та кар'єрну консультацію.
Застосування Kafka Apache
Kafka Apache — ефективний інструмент для роботи серверних проектів будь-якого рівня. Завдяки гнучкості, масштабованості та стійкості до відмови використовується в різних напрямках IT-індустрії, від сервісів потокових відео до аналітики Big Data.
- Для зв'язку мікросервісів. Kafka - сполучна ланка між окремими функціональними модулями великої системи. Наприклад, можна підписати мікросервіс на інші компоненти для регулярного отримання оновлень.
- Потокове передавання даних. Висока пропускна здатність системи дозволяє підтримувати безперервні потоки інформації. За рахунок грамотної маршрутизації «Кафка» не тільки надійно передає дані, а й дозволяє робити з ними різні операції.
- Ведення журналу подій. Kafka зберігає дані в строго організовану структуру, в якій завжди можна відстежити, коли відбулася та чи інша подія. Інформація зберігається протягом заданого проміжку часу, що можна використовувати для розвантаження бази даних або систем логування, що повільно працюють.
Як влаштована та працює Kafka Apache
Коротко архітектуру системи повідомлень можна охарактеризувати так:
- розподіленість - окремі вузли системи розміщуються на кількох апаратних платформах (кластерах). Це забезпечує їй високу стійкість до відмови;
- масштабованість - систему можна нарощувати з допомогою простого додавання нових вузлів (брокерів повідомлень).
В архітектурі Kafka Apache ключовими є концепції:
- продюсер (producer) додаток або процес, що генерує та надсилає дані (публікує повідомлення);
- споживач (consumer)— додаток або процес, що приймає згенероване продюсером повідомлення;
- повідомлення - пакет даних, необхідний для здійснення будь-якої операції (наприклад, авторизації, оформлення покупки або підписки);
- брокер - вузол (диспетчер) передачі повідомлення від процесу-продюсера додатку-споживачеві;
- топік (тема)— віртуальне сховище повідомлень (журнал записів) однакового чи схожого змісту, з якого додаток-споживач отримує необхідну йому інформацію.
У спрощеному вигляді робота Kafka Apache виглядає так:
- Додаток-продюсер створює повідомлення та відправляє його на вузол Kafka.
- Брокер зберігає повідомлення у топіці, на який підписані додатки-споживачі.
- Споживач у разі потреби робить запит у топік і отримує з нього потрібні дані.
Повідомлення зберігаються в Kafka у вигляді журналу коммітів - записів, розміщених у суворій послідовності. Їх можна лише додавати. Видаляти чи коригувати не можна. Повідомлення зберігаються в тій послідовності, в якій надійшли, їхнє зчитування ведеться зліва направо, а відстеження за зміною порядкового номера. Брокери Kafka не обробляють записи - тільки поміщають їх у тему на кластері. Зберігання може тривати протягом певного періоду або досягнення заданого порога.
Станьте Fullstack-розробником на Python і знайдіть стабільну роботу
на віддаленні
Якщо тема надто розростається, для спрощення та прискорення процесу вона поділяється на секції. Кожна секція містить повідомлення, що згруповані за об'єднуючою ознакою. Наприклад, масив запитів користувача можна згрупувати за першою літерою імені користувачів.Так додатку-споживачеві не доведеться переглядати весь топік — лише потрібну тему, що прискорює процес обміну повідомленнями.
Схема організації даних у Kafka
Переваги Kafka
Відмовостійкість
Kafka - розподілена система обміну повідомленнями, вузли якої містяться на кількох кластерах. Приймаючи повідомлення від продюсера, вона реплікує (копіює) його, а копії зберігає на різних вузлах. Інші брокери залишаються відомими, їх головне завдання - забезпечити збереження повідомлення (його копій) навіть При виході одного або кількох вузлів з ладу Розподілений характер і механізм реплікації записів забезпечують високу стійкість системи.
Масштабованість
Apache Kafka підтримує «гаряче» розширення, тобто її можна збільшувати за допомогою простого додавання нових машин у кластери, не відключаючи всю систему. Так виключаються простої, пов'язані з переобладнанням серверних потужностей. » Додаткові ресурси: жорсткі диски, CPU, RAM і т.д. зайві машини із кластера.
Продуктивність
У Kafka процеси генерування/відправлення та зчитування повідомлень організовані незалежно один від одного. Тисячі додатків, процесів можуть одночасно і паралельно грати роль генераторів та споживачів повідомлень.У поєднанні з розподіленим характером і масштабованістю це дозволяє застосовувати «Кафка» як у невеликих, так і масштабних проектах з великими обсягами даних.
Відкритий вихідний код
Kafka поширюється на вільну ліцензію фонду Apache Software Foundation. Завдяки цьому Kafka Apache має ряд переваг:
- великий обсяг докладної довідкової інформації від офіційних розробників, а також різних мануалів, лайфхаків, інструкцій та оглядів від великої кількості ентузіастів-аматорів та професіоналів;
- велика кількість додаткових програмних пакетів, патчів від сторонніх розробників, що розширюють та покращують базовий функціонал системи;
- можливість самостійно адаптувати систему під специфіку проекту за рахунок гнучкості налаштувань.
Безпека
У Kafka є інструменти, що забезпечують безпечну роботу та достовірність даних. Наприклад, налаштувавши рівень ізоляції для транзакцій, можна виключити читання незавершених або скасованих повідомлень. Крім того, завдяки збереженню даних у топіках користувач може будь-якої миті відстежити зміни в системі. А принцип послідовного запису дозволяє швидко знаходити потрібні повідомлення.
Довговічність
Дані Kafka зберігаються в довгострокові віртуальні сховища протягом заданого періоду часу (днів, тижнів, місяців). За рахунок розподіленого зберігання інформації вона не загубиться при збої одного або кількох вузлів, і споживач зможе будь-якої миті звернутися до потрібного повідомлення в топіці, відстеживши його усунення.
Інтегрованість
Завдяки своєму протоколу з урахуванням TCP «Кафка Апач» взаємодіє з іншими протоколами передачі (REST, HTTP, XMPP, STOMP, AMQP, MQTT).Вбудований фреймворк Kafka Connect дозволяє Kafka підключатися до баз даних, файлових та хмарних сховищ.
Єдиним помітним недоліком системи є орієнтованість на обробку великих обсягів даних. Через це функціонал маршрутизації потоків обмежений проти іншими аналогічними платформами. У міру розвитку Kafka ця відмінність стає менш помітною, а сама система більш гнучкою і універсальною.
Три кроки до нової спеціальності. Пройдіть тест, щоб визначити свою IT-професію. На прямому ефірі дізнайтесь все про п'ять топових IT-спеціальностей та виберіть свою. Отримайте шанс виграти грант на навчання, сертифікат на 5000 рублів або курс SQL.