LINUX.ORG.RU

Какие сейчас Message Queue решения актуальны?

 ,


1

3

Нужна раздача сообщения ровно одному получателю (кто первый обратился).

Слышал про RabbitMQ, на что ещё посмотреть?

P.S. Судя по обзору гугла, есть два варианта: RabbitMQ и Kafka

Сравнения:

https://www.quora.com/What-are-the-differences-between-Apache-Kafka-and-RabbitMQ

https://dzone.com/articles/exploring-message-brokers

Дальше каждый сам выберет инструмент под задачу.

★★★★★

Последнее исправление: Norgat (всего исправлений: 1)

А что конкретно тебе нужно - передача сообщений между приложениями (условно IPC) или персистентная очередь с какими-то там гарантиямм доставки?

mashina ★★★★★
()
Ответ на: комментарий от mashina

Нужна гарантия доставки сообщения (сообщения мелкие (символов 100)).

Опционально, статус обработки (не обработано, в работе, обработано), но это можно будет и ручками прикрутить. Обработка сообщения может провалиться по разным причинам и иногда его надо будет обрабатывать заного (тут бы пригодился какой-то таймер на урове MQ).

Norgat ★★★★★
() автор топика
Ответ на: комментарий от Norgat

Нужно вынести вычисления в отдельный процесс который может упасть? Такое несложно делается на обычных пайпах. Если для поиграться, то можно посмотреть на zmq.

mashina ★★★★★
()
Ответ на: комментарий от mashina

Я знаю и использую zmq, но тут у меня будут десятки тысяч сообщений и тысячи воркеров + выч. кластер (в котором ещё и машинки могут быть разные + добавлять при необходимости).

Было бы там с десяток воркеров и пиковая загрузка очередей небольшой - без проблем бы написал на zmq, написал миксер и радовался жизни. А тут хочется, чтобы всё это как-то сейвилось и баги за меня половили бы уже.

Если придётся, то напишу. Но сначала хочу посмотреть на готовые решения, может быть что-то мне подойдёт и я не буду тратить время на создание велосипеда.

P.S. Поясню, если воркеры с потоком сообщений не справляются, то сообщения должны посейвится на диск, но не потеряться. Отследим, что кол-во сообщений растёт и добавим воркеров. Писать слой гарантировая доставки сообщений не хочется вот и всё. Поэтому и ищется, что-то более высокоуровневое чем zmq.

Norgat ★★★★★
() автор топика
Последнее исправление: Norgat (всего исправлений: 1)
Ответ на: комментарий от anonymous

Одна из первых ссылок в гугле:

Какие преимущества дает подобная архитектура? Во-первых, объем потребляемых данных определяется не брокером, а потребителем. Брокер не обладает никакой информацией насчет того, принял ли потребитель сообщение или нет. Однако для Kafka это не проблема, а преимущество: сообщение удаляется автоматически, если оно задерживается у брокера дольше определенного времени. При этом потребитель может в любой момент сделать «повторный заказ» на то или иное сообщение.

Вообще не в тему, воркеры ничерта про сообщения не знают и должны их просто получать.

Norgat ★★★★★
() автор топика
Ответ на: комментарий от Norgat

Вообще не в тему, воркеры ничерта про сообщения не знают и должны их просто получать.

Кому должны? Мама велела? Воркер должен, как минимум, три вещи: 1) получить сообщение; 2) обработать сообщение; 3) сказать брокеру, что сообщение обработано. Именно так оно в кафке и происходит, и это единственный работоспособный вариант.

anonymous
()
Ответ на: комментарий от Norgat

Я знаю и использую zmq, но тут у меня будут десятки тысяч сообщений и тысячи воркеров + выч. кластер

Это же не так много, почти что угодно наколеночное осилит такие объёмы.

если воркеры с потоком сообщений не справляются, то сообщения должны посейвится на диск, но не потеряться. Отследим, что кол-во сообщений растёт и добавим воркеров. Писать слой гарантировая доставки сообщений не хочется вот и всё. Поэтому и ищется, что-то более высокоуровневое чем zmq

Тебе мб нужен не mq, а что-то вроде mapreduce, например как в известном могильнике. Оно как раз реализует нужную логику регистрации машин, нарезку кластера между задачами и управление очередями. Внутри оно выглядит как табличка с входными данными (задачи) и реализация map операции с обработчиком таблицы.

mashina ★★★★★
()
Последнее исправление: mashina (всего исправлений: 1)
Ответ на: комментарий от mashina

Нед, гадуп сразу в пень. Он создаёт больше проблем, чем решает, и жрёт 90% ресурсов просто сам в себя.

anonymous
()
Ответ на: комментарий от mashina

Не hadoop, а Storm скорее (софт риал тайм сбор данных, hadoop это про batch processing, как и Spark).

Storm, возможно, воткнём на этапе обработки данных. Но для него нужен поток данных, который он где-то будет хранить (задачи могут генерироваться, как внутри кластера обработки, так и снаружи). Правда там зоопарк для запуска и мониторинга ещё тот (ZooKeper + Nimbus + сам Storm только запуска кластера).

И то не факт, что вообще стоит брать эту Java прослойку под кластер, тут смотреть надо, а оправдает ли она себя вообще.

Norgat ★★★★★
() автор топика
Последнее исправление: Norgat (всего исправлений: 1)
Ответ на: комментарий от Norgat

так чем плох вариант таблички в базе данных, из которой воркеры, быть может, сами могут задачи разбирать?

anonymous
()
Ответ на: комментарий от anonymous

Потому что сейчас я хочу посмотреть на MQ решения и оценить сферу их применения.

