А как Kafkа'ть?
Разбираемся что это такое?
Катаев Денис
tinkoff.ru
Apache Kafka
Кто работал с Kafka?
А че не RabbitMQ?
О чем это все?
Это все о очередях и событиях!
Кажется все просто
Зачем нужны топики если так норм?
Компромисс
- Надежность
- Скорость
- Порядок
- Статистика
- ...
- PROFIT!!!
Blocking list

Забрали и сдохли?
Что если обработчик получил SIGKILL

blocked list x2

И маленькая лошадка
🐎 возвращает "зависшие" сообщения обратно
Прочитал — съел
А если мы хотим обработать дважды?

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


Плюсы
- Просто
- Работает
- Даже retry есть!
- Заявка на успех 👍
Минусы
- Нужен лишний процесс 🐴
- Если много читателей?
- Каждое сообщение обработать N+ раз?
- А если очередь выросла?
Pub/Sub
Подписка на каналы

Получают все!
Выстрелил и забыл
Нет никакой истории

А сообщение прочитали?
Есть только количество каналов в которые доставили
Пропущенные сообщения
Приболел и пропустил лекцию — твои проблемы

Плюсы
- Просто
- Работает
- Много читателей 👍
Минусы
- Нет гарантий
- Нет истории
- "Прогулы"
- Длинная очередь?
Topic
История
про книгу


У каждого сообщения есть порядковый идентификатор
Producer
Производитель
Особенности
- Можно добавить ограничение топика по длине
- Можно указать ключ

Consumer
Потребитель
Порядок сообщений
Чтение независимо
И воспроизводимо!
Запоминай где остановился и радуйся жизни
Сообщения не удаляются
По крайней мере сами
Особенности
- Сообщение это ключ и значение
- Значение это ассоциативный массив
- Можно читать сразу несколько стримов одной командой
- и многое другое
Пишем - читаем
Что еще надо?
Stateful
Consumer
Consumer group
Группа потребителей
Они делят поток между собой



А как же порядок сообщений?
Acknowledgment
Явное подтверждение
Возвращение туда где остановились

Подтверждения
Сколько раз делали "заходов" на это сообщение
Какие сообщения в работе у других

Несколько групп потребителей
Каждая для своей цели


Когда надо использовать Stream
Когда нужна надежность обработки
Когда важен порядок сообщений
Когда мы хотим пропускать сообщения явно
Большое количество читателей
Длинная очередь
Пишут быстрей чем читают
- или -
Читаем медленней чем пишут
Примеры
Серьезный чат
Чат с порядком сообщений
Шина обмена

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

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

Kafka?
это кластер
А где кластер там очень сложно
Kafka
это немного иначе
- Масштабируется на запись
- Порядок сообщений у consumer'ов внутри group
- Особенность с количеством consumer'ов в группе
Kafka

это странные либы
Kafka
Redis Stream
И библиотеки
В 2 словах
- Кластер — есть
- Все в памяти
- Сохраняет на диск
Спс за внимание
Вопросы?
@kataev
denis.a.kataev@gmail.com
Стримы в мэйнстриме
By Denis Kataev
Стримы в мэйнстриме
- 900