Всем привет! Меня зовут Вадим, и я QA-инженер в IT-компании Intelsy. В современной разработке программного обеспечения всё чаще встречаются распределённые системы и микросервисная архитектура. Один из ключевых инструментов, обеспечивающих надёжное и масштабируемое взаимодействие между сервисами, — это Apache Kafka — распределённая платформа потоковой обработки и передачи сообщений. Для специалиста по обеспечению качества понимание принципов работы Kafka критически важно.

Apache Kafka – это распределенная платформа потоковой передачи данных с открытым исходным кодом. Она используется для построения высокопроизводительных конвейеров данных, стриминговых приложений и обработки событий в режиме реального времени. Kafka стала одной из самых популярных технологий для обработки больших объёмов данных и обеспечения высокой пропускной способности.
Что такое потоковая передача данных?
Потоковая передача данных – это процесс обработки данных, которые генерируются непрерывно в режиме реального времени. В отличие от пакетной обработки, где данные обрабатываются порциями, потоковая обработка позволяет анализировать и реагировать на данные по мере их поступления.
Ключевые концепции Apache Kafka:
1. Топики (Topics):
Топик – централизованные хранилища данных, которые используются для обмена информацией между производителями (продюсерами) и потребителями (консьюмерами).
Можно представить топик как именованный канал, к которому производители (продюсеры) отправляют сообщения, а потребители (консьюмеры) подписываются для их получения.
Топики разделены на партиции (Partitions) для параллельной обработки.

2. Партиции (Partitions):
Каждая партиция – это упорядоченная, неизменяемая последовательность записей (сообщений).
Сообщения в партиции упорядочены по времени их поступления.
Распределение партиций по брокерам (серверам Kafka) обеспечивает масштабируемость и отказоустойчивость.

3. Продюсеры (Producers):
Продюсер отвечает за публикацию Сообщений в Топике. Это может быть любое приложение или система, которая генерирует данные и отправляет их в Kafka для дальнейшей обработки. Продюсеры могут отправлять сообщения в конкретные партиции или позволить Kafka автоматически распределять их.
4. Консьюмеры (Consumers):
Консьюмер считывает сообщения из Топиков. Это может быть любое приложение или система, которая подписывается на один или несколько Топиков и потребляет Сообщения, созданные Продюсерами. Консьюмеры могут читать сообщения из нескольких Партиций параллельно, обеспечивая масштабируемость и высокую пропускную способность.
Консьюмеры могут быть сгруппированы в потребительские группы (consumer groups).
Каждый консьюмер в группе получает сообщения только из одной или нескольких партиций.
5. Брокеры (Brokers):
Брокер - это сервер, который обрабатывает хранение и репликацию сообщений. Он выступает в качестве посредника между Продюсерами и Консьюмерами, получая сообщения от Продюсеров, сохраняя их на диске и делая их доступными для потребления Консьюмерами. Брокер отвечают за управление Топиками, Партициями и Репликацией в Kafka-кластере.
Брокеры формируют кластер Kafka - это группа взаимосвязанных брокеров Kafka, которые работают вместе для управления потоками данных, входящих и выходящих из системы Kafka.

6. ZooKeeper:
Зукипер - это централизованный сервис, используемый Apache Kafka для поддержки конфигурационной информации, обеспечения распределенной синхронизации и обработки выборов Лидера. Он отслеживает состояние Брокеров, Топиков, Партиций и Групп консьюмеров.
Зукипер обеспечивает надежность и согласованность путем поддержания иерархической структуры узлов, называемых znode.
Современные версии Kafka (после 3.0) могут работать без ZooKeeper с использованием Raft consensus protocol.

Ключевые концепции Apache Kafka:
1. Параллелизм в партициях
Чтобы гарантировать порядок чтения сообщений из партиции, Kafka дает доступ к партиции только одному консюмеру (из группы консюмеров). Если партиция получает сообщения A, F и K, консюмер читает их в том же порядке: A, F и K. Это важно, ведь порядок потребления сообщений на уровне топика не гарантирован, если у вас несколько партиций.
Если консюмеров будет больше, параллелизм не увеличится. Нужно больше партиций. Чтобы два консюмера параллельно считывали данные из топика, нужно создать две партиции — по одной на каждого. Партиции в одном топике могут находиться в разных брокерах, поэтому два консюмера топика могут считывать данные из двух разных брокеров.

