Что пишут в блогах

Подписаться

Что пишут в блогах (EN)

Разделы портала

Онлайн-тренинги

.
Тестируя Kafka: как я учился
19.02.2025 00:00

Автор: Джулиан Харти (Julian Harty)
Оригинал статьи
Перевод: Ольга Алифанова

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

Эта статья описывает эти темы. Я не буду детально вдаваться в них (возможно, напишу про них позже) – вместо этого сконцентрируюсь на том, как я учился в ходе этого проекта.

  • Kafka: это, вероятно, очевидная тема, но мне нужно было изучить конкретные особенности Kafka, связанные с ее надежностью, устойчивостью и масштабируемостью, а также найти способы отслеживать ее поведение. Я также научился писать клиенты Kafka, внедрять и настраивать безопасность SASL_SSL, и настраивать саму Kafka.
  • VMWare: технологии VMWare Enterprise будут использоваться для некоторых сред выполнения. Я много лет не работал с VMWare и решил изучить, как настраивать, отслеживать и запускать ESXi на ряде небольших, но достаточно репрезентативных серверов. Это позволило мне работать в клиентском окружении, а также независимо и как можно раньше прогонять дополнительные тесты, а не ждать, пока нужные окружения и виртуальные машины станут доступными в любой момент (корпорации движутся очень медленно – это связано с их внутренними процессами и организационной структурой).
  • Как тестировать производительность Kafka: у нас был на этот счет ряд идей, и мы обнаружили, что в Kafka встроена утилита «тестирования производительности». Нам нужно было разобраться, как она генерирует сообщения и измеряет производительность. К тому же для нужд проекта это, возможно, не идеальный вариант.
  • Способы снизить производительность системы и выявить системные проблемы, которые могут повлиять на пользу Kafka для проекта. Отсоединение сетевых кабелей, убийство процессов – все это легко выполнимо при прямом доступе к машинам и тест-окружению. Однако нам нужно было воссоздать более сложные условия отказа, а также провоцировать проблемы удаленно.

Об этих вопросах я знал с самого начала. Потом появились дополнительные, включая:

  • Создание тест-окружений в AWS. Это включало в себя создание межрегионального пиринга между VPC, создание кластеров Kafka и Zookeeper, и множество копий поставщиков и потребителей нагрузки для выполнения различных тестов нагрузки и производительности. Существуют различные варианты «быстрого запуска», включая вариант деплоя кластеров Kafka, но нам пришлось в итоге создавать свои собственные кластеры, хост-бастионы и VPC. Скрипты быстрого запуска часто падали, а окружение затем требовалось очищать.
  • Jepsen и другие инструменты хаотической генерации. Jepsen тестировал Kafka несколько крупных версий назад, инструменты доступны, у них открытый исходный код, но подойдут ли они нашему окружению и набору навыков?
  • Утилиты Linux. Мы широко их применяли для работы с окружениями и автоматизированными тестами. Схожим образом мы писали служебные скрипты для отслеживания, очистки и перезагрузки кластеров и окружений после некоторых нагрузочных тестов с большими объемами.
  • Нюансы и эффекты от автоматического создания топиков.
  • KIP (предложения об улучшении Kafka).
  • Отчетность и анализ: у клиента были специфические требования к отчетам и их презентации. Некоторые инструменты не давали достаточно детальных результатов – скажем, говорили только об усредненных значениях, и нам нужно было настроить инструменты так, чтобы доверять их показаниям.

Примечание: ниже все сгруппировано по теме или контексту, а не хронологически.

Как я изучал то, что нужно для тестирования Kafka

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

Большая часть обучения шла через практику – мы с коллегами пытались что-то сделать в различных тест-окружениях и учились по ходу дела, наблюдая и экспериментируя (я упомяну о некоторых тест-окружениях и, возможно, расскажу о них подробнее в следующих статьях).

Я открыл для себя и впервые оценил размах, глубину и пользу платных онлайн-курсов. Они не всегда так же хороши, как коммерческие обучающие курсы с инструкторами, доступными в любой момент, но их разнообразие, цена и доступность стали открытием для меня – стоимость всех купленных мной курсов была менее 65 евро (90 долларов).

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

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

Udemy

Я впервые воспользовался курсами udemy несколько лет назад, пытаясь изучить ряд технологий. Тогда я не извлек особой пользы, но частые скидки сделали цены достаточно низкими, чтобы меня это не огорчало. В этот раз все было совсем не так – курсы были очень полезными и релевантными. Богатство, количество и глубина доступных курсов потрясает, и там достаточно качественных курсов по релевантным темам (особенно по Kafka, AWS, и в меньшем объеме – VMWare), чтобы быстро, на практике прогрессировать в изучении этих ключевых тем.

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

Я платил за курс, если думал, что извлеку из него достаточно пользы. Стоимость крайне низка по сравнению с потенциальной ценностью полученных знаний.

Иногда даже плохо сделанные курсы помогали мне понять, какие концепции легко спутать, какие плохо поняты. Если автор путался сам, вероятно, я запутаюсь тоже. Больше всего пользы я получил от этих курсов:

У первых трех один и тот же автор, Штефан Маарек (Stephane Maarek). Он был особенно интересным. Он также с удовольствием помогал и отвечал на мои вопросы.

Опубликованные статьи и посты в блогах

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

Я использовал инструмент Zotero для управления своими заметками и ссылками (я пользовался им несколько лет для диссертации) – там записано больше сотни статей. Я прочитал куда больше в ходе работы над задачей – возможно, тысячу.

Академические исследования

Лучшая найденная мной статья сравнивает Kafka и RabbitMQ в условиях промышленного исследования. Доступно несколько версий. Одобренная к публикации статья находится по ссылке https://doi.org/10.1145/3093742.3093908, однако за доступ, возможно, придется заплатить, если у вас нет подписки. Последняя версия - https://arxiv.org/abs/1709.00333v1, ее можно свободно загрузить и прочитать.

Тест-окружения

Буду краток, так как собираюсь подробно написать о тест-окружениях позже. Наши тест-окружения варьировали: кластеры Raspberry Pi (скопированные при помощи MirrorMaker), контейнеры Docker, дешевые физические серверы на ESXi, несколько AWS-окружений. На Docker и AWS часто ссылаются – ряд курсов, которые я упомянул выше, использует AWS в качестве машины.

Обсудить в форуме