Основные понятия и терминология Kafka

Событие (event) фиксирует тот факт, что «что-то произошло» в мире или в вашем бизнесе. В документации это также называется записью (record) или сообщением (message). Когда вы читаете или записываете данные в Kafka, вы делаете это в форме событий. Концептуально событие имеет ключ, значение, отметку времени и необязательные заголовки метаданных. Вот пример события:

Event key: "Alice" 
Event value: "Made a payment of $200 to Bob" 
Event timestamp: "Jun. 25, 2020 at 2:06 p.m." 

Ключ события: «Алиса» 
Значение события: «Совершил платеж Бобу на сумму 200 долларов». 
Отметка времени события: «25 июня 2020 г., 14:06»

Производители (Producers) - это те клиентские приложения, которые публикуют (записывают) события в Kafka, а потребители (consumers) - это те, которые подписываются на эти события (читают и обрабатывают). В Kafka производители и потребители полностью отделены друг от друга и не зависят друг от друга, что является ключевым элементом дизайна для достижения высокой масштабируемости, которой известна Kafka. Например, производителям никогда не нужно ждать потребителей. Kafka предоставляет различные гарантии, например возможность обрабатывать события ровно один раз.

События организованы и надежно хранятся в темах (topics). Очень упрощенно, тема похожа на папку в файловой системе, а события - это файлы в этой папке. Примером названия темы может быть «платежи». Темы в Kafka всегда имеют несколько производителей и подписчиков: у темы может быть ноль, один или несколько производителей, которые записывают в нее события, а также ноль, один или несколько потребителей, которые подписываются на эти события. События в теме можно читать сколь угодно часто - в отличие от традиционных систем обмена сообщениями, события не удаляются после использования. Вместо этого вы определяете, как долго Kafka должна хранить ваши события с помощью настройки конфигурации для каждой темы, после чего старые события будут отброшены. Производительность Kafka практически не зависит от размера данных, поэтому хранить данные в течение длительного времени - это нормально.

Темы разделены, то есть тема распределена по нескольким «корзинам» (buckets), расположенным на разных брокерах Kafka. Это распределенное размещение ваших данных очень важно для масштабируемости, поскольку оно позволяет клиентским приложениям одновременно читать и записывать данные от многих брокеров и на них. Когда новое событие публикуется в теме, оно фактически добавляется к одному из разделов (partition) темы. События с одним и тем же ключом события (например, идентификатор клиента или транспортного средства) записываются в один и тот же раздел, и Kafka гарантирует, что любой потребитель данного раздела темы всегда будет читать события этого раздела в том же порядке, в котором они были записаны.

Чтобы сделать ваши данные отказоустойчивыми и высокодоступными, каждую тему можно реплицировать даже в географических регионах или центрах обработки данных, поэтому всегда есть несколько брокеров, у которых есть копия данных на случай, если что-то пойдет не так, а вы хотите обслуживание брокеров и т. д. Обычной производственной настройкой является коэффициент репликации 3, то есть всегда будет три копии ваших данных. Эта репликация выполняется на уровне разделов тем (topic-partitions).

Kafka API

Помимо инструментов командной строки для задач управления и администрирования, Kafka имеет пять основных API для Java и Scala:

  • Admin API для управления и проверки тем, брокеров и других объектов Kafka.
  • Producer API для публикации (записи) потока событий в одну или несколько тем Kafka.
  • Consumer API для подписки (чтения) одной или нескольких тем и обработки потока создаваемых для них событий.
  • Kafka Streams API для реализации приложений и микросервисов потоковой обработки. Он предоставляет функции более высокого уровня для обработки потоков событий, включая преобразования, операции с отслеживанием состояния, такие как агрегирование и объединение, управление окнами, обработку на основе времени события и многое другое. Входные данные считываются из одной или нескольких тем, чтобы сгенерировать выходные данные для одной или нескольких тем, эффективно преобразовывая входные потоки в выходные потоки.
  • Kafka Connect API для создания и запуска многоразовых коннекторов импорта/экспорта данных, которые потребляют (читают) или создают (записывают) потоки событий из и во внешние системы и приложения, чтобы они могли интегрироваться с Kafka. Например, коннектор к реляционной базе данных, такой как PostgreSQL, может фиксировать каждое изменение набора таблиц. Однако на практике вам обычно не нужно внедрять собственные коннекторы, поскольку сообщество Kafka уже предоставляет сотни готовых к использованию коннекторов.

Читайте также:

Комментарии

Популярные сообщения из этого блога

Язык поисковых запросов в Graylog

Нормальные формы, пример нормализации в базе данных

Хэш-таблица: разрешение коллизий