Первое знакомство с RocketMQ

RocketMQ

Концептуальная записка

Обычно точки знаний, которые должна освоить очередь сообщений, это Topic (основная часть), Producer (производитель), Consumer (потребитель), Queue (очередь), Delivery Semantics (парадигма передачи сообщений).

Проблема в том, что в разных очередях сообщений эти термины называются по-разному, и их значения не очень точны. Итак, Али сделалProjectOpenСообщенияИнициировать первый международный стандарт в области распределенного обмена сообщениями. Однако, похоже, его покупают не многие, но это не мешает нам разобраться и изучить знания об очередях сообщений по этой спецификации.

Желающие могут ознакомиться:GitHub.com/open mess AG я…

rocketmqофициальная документацияОб этом уже было сказано более ясно, поэтому я не буду повторяться.

основной процесс

在这里插入图片描述

Написание и хранение сообщений

Сообщение сохраняется в брокере, записывается в журнал фиксации, сначала записывается в память, а затем сбрасывается. Сохраняется на диск непосредственно какФайловая системаПуть. Чтобы повысить эффективность записи на диск, все они записываются последовательно, так что все темы собраны вместе,Это отличается от кафки, Кафка использует топик в качестве основной единицы.

Размер одного файла журнала фиксации составляет 1G, а затем прокручивается до разных файлов.

сообщение прочитано

Потребитель сначала считывает смещение (смещение), размер (размер) постоянного сообщения и значение HashCode тега сообщения из ConsumeQueue (логической очереди сообщений), а затем считывает реальное содержимое сущности сообщения из CommitLog;

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

在这里插入图片描述

будь осторожен

На что следует обратить внимание при использовании очередей сообщений

время хранения сообщения

По умолчанию Rocketmq хранится 72 часа, если превысит, то будет сброшен вне зависимости от того, есть ли потребление. Через параметрfileReserverdTimeнастроить.УведомлениеЭта конфигурация является глобальной конфигурацией, и невозможно установить разные значения для разных тем, причина была указана выше, потому что сообщение хранилища RocketMQ составляется по всем темам.

порядок сообщений

MessageListenerOrderly

сообщение потеряно

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

производственная сторонаВ синхронном режиме или в асинхронном режиме вам нужно иметь дело с ошибками отправки

Поэтому необходимо обеспечить идемпотентность потребления.брокерская сторонаЧтобы гарантировать, что он не будет потерян, необходимо включить синхронную очистку диска (для предотвращения потери данных в памяти) и синхронную репликацию (для предотвращения единой точки отказа). За это предусмотрен штраф за производительность. Параметры механизма чисткиflushDiskTypeПо умолчаниюASYNC_FLUSH, брокер обновит диск после определенного количества сообщений, очевидно, производительность выше.

потребительCONSUME_SUCCESS после потребления На стороне производства и на стороне потребителя сообщение может быть успешным из-за проблем с сетью, но подтверждение не будет успешным, поэтому доставка/потребление будет повторяться. такDelivery Semanticsобщий выборAt least once. Приложение должно гарантировать消费的幂等性

Напишите журнал эффективности/эффективности потребления/потребления

отправительВ случае асинхронной очистки и асинхронной репликации два 4-ядерных 8G, размером 100 байт, а скорость записи может достигать десятков тысяч.

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

потребительВ зависимости от того, занимает ли логика потребления много времени, поток обработки на одном компьютере по умолчаниюconsumeThreadMax(по умолчанию 20) Если потребительская служба независима, ее можно настроить на больший размер, чтобы повысить скорость обработки одной машины.

Когда скорость обработки отдельной машины не может быть улучшена, кластер можно масштабировать горизонтально. Однако он не является бесконечно масштабируемым по горизонтали, за пределамиdefaultTopicQueueNumsНедопустимое количество очередей подписки, значение по умолчанию — 4.

Сценарии применения

Зачем нужна очередь сообщений?Об этом вопросе говорили плохо.Три классических сценария – пиковое сглаживание, асинхронная обработка и развязка сервисов. Лично я думаю, что это более полное резюме.GitHub.com/open mess AG я…

Сфокусируйся наrpcСценарий, обратите внимание, что этот rpc не является вызовом rpc. Является синхронным сообщением, эквивалентным двум RPC. Клиент отправляет его на сервер. После того, как сервер обработан, он отправляется клиенту.

在这里插入图片描述
Обычно это используется для синхронизации между сервисами. Например, есть базовая служба А, и запрос должен выполнять трудоемкую операцию. Чтобы не влиять на службу А, для обработки этой операции используется служба Б. будет использоваться тогдаrpc

Ссылаться на

Специальности.Meituan.com/2016/07/01/…

Есть ли в теле яичник?/2019/Он и- из…