Что такое 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
Кафкаем
By Denis Kataev
Кафкаем
- 781