Та самая Кафка (Apache Kafka)


#1

очередной раз меня спросили что такое 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 миллион долларов