Основное по Kafka

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


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


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


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


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


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


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

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

Важно отметить, что каждый потребитель в группе читает только из определенного подмножества партиций. Это означает, что если у вас больше партиций, чем потребителей, некоторые из них могут быть недоступны для чтения ни одним из потребителей в группе. И наоборот, если у вас больше потребителей, чем разделов, некоторые потребители могут простаивать. Поэтому важно выбрать подходящее количество разделов и потребителей в зависимости от вашего варианта использования и объема данных.


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

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

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


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