Kafka — это мощная и все более популярная технология, позволяющая обрабатывать большие объемы данных в режиме реального времени. Первоначально он был разработан LinkedIn и теперь поддерживается Apache Software Foundation. Kafka предоставляет распределенную, отказоустойчивую и масштабируемую платформу для управления и обработки потоков данных. Он стал отраслевым стандартом архитектуры, управляемой событиями. В этой статье мы рассмотрим наиболее важные концепции Кафки.

Маклер

Брокер — это сервер, который управляет хранением и репликацией топиков Kafka. Брокеры отвечают за получение и хранение событий, а также за их репликацию другим брокерам для обеспечения отказоустойчивости.

Кластер

Кластер Kafka — это группа из одного или нескольких брокеров Kafka, которые работают вместе для управления и обработки потоков данных. Кластер Kafka предоставляет распределенную и отказоустойчивую платформу для хранения и обработки событий, которая обеспечивает высокую масштабируемость, высокую доступность и высокую пропускную способность.

Событие

Событие — это часть данных, созданная программным приложением или устройством. Это может быть любой тип данных, например запись в журнале, показания датчика, действие пользователя, изменение курса акций или бизнес-транзакция. События являются основными строительными блоками потока Kafka. Они неизменны, что означает, что после создания события его нельзя изменить. Это позволяет вести запись исторических данных для аналитики и других целей.

Тема

Тема — это именованный канал или поток событий в Kafka. Тема может иметь один или несколько разделов, которые являются единицами параллелизма в Kafka. Темы — это основной способ организации и распространения событий в Kafka.

Раздел

Раздел — это единица параллелизма в Kafka. Каждый раздел представляет собой упорядоченную последовательность событий, поэтому, если события в вашем приложении необходимо обрабатывать в хронологическом порядке, их необходимо производить в одном и том же разделе. Это достигается с помощью ключей разделов. Ключ раздела — это атрибут сообщения, который используется для определения раздела, в который должно быть записано сообщение. Когда приложение отправляет сообщение в Kafka, оно включает ключ раздела как часть сообщения. Kafka использует этот ключ, чтобы определить, в какой раздел следует записать сообщение.

Ключ секции обычно представляет собой поле или значение из сообщения, уникальное и согласованное для связанных сообщений. Например, если сообщения представляют события футбольного матча (гол, желтая карточка и т. д.), в качестве ключа раздела можно использовать идентификатор матча. Использование согласованного ключа раздела гарантирует, что связанные сообщения записываются в один и тот же раздел, что позволяет упорядоченную обработку сообщений.

Выбор ключа раздела может существенно повлиять на производительность и масштабируемость кластера Kafka. Если ключ раздела распределен неравномерно, это может привести к тому, что несколько разделов получат непропорциональное количество сообщений, что может привести к возникновению горячих точек и снижению пропускной способности. С другой стороны, если ключ раздела слишком случайный, это может привести к чрезмерному сетевому трафику и более высокой задержке.

Разделы обеспечивают параллельную обработку событий, что увеличивает пропускную способность и снижает влияние сбоев. Каждый раздел реплицируется между несколькими брокерами для обеспечения отказоустойчивости.

Режиссер

Производитель Kafka — это программное приложение, которое публикует события в теме Kafka. Продюсер несет ответственность за решение о том, какие события публиковать, в каком формате и на какую тему. Производители могут быть реализованы на любом языке программирования и могут публиковать события из любого источника, например веб-приложения, мобильного приложения или датчика. Продюсеры в Kafka могут быть как синхронными, так и асинхронными. Синхронные производители ждут, пока брокер подтвердит получение события, прежде чем отправлять следующее событие. Это гарантирует, что события не будут потеряны, но может уменьшить пропускную способность производителя. Это полезно, если Источник также является HTTP-сервером, создающим событие, которое инициируется запросом от HTTP-клиента.

