After further testing, it looks like this only happens when the first processor instance of a given type is added to the canvas. When adding another instance, only 1 thread starts and 1 MBean is registered. However, even after deleting all instances, the mock processor is not removed, so the associated MBean and thread remain. That is not really problematic, but if anyone knows why Nifi works that way, I'd be interested to know.