[AWS IoT] High throughput (thousands of message per sec) trough a single MQTT connection

0

Hi all we have a data collection app which is collecting data from hundreds of nodes over the air. Some of those nodes are generating data with 10Hz update rate (hi speed network proprietary protocol). So at the end of the day have something between couple tenths to couple thousands messages per second (depends on the network size). We normally use mosquitto or Amazon ActiveMQ to handle those this data stream trough a single MQTT connection (collecting app -> MQTT broker). This all is working fine (so far). But we want to move it AWS IoT to have more features available and we hit the rock here - it seems that single MQTT connection can publish a MQTT message only once per second - that is far far a way from what we need. Is there a way how to solve this situation? Im newbie to AWS at all so any advice is appreciated.

asked a year ago1112 views
6 Answers
0

Hi,

AWS IoT Core has a quota of 100 messages per second per connection. This quota is not adjustable. There are multiple options to ingest messages with a higher frequency:

  • you can open multiple connections from your device
  • you can aggregate data before ingesting them to reduce the amount/frequency
  • depending to what other service you want to route the data there might be an option to ingest the data into that service directly.

Cheers,
Philipp

AWS
EXPERT
answered a year ago
  • Hi, I'm having the same kind of problem so I installed greengrass on a virtual machine and deployed a custom component that reads data and publishes it to IoT Core via IPC , IoT Core however has this limit of 100 transactions per second which is not optimal for me. Your first point says to open multiple connections from the device, how ? multiple components writing to IoT Core at the same time ? the limit of 100 messages per second is not independent of the connections you open ? Thanks in advance Cheers, Cris

0

Hi MassimilianoAWS thanks for your comment. The GreenGrass -> StreamManager -> Kinesis Data Firehose looks very interesting, but is there a way how to push back the data to the IoT core? For some nodes we need bidirectional communication - from this point we are happy with Amazon ActiveMQ (as a plain MQTT broker). But we want to level up and give our customer the possibility to use the rest of the AWS world. The IOT core should be the place where our company ends and our client begins.

Or is there a way how to interconect IoT with Active MQ?

JK
answered a year ago
  • Hi JK, IoT Core does not store data per se. AWS IoT Analytics does, but it's probably not what you'll be using. The answer is 'yes', it's possible to push mqtt messages back to your devices via IoT Core. With a lambda function (with the right permissions), that's straight forward. In short, once device data reaches Amazon Kinesis, you can use the rest of AWS services. It's just a matter of defining your use cases and setting up the proper architecture for that.

0

Hi Philipp I have found this quota but somehow we have problems with even 10 messages per seconds - we get only one message per second. I can see how the messages are leaving our app (QOS 0) but from the IoT we get only one message per sec.

Do you have an idea if the Greengrass with IPC would help to workaround this issue?

Cheers JK

answered a year ago
0

Hi JK,

Greengrass uses IPC for communication between components. When Greengrass sends data to IoT Core it also uses an MQTT connection.

You could use CloudWatch logs (logging must be enabled in IoT Core) to find out how many messages are published and if there are any errors.

Cheers,
Philipp

AWS
EXPERT
answered a year ago
0

Hi Philipp, I will check it with CloudWatch (I have never used it before 8-) ).

But I would guess that those messages limits for MQTT would not apply for the Greengrass as is supposed to be on edge where the all technology is located - is it is expected that there might be a bigger network load between technology and the Greengrass device. At least I hope.

Cheers JK

answered a year ago
0

For this kind of use cases you can use AWS Greengrass to collect data at the edge from your custom protocol and then use StreamManager to push the data to AWS via Amazon Kinesis. Greengrass MQTT connection to AWS IoT Core is limited to 100 messages per second.

Using AWS IoT Core to collect your data would be a better fit if devices/sensors are able to communicate over MQTT directly, as sensor would not normally generate more than 100 msg/sec.

AWS
EXPERT
answered a year ago

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.

Guidelines for Answering Questions