Этот производитель должен убедиться, что событие было успешно создано для темы Kafka, чтобы вернуть положительный ответ (код состояния 200) клиенту. Если по какой-то причине событие не было создано безуспешно, HTTP-клиент будет уведомлен сервером и может попытаться повторить попытку.

Асинхронные производители не ждут подтверждения и могут отправлять события значительно быстрее. Однако существует риск потери событий, если брокер не сможет их получить.

Потребитель

Потребитель — это программное приложение, которое подписывается на тему Kafka и обрабатывает публикуемые в ней события. Потребители также могут быть реализованы на любом языке программирования и могут обрабатывать события в режиме реального времени или в пакетном режиме. Логика приложения потребителя определяет, как обрабатывать эти события, что может включать их фильтрацию, агрегирование, преобразование или сохранение. Потребители сгруппированы в логические единицы, известные как группы потребителей.

Группы потребителей

Группа потребителей — это набор потребителей, которые работают вместе, чтобы потреблять события из темы Kafka. Каждый потребитель в группе обрабатывает подмножество разделов темы. Группы потребителей позволяют масштабировать обработку потребителей и отказоустойчивость. Каждая секция может использоваться только одним потребителем в группе, что обеспечивает упорядоченную обработку событий.

Отказоустойчивость

Отказоустойчивость — это способность системы продолжать работу при наличии сбоев, таких как аппаратные сбои, перебои в работе сети или программные ошибки. Kafka обеспечивает отказоустойчивость за счет репликации и разделения. События реплицируются на несколько брокеров, чтобы гарантировать, что данные не будут потеряны в случае сбоя. Секционирование обеспечивает параллельную обработку событий, что увеличивает пропускную способность и снижает влияние сбоев.

Формат данных

Kafka предназначена для работы с широким спектром форматов данных и поддерживает как двоичные, так и текстовые форматы. API-интерфейсы производителя и потребителя Kafka позволяют разработчикам указывать формат данных событий, которые они создают или потребляют. Вот некоторые из наиболее распространенных форматов данных, поддерживаемых Kafka:

  1. Avro — это формат двоичной сериализации, разработанный для того, чтобы быть компактным и эффективным. Он включает схему, определяющую структуру данных, что обеспечивает строгую типизацию и проверку данных. Kafka включает встроенную поддержку формата данных Avro.
  2. JSON (нотация объектов JavaScript), вероятно, является наиболее широко используемым форматом данных при разработке веб-приложений. Kafka включает встроенную поддержку данных JSON, и многие клиентские библиотеки Kafka обеспечивают поддержку сериализации и десериализации JSON.
  3. Protocol Buffers (также известный как Protobuffs) — это формат двоичной сериализации, разработанный инженерами Google для обеспечения высокой эффективности и независимости от языка. Он включает схему, определяющую структуру данных, что обеспечивает строгую типизацию и проверку данных. Клиентские библиотеки Kafka обеспечивают поддержку сериализации и десериализации протокольных буферов.

Политика удержания

В Kafka политика хранения — это конфигурация, определяющая, как долго Kafka сохраняет сообщения в теме перед их удалением. Политика хранения важна, поскольку она влияет на объем дискового пространства, используемого Kafka, производительность кластера Kafka и доступность данных для последующей обработки. Политика хранения по умолчанию составляет 7 дней, но при желании ее можно установить навсегда. Вот как New York Times использует Kafka для хранения всех когда-либо опубликованных статей.

Если вы разрабатываете систему, основанную на архитектуре, управляемой событиями, с высокой пропускной способностью данных, скорее всего, Kafka — идеальное решение для вас. После прочтения этой статьи у вас будет хорошее представление о том, как это работает и каковы его наиболее важные концепции.

На этом все, если вам понравилось читать, вы можете поддержать меня, подписавшись на Medium по этой ссылке. Вы получите доступ ко всем статьям, написанным на Medium.

Спасибо за прочтение!