Apache Kafka — це розподілене сховище подій і платформа для їх багатопотокового оброблення. Метою проєкту є створення уніфікованої високопродуктивної платформи з низькою затримкою для обробки потоків даних у реальному часі.

Apache Kafka
Тип проміжне програмне забезпечення, орієнтоване на обробку повідомлень
Автор Neha Narkheded
Розробники Apache Software Foundation і LinkedIn
Операційна система кросплатформова програма
Мова програмування Java[1] і Scala[2]
Ліцензія Apache License, Version 2.0[d] і Apache License
Репозиторій https://github.com/apache/kafka, https://gitbox.apache.org/repos/asf/kafka.git
Вебсайт kafka.apache.org

Kafka може бути підключена до зовнішніх систем (для імпорту/експорту даних) через Kafka Connect, програми потокової обробки даних можуть працювати з Kafka через бібліотеку Kafka Streams. Kafka використовує бінарний протокол на базі TCP, оптимізований для більшої ефективності.

В основі концепції Kafka лежить абстракція «набір повідомлень» (англ. message set), яка передбачає групування повідомлення разом, щоб зменшити накладні витрати на транспортування по мережі. Це призводить до "більших мережевих пакетів, більших послідовних операцій на диску та неперервних блоків пам'яті […], що дозволяє Kafka перетворювати хаотичний потік випадкових повідомлень на лінійні записи"[3].

Історія ред.

Kafka було розроблено компанією LinkedIn. На початку 2011 року було відкрито вихідний код проєкту. Серед розробників Kafka: Джей Крепс, Неха Наркхеде та Джун Рао[4]. Вихід з Apache Incubator відбувся 23 жовтня 2012 року[5]. Джей Крепс вибрав ім'я Kafka на честь письменника Франца Кафки, тому що це «система, оптимізована для записування», а йому подобались роботи Кафки[6].

Додатки ред.

В основі Apache Kafka лежить журнал транзакцій (commit log), на який клієнти можуть підписуватись і куди публікувати дані для будь-якої кількості додатків реального часу. До прикладів таких додатків можна віднести управління підбором водія для пасажира в Uber, забезпечення аналітики в реальному часі і прогнозування необхідності обслуговування для розумних будинків компанії British Gas і, робота численних сервісів у реальному часі по усьому LinkedIn[7].

Архітектура ред.

 
Огляд архітектури з Kafka

Kafka зберігає повідомлення у форматі ключ-значення, які приходять від необмеженої кількості клієнтів, що називаються «продюсерами» (producers). Дані можуть бути розділені на окремі «розділи» (partitions) залежно від теми «теми» (topic). Всередині розділу, повідомлення суворо впорядковуються за відступом (offsets) — позицією повідомлення в розділі, індексуються і зберігаються разом з позначкою часу (timestamp). Інші клієнти, які називається «споживачами» (consumers) можуть читати повідомлення з розділів. Для потокової обробки Kafka надає Streams API, що дозволяє створювати додатки, які зчитують інформацію з Kafka і записують результати назад в Kafka. Apache Kafka також працює з зовнішіми системами потоковї обробки даних, такими як Apache Apex, Apache Beam, Apache Flink, Apache Spark, Apache Storm і Apache NiFi.

Kafka працює в кластері з одного або більше серверів (які ще називаються брокерами (brokers)), і розділи усіх тем (топіків) розподіляються по вузлах кластера. Додатково, розділи реплікуються декількома брокерами. Така архітектура дозволяє Kafka доставляти масивні потоки повідомлень у відмовостійкий спосіб і замінити собою деякі традиційні систему обміну повідомленнями, такі як Java Message Service, AMQP, тощо. Починаючи з версії 0.11.0.0, Kafka дозволяє виконувати транзакційні записи (transactional writes), що дозволяє забезпечити лише одне опрацювання даних, використовуючи Streams API.

В Kafka є 5 основних API:

  • Producer API — Дозволяє клієнту публікувати потоки записів.
  • Consumer API — Дозволяє клієнту підписуватися на теми та обробляти вхідні потоки записів.
  • Connector API — Дозволяє перевикористовувати клієнтів Consumer та Producer API, для зв’язування існуючих додатків з новими темами (топіками).
  • Streams API — Перетворює вхідні потоки на вихідні та формує результат.
  • Admin API — Дозволяє керувати темами (топіками), брокерами та іншими об’єктами Kafka.

Consumer та Producer API відокремлені від основого функціоналу за допомогою базового протоколу обміну повідомленнями. Це дозволяє писати сумісні API на будь-якій мові програмування і вони будуть такими ж ефективними як Java API, що постачається з коробки. Проєкт Apache Kafka веде список таких сторонніх API.

Див. також ред.

Примітки ред.

  1. https://projects.apache.org/json/projects/kafka.json
  2. The apache-kafka Open Source Project on Open Hub: Languages Page — 2006.
  3. Efficiency. kafka.apache.org. Процитовано 19 вересня 2019.
  4. Li, S. (2020). He Left His High-Paying Job At LinkedIn And Then Built A $4.5 Billion Business In A Niche You've Never Heard Of. Forbes. Retrieved 8 June 2021, from Forbes_Kreps.
  5. Apache Incubator: Kafka Incubation Status.
  6. What is the relation between Kafka, the writer, and Apache Kafka, the distributed messaging system?. Quora. Процитовано 12 червня 2017.
  7. What is Apache Kafka. confluent.io. Процитовано 4 травня 2018.

Посилання ред.