Your AI powered learning assistant

Apacha Kafka для автотестов | Java QA Automation

Начало

00:00:00

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

Что такое Kafka и области применений

00:00:36

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

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

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

Пример Kafka в компаниях

00:05:15

Обработка данных в режиме реального времени с помощью Kafka Такие компании, как Netflix, Яндекс Такси и LinkedIn, используют Kafka для обработки данных в режиме реального времени. Например, при использовании приложения службы такси для расчета тарифов и маршрутов в зависимости от условий дорожного движения, Kafka эффективно объединяет информацию из различных источников. Он обрабатывает несколько вариантов маршрута одновременно, чтобы определить оптимальный маршрут и стоимость проезда, фильтруя события в очередях.

Персонализированные Рекомендации На Основе Анализа В Режиме Реального Времени Netflix использует аналогичную технологию для улучшения пользовательского опыта за счет персонализированных рекомендаций, основанных на привычках просмотра. Анализируя то, что пользователи смотрят в режиме реального времени, как "Игру престолов", Netflix автоматически генерирует предложения по соответствующему контенту. Эта система в значительной степени опирается на анализ трафика и поведения пользователей, чему способствуют возможности Kafka.

Обзор терминов

00:07:28

Понимание взаимодействия микросервисов: производители, потребители, брокеры В микросервисах используются такие ключевые термины, как производитель, потребитель и брокер. Такой брокер, как Kafka, облегчает обработку сообщений, позволяя настраивать темы для обмена данными. Zookeeper - это модуль, который управляет состоянием и конфигурациями Kafka, обеспечивая при этом его работоспособность.

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

Флоу проекта

00:09:37

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

Kafka Cluster

00:10:55

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

Создание кластера Kafka Инициализация включает в себя настройку Zookeeper, за которой следуют настройки брокера и реестра схем. Различные методы позволяют взаимодействовать с кластерами Kafka, такие как получение списков брокеров или создание разделов с определенными разделами и настройками репликации.

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

Producer тест

00:17:00

Понимание Kafka Producers: форматы сообщений Разработчики Kafka взаимодействуют с темами, отправляя сообщения, которые могут быть в разных форматах, таких как Simple или Avro. Simple producer отправляет обычные сообщения, в то время как Avro producer требует дополнительных библиотек для преобразования данных в определенный формат. Каждое сообщение состоит из пар ключ-значение и необязательных параметров, таких как временная метка и журналы.

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

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

Проверка доставки Сообщений с помощью Метаданных После отправки сообщений с помощью таких методов, как Send(), важно проверить доставку, используя метаданные, такие как смещения и временные метки, предоставляемые системой ведения журнала Kafka. Если после отправки сообщение остается пустым, это указывает на сбой в доставке этого конкретного сообщения - это служит важной проверкой в процессе тестирования с участием пользователей, которые извлекают эти сообщения из разделов.

Consumer тест

00:23:33

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

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

Avro схема и генирация объекта

00:27:16

Схемы Avro - это, по сути, структурированные объекты, такие как подписчик с такими полями, как ID (строка), возраст (int) и логическое значение, указывающее статус автоматизации. Эти схемы могут быть сгенерированы с помощью специальных плагинов, которые облегчают создание Kafka producers, состоящих из пар ключ-значение, где ключом является строка, а значением - объект Avro. Процесс генерации основан на моделях схем, которые должны оставаться согласованными; любые изменения вручную могут нарушить функциональность. Чтобы эффективно генерировать эти схемы, необходимо установить соответствующие плагины для Gradle и создать необходимые конфигурации в определенных папках.

Avro тесты

00:29:01

Создание и отправка объектов Avro в Kafka Avro позволяет создавать объекты с помощью конструктора, обеспечивая заполнение данных такими атрибутами, как валюта и возраст. Как только объект создан, его можно отправить в Kafka в виде записи, используя пары ключ-значение. Процесс остается неизменным независимо от того, отправляются ли строки или объекты Avro; и то, и другое предполагает создание производителей, которые отправляют сообщения на основе определенных схем.

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

Kafka Streams Avro тесты

00:32:00

Обработка данных в режиме реального времени с помощью потоков Kafka Kafka Streams обрабатывает данные в режиме реального времени, используя схемы Avro для сериализации. Входящие события преобразуются в формат JSON с определенными полями, такими как ID, имя и возраст. Преобразование включает в себя создание топологии, которая определяет, как обрабатываются входные данные для получения модифицированного вывода.

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

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

Kafka Streams с хранилищем данных

00:38:45

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

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

Kafka Stream обычные тесты с топологией

00:41:34

Упрощение обработки данных с помощью Kafka Kafka Streams позволяет обрабатывать потоковые данные без использования схемы Avro. Вместо использования объектов программа отправляет строковые сообщения напрямую через разделы ввода и вывода. Тестовый драйвер инициализирует топологию, которая преобразует каждую запись в формат верхнего регистра при отслеживании записей, отправляемых в поток, гарантируя, что обрабатываются только два события, несмотря на отправку трех.

Подсчет анаграмм: задачи тестирования Интересный тест подсчитывает анаграммы в словах, взаимодействуя с системами хранения данных для извлечения данных. Процесс включает в себя создание фабрики из пользователей и сортировку значений на основе таких ключей, как "Magic" или "Sigma". Когда строки поступают в систему, они фильтруются в алфавитном порядке; однако расхождения между ожидаемыми и фактическими результатами указывают на потенциальные проблемы при обработке записей во время тестирования.

e2e тест с Testcontainers

00:45:50

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

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

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

e2e тест с независимыми контейнерами

00:50:35

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

микросервис http producer под капотом

00:52:19

Архитектура микросервисов производителя HTTP Разработчик HTTP работает в рамках архитектуры микросервисов, используя модуль конвейера передачи данных и собственную базу данных. Сообщения отправляются разработчику, который перенаправляет их в Kafka для обработки между сервисами. Процесс преобразования включает преобразование сообщений в формат Avro с использованием определенных моделей и API.

Настройка потока сообщений с помощью Kafka Параметры конфигурации определяют, как сообщения передаются по системе, а приложения REST управляют взаимодействиями локально или удаленно на основе параметров, предоставляемых во время выполнения. Такие инструменты, как Dropwizard, могут облегчить тестирование, а интеграция с Kafka producers позволяет гибко обрабатывать события как из локального, так и из удаленного кластеров.

тесты на микросервис

00:56:03

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

микросервис http materializer под капотом

00:57:30

HTTP-материализатор в архитектуре микросервисов преобразует сообщения и сохраняет их в базе данных или пересылает в другое место. Он использует модель Avro для обработки сообщений, включающую класс под названием "message transformer", который инициализирует переменные и разделы, необходимые для обработки данных. Система разработана с учетом принципов SOLID, позволяющих в будущем использовать различные варианты реализации, включая два метода сохранения и извлечения сообщений из базы данных — один из них использует оперативную память, в которой сообщения временно сохраняются, прежде чем быть потерянными при закрытии приложения. Кроме того, он поддерживает RESTful-связь через HTTP-клиенты для отправки данных по указанным адресам, сохраняя при этом конфигурации, которые определяют, должны ли данные сохраняться в памяти или в постоянном хранилище.

тесты с wiremock

00:59:30

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

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

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

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