Running the broker on the target has been a really great thing during development. I can run validation systems on other machines and inject messages over the wire, or I can actually run the UI on my dev machine and let the backend respond from a live target.
I also have a development team in Asia that can't get to the newest hardware, so I fire up a system here and open a port they can access. They love it.
That said, the bandwidth in MQTT is lightweight but you still need a TCP/IP stack on your system. That's typically more substantial of a footprint than Mosquitto will be at the end of the day.
Someone has recently taken the RSMB broker (from IBM originally) and ported it to the ESP32: https://github.com/DynamicDevices/picobroker I can't comment on what the limitations of that are though.
I haven't done this myself yet but I've seen a couple of production IoT setups with a local MQTT broker running on a RaspberryPi configured to relay all messages to a central broker running in the cloud.
MQTT requires a TCP stack, which limits to the higher end chips.
But, for embedded linux, you're probably golden.
I've tried it on the STM32F746 (Cortex-M7) and it works well, although there are other issues with networking on CubeMX that are open.