2. Репликация
Репликация в Kafka работает на основе принципа лидера и последователя. Для каждой партиции в топике определена одна реплика как лидер (leader replica) и одна или несколько реплик-последователей (follower replicas).
Лидер отвечает за запись и чтение данных, а последователи служат для резервного копирования данных. Если лидер выходит из строя, одна из реплик-последователей автоматически выбирается в качестве нового лидера.
Когда данные публикуются в топик, они сначала записываются на лидере. Затем лидер передает данные своим последователям в асинхронном режиме.
Это обеспечивает высокую производительность, поскольку производители и потребители работают с лидером, и данные реплицируются в фоновом режиме.

Как работает Kafka?
1. Продюсер отправляет сообщение в топик Kafka.
2. Сообщение добавляется в определенную партицию топика.
3. Kafka хранит сообщения в партициях на дисках брокеров.
4. Консьюмер подписывается на топик (или его партицию) и начинает читать сообщения.
5. Kafka отслеживает позицию консьюмера в каждой партиции, чтобы обеспечить надежную доставку сообщений.
6. Сообщения могут сохраняться в течение заданного периода времени или до определенного размера, даже если их уже прочитали консьюмеры.
Преимущества Apache Kafka:
Масштабируемость: Kafka легко масштабируется, позволяя обрабатывать огромные объемы данных. Можно добавлять новые брокеры для увеличения пропускной способности.
Отказоустойчивость: Репликация данных между брокерами обеспечивает отказоустойчивость системы. Даже если один или несколько брокеров выйдут из строя, данные остаются доступными.
Производительность: Kafka способна обрабатывать миллионы сообщений в секунду с минимальными задержками.
Надежность: Kafka гарантирует доставку сообщений хотя бы один раз. Это означает, что сообщение не будет потеряно, даже если произойдет сбой.
Гибкость: Kafka поддерживает различные типы данных и интеграции с разными системами.
Широкое распространение: Kafka – это популярная технология с большим сообществом и множеством ресурсов.
Основные отличия между Kafka и RabbitMQ:
Модель работы: Kafka основан на модели публикации-подписки, где сообщения хранятся в логах до тех пор, пока они не будут прочитаны, тогда как RabbitMQ использует модель очередей, где сообщения удаляются после обработки.
Производительность: Kafka способен обрабатывать большие объемы данных и поддерживает более высокую пропускную способность благодаря своей архитектуре. RabbitMQ подходит для меньших объемов сообщений и запросов.
Хранение сообщений: в Kafka сообщения могут сохраняться на длительный срок, что позволяет повторно их читать. В RabbitMQ сообщения, как правило, удаляются после обработки.
Защита от потерь: Kafka обеспечивает стойкость данных благодаря репликации и хранению. RabbitMQ также поддерживает подтверждение сообщений, но может быть менее устойчив в распределенных системах.
Консьюмер: в Kafka несколько потребителей могут обрабатывать сообщения из одной темы параллельно, в RabbitMQ каждый потребитель обрабатывает сообщения из своей очереди.
Направления использования Apache Kafka:
Потоковая аналитика: Обработка и анализ данных в режиме реального времени (например, клики на веб-сайте, транзакции).
Конвейеры данных: Создание надежных и масштабируемых конвейеров для перемещения данных между разными системами.
Логирование: Централизованное логирование и мониторинг приложений.
Системы обмена сообщениями: Построение асинхронных систем для обмена данными между микросервисами.
Internet of Things (Интернет вещей): Сбор и обработка данных от сенсоров и устройств.
Заключение:
Apache Kafka – это мощный инструмент для построения современных потоковых систем. Его масштабируемость, отказоустойчивость и производительность делают его идеальным решением для обработки данных в реальном времени. Независимо от того, создаете ли вы систему потоковой аналитики, конвейер данных или систему обмена сообщениями, Kafka может стать надежной основой для вашего решения.
noi4eg
Простите, а где хоть слово про тестирование в статье? Теоритическое устройство как как будто и на Википедии прочитать можно