1. Большое количество сообщений залеживается в mq уже несколько часов и не решается
Сцены:Десятки миллионов единиц данных хранились в MQ в течение семи или восьми часов, с 16:00 до поздней ночи, более 10:00 и более 11:00. Происходит сбой в сети.В это время необходимо устранить проблему потребителя, дать ему восстановить скорость потребления, а потом глупо ждать несколько часов, чтобы закончить потребление. Это точно не сработает. Один потребитель — 1000 в секунду, 3 потребителя в секунду — 3000, одна минута — 180 000, более 10 миллионов.
Таким образом, если у вас есть резерв от миллионов до десятков миллионов данных, даже если потребитель восстановится, восстановление займет около часа.
решение:
В настоящее время можно выполнять только временное расширение для более быстрого использования данных. Конкретные этапы работы и идеи заключаются в следующем:
① Сначала устраните проблему потребителя, чтобы убедиться, что скорость потребления восстановлена, а затем остановите всех существующих потребителей.
② Временно установите исходное 10-кратное или 20-кратное количество очередей (для новой темы раздел в 10 раз превышает исходное).
3. Затем напишите программу-потребитель, которая временно распределяет сообщения.Эта программа развертывается для потребления отставания сообщений.После потребления она не выполняет трудоемкую обработку, а напрямую опрашивает и записывает ее в очередь с номером 10 временно построен.
④ Сразу после этого для развертывания потребителей требуется 10-кратное количество машин, и каждая партия потребителей потребляет временную очередь сообщений.
⑤ Этот подход эквивалентен временному увеличению ресурсов очереди и потребительских ресурсов в 10 раз и потреблению сообщений со скоростью, в 10 раз превышающей обычную.
⑥ После того, как быстрое потребление закончится, восстановите исходную архитектуру развертывания и снова используйте исходный компьютер-потребитель для приема сообщений.
2. Сообщение установлено со сроком действия, что делать, если оно потеряется по истечении срока действия?
Предполагая, что вы используете rabbitmq, rabbitmq может установить время истечения срока действия, которое равно TTL.Если невыполненные сообщения в очереди превысят определенное время, RabbitMQ очистит их, и данные исчезнут. Тогда это вторая яма. Это не означает, что в mq будет накапливаться большое количество данных, но большое количество данных будет напрямую потеряно.
решение:
В этом случае на самом деле нет сжатия сообщений, но много потерянных сообщений. Так что первый способ увеличения потребителя точно не применим.
Эту ситуацию можно решить, приняв решение «Пакетное перенаправление».
Во время низких пиков трафика (например, глубокой ночью) напишите программу, которая вручную запросит потерянные данные, а затем повторно отправьте сообщение в mq, чтобы компенсировать потерянные данные.
3. Задолженность по сообщениям давно не обрабатывается, что делать, если mq не может ее поставить?
Если выход в том, что сообщение застряло в mq, то если вы давно с ним не разбирались, а mq в это время почти заполнен, что делать? Есть ли другой способ сделать это?
решение:
Нет способа сделать это, должно быть, выполнение первого решения слишком медленное, в этом случае для его решения необходимо использовать метод «отказ + пакетное перенаправление».
Во-первых, временно напишите программу, подключитесь к mq для потребления данных, отбросьте сообщение сразу после его получения, быстро израсходуйте невыполненные сообщения и уменьшите нагрузку на MQ, а затем перейдите ко второму решению, вручную запросите перезагрузку в глубокой ночью ночью.Эта часть данных теряется.
Предыдущий"Как убедиться, что сообщения выполняются по порядку》
Следующий"Если бы вас попросили спроектировать MQ, как бы вы его спроектировали?》