А как 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

Стримы в мэйнстриме

  • 994