It is not necessarily needed, no.
What it does is stop your apps and system apps/processes from receiving inbound connections. Not every app has this functionality (and if they do, usually for a reason; i.e. they need it function properly) and many system processes that have this functionality are disabled by default (in System Preferences → Sharing). Moreover, macOS has other security mechanisms in place, such as sandboxing and limited permissions. If you are using your Mac in a trusted network, such as your own network, you will likely be better protected by a router’s firewall already.
The firewall itself runs with elevated permissions and can be a target for attacks. Vulnerabilities are occasionally found, so it is not a no-risk scenario to enable it. Furthermore, since the application firewall only gives you a choice to block all inbound connections for a particular app/process, it only makes sense to use it if you actually block some of them, otherwise there is no point in using it.