Что такое Kafkа?

Катаев Денис

tinkoff.ru

Apache Kafka

Кто работал с Kafka?

А че не RabbitMQ?

О чем это все?

Это все о очередях и событиях!

Кажется все просто

 Зачем нужны топики если так норм?

Компромисс

  • Надежность
  • Скорость
  • Порядок
  • Статистика
  • ...
  • PROFIT!!!

Обычная очередь

Redis blocking list

Забрали и сдохли?

Что если обработчик получил SIGKILL 

blocked list x2

И маленькая лошадка

🐎 возвращает "зависшие" сообщения обратно

Прочитал — съел

А если мы хотим обработать дважды?

Обработали — забыли

После успешной обработки сообщение не вернуть

Плюсы

  • Просто
  • Работает
  • Даже retry есть!
  • Заявка на успех 👍

Минусы

  • Нужен лишний процесс 🐴
  • Если много читателей?
  • Каждое сообщение обработать N+ раз?
  • А если очередь выросла?

Pub/Sub

Подписка на каналы

Выстрелил и забыл

Нет никакой истории

А сообщение прочитали?

Есть только количество каналов в которые доставили

Пропущенные сообщения

Приболел и пропустил лекцию — твои проблемы

Плюсы

  • Просто
  • Работает
  • Много читателей 👍

Минусы

  • Нет гарантий
  • Нет истории
  • "Прогулы"
  • Длинная очередь?

Kafka topic

История

про книгу

Добавляем сообщение в topic

Producer

Производитель

Особенности

  • Можно добавить ограничение топика по длине
  • Можно указать ключ

Consumer

Потребитель

Порядок сообщений

Чтение независимо

И воспроизводимо!

 

Запоминай где остановился и радуйся жизни

Сообщения не удаляются

По крайней мере сами, но можно указать retention

Пишем - читаем

Что еще для счастья надо?

Stateful

Consumer

Надежная обработка

Обработать одно сообщение только раз

Consumer group

Группа потребителей

Они делят поток между собой

Поток равномерно делится

А как же порядок сообщений?

Topic partitions

Основная хитрость

По умолчанию одна partition

Несколько partition

Зачем это надо?

Кол-во partition ограничивает кол-во consumer'ов

Кол-во partition ограничивает кол-во consumer'ов

 Acknowledgment

Явное подтверждение

Возвращение туда где остановились 

Подтверждения

Сколько раз делали "заходов" на это сообщение

Какие сообщения в работе у других

Несколько групп потребителей

Каждая для своей цели

Когда надо использовать Kafkа

Когда нужна надежность обработки

Когда важен порядок сообщений

Когда мы хотим пропускать сообщения явно

Большое количество читателей

Длинная очередь

Пишут быстрей чем читают

- или -

Читаем медленней чем пишут

Когда не надо?

  • realtime обработка
  • "выполни задачу во столько то"

Примеры

Серьезный чат

Чат с порядком сообщений

Шина обмена

Журнал операций

Ручная репликация

Приколы

Kafka это кластер

  • Это сложно
  • Это медленно
  • Зато надежно
  • Масштабируется на запись
  • Остановка во время rebalance
  • Особенность с количеством consumer'ов в группе
  • Куча настроек потому что КОМБАЙН

Kafka

это странные либы

Kafka

DEBUG с бубном

Что делать если что-то не работает?

Спс за внимание

Вопросы?

 

 

@kataev

denis.a.kataev@gmail.com