очередной раз меня спросили что такое kafka и чем он отличается от RabbitMQ
во первых я напомню цитату “Кролик - это умный сервер, тупой клиент, Кафка - умный клиент, тупой сервер”, казалось бы - абсурдно делать “тупой сервер”, но если прозвучало слово Абсурд, читавшие произведения Кафки могут понять что “абсурд” это к нему, он знает в нем толк.
Но если от лирики перейти к практике
Разный глоссарий
для начала отличия начинаются в глоссарии. заместо очередей, сообщений и точек обмена используются
настройки перед стартом
- изготовитель (producer)
- тема (topic)
- раздел темы (topic partion)
- потребитель (consumer)
передача данных
- партия (batch)
- журнал (log)
- поток (stream)
то есть получается для кафки можно сформулировать сценарии использования примерно следующим образом:
“Когда вам необходимо от источника производства данных передавать данные категоризированные по темам и разделам внутри, можно по мере поступления партий данных передавать их потребителю в режиме потокового обмена - это к Кафке”
большие данные
собственно отсюда становится видно различие от rabbitMQ - Кафка хочет чтобы клиент группировал сообщения в партии и гнал их на сервер в потоковом режиме. Рэббит же говорит о том, что нужно сразу в момент возникновения сообщения гнать его на сервер и никаким партионным учетом не заниматся, а если сообщение большое - его надо сжать.
крайне интересна вообще история автора Кафки и его связь с hadoop. Но это я думаю вы сами найдете информацию - я тут ссылки на ЛинкедИн давать не буду.
Потоки
собственно исходя из слова поток и журнал - становится понятно в чем отличие Кафки от rabbitMQ
обычно в месте возникновении “поведения” фиксируется “журнал поведения” и в режиме потоковой передачи передается на “тупой сервер”, чтобы потребители смогли
- восстановить цепочку поведения из журнала
- трасформировать цепочку поведения для
- проанализировать цепочку поведения и выдать поток “извлеченных уроков” как новый производитель
не скрою - такое поведение можно сделать и через rmq, но там понадобятся плагины ;-), а у Кафки это из коробки
Сценарии использования
стандартно Кафка предполагает
- Обеспечение трассировки поведения пользователя на сайте
- Потоковая обеспечение обработки метрик
- Обеспечение аггрегация журналов работы приложений
- Обеспечение обработка сырого потока данных (стрима)
- Партионно потоковая обеспечение обработки событий
- Партионно потоковая обеспечение обработки событий
Я сознательно использую слово “обеспечение” - Кафка только позволяет вам сделать это удобно, а делать придется с помощью других инструментов
для 1С
более подробно мы будем показывать что и как на нашем веселом Московском событии https://isthisdesign.org/shedule#day1 Это не реклама - просто для 1С-ника я считаю слова ничего не значат нужен код и пример куда приткнуть, поэтому нужно показать. За этим собственно событие и организовано.
Так вот как лично мы в Пуле (и лично я до Пули) использовал эту самую Кафку - а вот тут начинаются тонкости накрытые nda, поэтому попытаюсь не расскрыть никого из клиентов и бывших работодателей.
Вариант 1
Была у меня система в которой нужно было навести порядок в эргономике - и нужно было подрядчику по дизайну рассказать про сценарии использования, а я был “один”, а пользователей 900 активных.
Был вариант обойти всех пользователей и поговорить с ними, но сроки поджимали, я бы не успел.
Включил я запись действий пользователя 1С для каждого сеанса и в потоковом партионном режиме сложил все это в журнал Кафки, а затем с помощью програмки сформировал общий журнал поведения всех пользователей.
Вариант 2
Было у меня 100 систем 1С в каждой из которых происходили замеры apdex, а Женя Сосна сказал что апдекс фигня нужны квантили , а пользователей в системах было over9000. И стал я отдавать регистр сведений “ЗначениеКлючевыхОпераций” (как он там называется правильно из БСП щас не вспомню) отдельным потоком в Кафку, и нашел я программку которая умела по журналу Кафки рассчитывать значение квантилей производительности - и скажем так очень удивился результатам https://prometheus.io/docs/practices/histograms/#quantiles
Ну и т.д.
P.S. Надеюсь стало понятно, следующая тема будет про то почему я не люблю “шины” - она тут Шина = 1 миллион долларов