Apache Kafka


Apache Kafka — распределённый программный брокер сообщений с открытым исходным кодом, разрабатываемый в рамках фонда Apache на языках Java и Scala. Цель проекта — создание горизонтально масштабируемой платформы для обработки потоковых данных в реальном времени с высокой пропускной способностью и низкой задержкой. Kafka может подключаться к внешним системам (для импорта и экспорта данных) через Kafka Connect[⇨], а также может использоваться в задачах больших данных при помощи библиотеки Kafka Streams[⇨]. Использует собственный двоичный протокол передачи данных на основе TCP, группирующий сообщения для снижения накладных расходов на сеть.

Изначально разработан в LinkedIn Джеем Крепсом, Нией Нархид[англ.] и Цзюнь Жао[5][6] для внутреннего использования; наименование было дано Крепсом в честь писателя Франца Кафки. В начале 2011 года разработчики открыли исходный код системы под лицензией Apache и проект был принят в Apache Incubator. 23 октября 2012 года стал проектом верхнего уровня[7]. В 2014 году основные авторы покинули LinkedIn и основали компанию Confluent[англ.] для коммерциализации проекта. В 2021 году Confluent провела первичное размещение, достигнув по его результатам капитализации в $10 млрд.

Kafka хранит сообщения, которые поступают от других процессов, называемых «производителями» (producers), в формате «ключ — значение». Данные могут быть разбиты на разделы (англ. partitions) в рамках разных тем (topics). Внутри раздела сообщения строго упорядочены по своим смещениям (offset), то есть по положению сообщения внутри раздела, а также индексируются и сохраняются вместе с временем создания. Другие процессы, называемые «потребителями» (consumers), могут считывать сообщения из разделов. Для потоковой обработки Kafka предлагает Streams API, позволяющий разрабатывать Java-приложения, которые получают из Kafka и записывают данные в Kafka. Система также работает с внешними системами обработки потоков, такими как Apache Apex, Apache Beam, Apache Flink, Apache Spark, Apache Storm и Apache NiFi.

Система работает в кластере из одного или нескольких узлов-брокеров, где разделы всех тем распределены по узлам кластера. Для обеспечения отказоустойчивости разделы реплицируются на несколько брокеров. Начиная с версии 0.11.0.0 система позволяет использовать транзакционную модель, близкую к используемым моделям в базах данных, которая обеспечивает обработку потока ровно один раз с использованием Streams API.