Привет, Хабр!
Меня зовут Дмитрий Быстриков, я Technical Product Owner в команде Managed Service for Apache Kafka в #CloudMTS. Сегодня я расскажу, что умеет наша Kafka и чему научится в ближайшее время. Для тех, кто дочитает до конца, я приготовил несколько советов от наших инженеров по настройке кластера. Если интересно, прошу под кат.
Что такое Apache Kafka?
Apache Kafka — распределенный брокер сообщений. Это современный инструмент, который занял один из самых широких стульев в области передачи информации и построения надежных ИТ-систем. Горизонтальное масштабирование, отказоустойчивость, широкая область применения — все это у него есть.
Не буду подробно закапываться в матчасть. Для тех, кто не знаком с Apache Kafka, рекомендую заглянуть сюда, сюда и сюда.
Кто делал сервис
Запуск нового продукта — это всегда чистый лист. Каким он должен быть? Что уметь? А кто его делать будет?
С одной стороны, создаваемый нами сервис должен делать все, что умеет Apache Kafka: управлять брокерами, топиками, пользователями, конфигурировать уже запущенный кластер. При этом пользователю не придется заботиться о том, где этот кластер работает и кто будет обслуживать его инфраструктуру. С другой стороны, хотелось сделать инструмент, который будет помогать и продвинутым пользователям.
Такой подход определил критерии, по которым мы выбирали людей в команду. В нее вошли те, у кого был реальный боевой опыт с высоконагруженными кластерами и такими процессами, как:
- Обновление версии Kafka кластера из десятков нод с версии 1.х до 2.х без даунтайма.
- Организация гибкого потока данных, который пропускает через себя огромный объем информации.
- Создание и эксплуатация кластера Kafka как Multi DC и как геораспределенного кластера с использованием [MirrorMaker 2.0].
Для кого продукт
Все хотят использовать лучшие практики и строить прекрасные продукты. Мы понимаем, что компаниям найти готовых специалистов, работающих с Apache Kafka, сложно и дорого, а учить с нуля — еще и долго. Поэтому мы построили решение, которое будет стабильно работать в неопытных руках начинающего инженера и не будет вставлять палки в колеса опытного спеца-экспериментатора.
Вот какие возможности доступны в сервисе прямо сейчас:
- Выбор конфигурации кластера. 1 брокер для тестирования или отказоустойчивый кластер из 3, 4, 5, 6, 7 брокеров для продакшена. Количество Zookeeper подбирается автоматически.
- Выбор ЦОДа. Сейчас это Москва или Владивосток, но мы работаем над расширением этого списка и добавим новые площадки в европейской части России.
- Настройка топиков. Для начинающих пользователей мы сделали готовую конфигурацию, с которой кластер будет работать. Эта конфигурация универсальна и подойдет для большинства задач, решаемых с помощью Apache Kafka.
Для опытных есть возможность изменять настройки: количество разделов, фактор репликации, максимальный размер сообщения и прочее. В перспективе появится изменение фактора репликации топика через cruise-control, а не инструментами Kafka.
- Управление ACL. Мы полностью покрыли всю функциональность Kafka в части настройки доступов пользователей к топикам.
- Высокая производительность. Мы предварительно провели нагрузочное тестирование и оставили на выбор только те конфигурации брокеров по СPU, RAM, которые хорошо себя зарекомендовали. На тестах получили 1 миллион RPS на запись (7.5 gbit/s) и думаем, что это не предел.
- Изменение характеристик брокера. Не всегда для увеличения производительности необходимо добавлять новые брокеры. Иногда можно улучшить характеристики текущих (CPU, RAM). Изменение ресурсов происходит без даунтайма для отказоустойчивых (от 3 брокеров) конфигураций кластера.
- Алертинг. Пользователю доступен мониторинг брокеров и информация о недореплицированности топиков.
А вот что планируем сделать в ближайшее время:
- Изменение размера дисков на брокерах. Не пересоздавать же кластер, если закончилось место на брокерах?
- Управление консьюмер-группами. Сейчас они создаются автоматически, но скоро появится инструмент для управления ими.
- Возможность увеличивать количество брокеров. Если не хватает производительности текущего кластера, пользователь сможет добавлять в кластер дополнительные брокеры без даунтайма для отказоустойчивых конфигураций и балансировать распределение партиций.
- Пакетный экспорт/импорт топиков для удобного и безошибочного конфигурирования кластеров.
- Возможность использовать сразу несколько площадок в разных городах (Multi DC) и построение геораспределенных кластеров тоже есть в планах. Добавьте сюда одно из самых больших сетевых покрытий в стране и высокую скорость сетевых магистралей — будет вкусно.
Тем, кто дочитал до этого момента, в знак благодарности несколько практических советов от наших экспертов по настройке и управлению кластером Apache Kafka:
- Следите за общим количеством партиций на каждом брокере. При нескольких тысячах партиций перезапуск брокера может занять больше времени, чем вы предполагаете.
- Продумайте общие правила именования топиков для всех команд, которые буду использовать кластер Kafka. Например: env.project.servicename.eventname или prod.kaas.billing.clicks. В дальнейшем это позволит легко ориентироваться в принадлежности топика и его критичности, облегчит выборки метрик для построения нужных дашбордов. И самое важное: это помогает упростить управление правами доступа с помощью Prefixed ACLs.
- Не используйте схожие названия топиков. Если вы создали топик с именем servicename.events и топик с именем servicename_events, а потом захотите удалить топик по имени servicename.event — Kafka удалит оба топика.
- При создании топика обязательно указывайте конкретные цифры для retention.bytes и retention.ms. Это спасет вас от неприятной ситуации, когда топик внезапно «отъел» все дисковое пространство на брокерах. Обычно Kafka после такого «ложится», и, чтобы завести кластер снова, одной команды `systemctl start kafka.service` не хватит.
- Используйте троттлинг при балансировке партиции топика. Если вы балансируете партиции топика по брокерам без троттлинга, это может привести к сильной деградации производительности всего кластера.
На этом все, ребята, спасибо за внимание! Если у вас возникли пожелания по продукту, пишите в комментарии.
Протестировать бесплатно Managed Service for Apache Kafka можно уже сейчас. Для этого подключите сервис на сайте #CloudMTS и напишите мне на почту.