Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Манная Кафка и микросервисы

DevOps Moscow
February 27, 2019

Манная Кафка и микросервисы

DevOps Moscow meetup: *aaS (as a service), 27-02-2019
Анатолий Солдатов (Авито)

Я расскажу про то, почему мы в Авито выбрали Kafka в качестве message broker, и сделаю небольшое overview Kafka, как технологии. Также обсудим, для чего мы решили применять подход Kafka as a service и какие плюсы от него можно получить.
- Зачем нужен message broker
- Почему Kafka, а не что-то еще
- Kafka overview
- Kafka as a service

DevOps Moscow

February 27, 2019
Tweet

More Decks by DevOps Moscow

Other Decks in Technology

Transcript

  1. Шина данных • Независимость сервисов • Асинхронное взаимодействие • Event

    driven архитектура • Потоки событий можно собирать в DWH 4
  2. Требования к шине (1/3) • At least once delivery •

    Высокая пропускная способность (throughput) • Низкая задержка (latency) 5
  3. Требования к шине (3/3) • Возможность хранить полные данные •

    Возможность проиграть данные на глубину три дня • Подписка на данные 7
  4. Что если (1/2) • Что если медленная запись/чтение? • Что

    если упадет сеть? • Что если упадет брокер? • Что если упадет зукипер? 15
  5. Что если (2/2) • 1KB сообщения • 3 брокера, 3

    zookeeper • 1 ДЦ • 15K SAS диски • ±300 GB Mem • 10GBit Net • acks=all, replication factor=3, MIN ISR=2 16
  6. Выводы (1/5) • Запись более 1M events/sec • Чтение более

    1M events/sec • Zookeeper’s лучше отдельно • При падении нод важно retries > 0 17
  7. Выводы (2/5) • Много памяти - хорошо • CPU -

    не очень важно • Сеть важна 18
  8. Выводы (3/5) • Падать по месту неприятно • Читать с

    большим лагом неприятно • Нужно много дескрипторов 19
  9. Выводы (4/5) • Падение 1 брокера не страшно • Падение

    2 брокеров - доступ только на чтение 20
  10. Выводы (5/5) • Падение 1 зукипера не страшно • Падение

    2 зукиперов (в кластере из 3) - downtime 21
  11. Проблемы эксплуатации (1/3) • Некорректный retention топиков (больше, чем место

    на диске) • Автоматически создавать топики опасно • Создавать топики руками для 300+ сервисов неэффективно • За топиками надо следить 22
  12. Проблемы эксплуатации (2/3) • Несовместимые версии producer/consumer и Kafka •

    Разные библиотеки для producer/consumer с разными багами • Несовместимые форматы сериализации данных • Некорректные настройки producer/consumer • Миграции данных между кластерами 23
  13. Проблемы эксплуатации (3/3) • Ввод новых элементов экосистемы (например, как

    заставить все микросервисы начать использовать schema registry) • Роутинг топиков для разных целей на разные кластеры (тестовый, инфраструктурный, бизнесовый и т.д.) • Как добиться plug&play и не дублировать код 24
  14. Kafka как сервис: архитектура (1/2) • Серверная часть живет в

    Kubernetes • Серверная часть на go (sarama) • Клиентская часть - максимально простые библиотеки 25
  15. Kafka как сервис: архитектура (2/2) • Push модель • Коннекты

    1 в 1 • Есть ack/nack режим • Есть батчи • Есть масштабирование consumer в группах 26
  16. Kafka как сервис (1/4) • Серверная часть на go •

    Клиентская часть для go/php • Скоро клиентская часть для python • Не ходим в Kafka напрямую, только через API 27
  17. Kafka как сервис (2/4) • Масштабирование на сервере (пояснить, про

    что вообще речь) • Контроль аномалий на сервере • Контроль за ресурсами на сервере 28
  18. Kafka как сервис (3/4) • Простая интеграция • Управление consumer/producer

    на сервере • Контроль за топиками на сервере 29
  19. Kafka как сервис (4/4) • Конфигурация consumer/producer заранее задана •

    Все компоненты совместимы между собой • Единый подход к стримингу из баз данных (свои коннекторы) • “Плохие” consumer/producer тротлятся или мигрируют в отдельный кластер (настройка квот) 30
  20. To be continued • Развитие Kafka as a service •

    Staging Kafka в Kubernetes • Streams & KSQL • Connectors • Automatisation 31
  21. Сложный путь • Не все понимают, что мы не гарантируем

    порядок (и что за порядок такой вообще); • Битва при registry – успели огрести на невалидных данных из-за отсутствия валидации схем; 32
  22. Сложный путь • А не теряет ли шина данные; А

    как нам интегрировать ее с экосистемой Kafka; • Kafka из будущего или проблемы с failover; • В Kafka мире это уже сделано! А когда появится у нас в шине? 33