Norgat ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Лайк этому господину, а также лайк тому, который сказал «хадуп в пень». Бери кафку и не морочь голову. Но! Это ответ на твой вопрос, возможно - не решение твоей проблемы (http://xyproblem.info/).

Выглядит, как будто тебе нужно backpressure. Попробуй akka streams, должно зайти на ура. Если не хочешь, написать свою нано-реализацию будет не слишком сложно, главное - определись с проблемой.

cdshines ★★★★★
()
Ответ на: комментарий от cdshines

Я и не просил никого решать мою проблему. На то она и моя ;)

По поводу akka streams - не Java и я не увидел никаких гарантий доставки. Похоже на аналог zmq, так что меня не интересует. Как вариант для Java мира - возможно пригодиться кому-то.

Norgat ★★★★★
() автор топика

Нужна раздача сообщения ровно одному получателю (кто первый обратился).

Вполне себе будничная задача для amqp. Если не нравится кроль то есть еще qpid.

redixin ★★★★
()
Ответ на: комментарий от redixin

Ну так я и не говорю, что там что-то мега мега. Есть какие-то советы какую из реализаций брать? М.б. был опыт применения и были собраны косяки?

За qpid спасибо, посмотрю что и как он умеет.

Norgat ★★★★★
() автор топика
Ответ на: комментарий от Norgat

Опционально, статус обработки (не обработано, в работе, обрабо тано)

Кроль умеет вернуть сообщение обратно в очередь если консумер не смог обработать. Ну тоесть он сообщение забирает из очереди не окончательно, и оно возвращается туда если не было явного подтверждения (или коммита если угодно)

redixin ★★★★
()
Ответ на: комментарий от redixin

Кстати, а он его куда подсунет? В конец или в начало очереди?

Norgat ★★★★★
() автор топика
Ответ на: комментарий от cdshines

Если не хочешь, написать свою нано-реализацию будет не слишком сложно

С требованиями ТСа на это спокойно может уйти около года работы небольшой команды. Хотя часто в подобных ситуациях это вполне разумный выбор.

mashina ★★★★★
()
Ответ на: комментарий от Norgat

Я и не просил никого решать мою проблему. На то она и моя ;)

Так а нахера тогда задавать вопросы, полезность ответов на которые стремится к 0?

cdshines ★★★★★
()
Ответ на: комментарий от cdshines

http://doc.akka.io/docs/akka/current/java/stream/stream-quickstart.html

И зачем ты на ответ, что не Java кидаешь ссылку на Java код? Не Java == не JVM, разве не очевидно?

Norgat ★★★★★
() автор топика
Последнее исправление: Norgat (всего исправлений: 1)
Ответ на: комментарий от Norgat

Ну вот если бы ты не ерепенился, а проанализировал проблему, можно было бы сойтись в оптимальном решении. А так - ну ладно, дело твое.

cdshines ★★★★★
()
Ответ на: комментарий от cdshines

Сходиться мы будем сами, протестировав всё. По поводу Scala - сам исправился. Но вопроса зачем мне гайд по Java, если у меня там не Java это не отменяет.

Norgat ★★★★★
() автор топика
Ответ на: комментарий от Norgat

А, я понял «Не джава» как «не джава, поэтому не подходит», а не «у нас не джава». Ну бери тогда кафку.

Кстати, обычно на это жалуются - тебе придется подтверждать оффсеты считанных сообщений/батчей по факту успешной обработки сообщений, так что нужно будет сделать клиентский слой абстракции. Как правило, с первого раза это не выходит и код общения с кафкой размазывается по всему пути процессинга сообщений (либо просто подтверждаются оффсеты прочитанных, но не обработанных сообщений, что тоже не очень); так что обрати на это внимание.

cdshines ★★★★★
()
Ответ на: комментарий от cdshines

Про offset'ы - уже почитал, не понравилось, усложнит логику клиентов. Надо будет Hello world'ы писать и смотреть что и как, потому что мне критична гарантия обработки сообщения (гарантия скорости на втором месте).

В этом плане RabbitMQ сильно проще в настройке на первый взгляд. durable для гарантии доставки + выставление максимума обрабатываемых сообщений в 1 (для балансировки по реальной производительности клиентов). И возвращение сообщения в очередь при отваливании клиента (можно просто позволить клиенту упасть и перезапустить его процесс, что вполне допустимо в моём случае).

Norgat ★★★★★
() автор топика
Ответ на: комментарий от Norgat

Ну ты не избавишься от этого в любом случае, если логика требует еще как-то их процессить. Например, у нас была кафка с последубщей агрегацией и записью в монгу, автор оригинального кода акноледжил сообщения сразу по вычитке, т.е. если от вычитки до монги что-то ломалось, сообщения терялись. Нужно было делать более надежно. Но если у тебя, например, реактивная система, можно легко вешать обработчики (обработанных) сообщений на конечный элемент пайплайна консюмера. Зависит от задачи. Я немного и с rmq имел дело - кафка субъективно просто больше нравится.

cdshines ★★★★★
()

Для дотнета Akka.NET, WCF, Orleans Project.

nikolnik ★★★
()

Есть такая библиотека — smartactors. Там есть такая штука как «контрольная точка». Вот эта та самая штука, которую ты хочешь. Дальше гугли сам.

anonymous
()
Ответ на: комментарий от anonymous

я не силен в очередях, но по-моему все что нужно ТСу это персистентный брокер (много) и ack сообщений. вместо того чтоб прочитать парочку туториалов из офф. документаций и попробовать, развели демагогию а-ля «это делали не мы, переделаем с нуля».

anonymous
()

Берешь RabbitMq, и не изобретаешь велосипед.

lovesan ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.