HAProxy is a layer 4 TCP port traffic manager. It can do simple load balancing based on rules like ‘least connections’ or ‘round-robin’. Works well with MySQL. Cannot do query pattern matching; no rules for query processing; no cache.
MySQL Router is a mysql-specific router much like HAProxy and has the same cons. It is not widely used in the ecosytem due to performance issues.
ProxySQL is a layer 7 traffic manager/load balancer/connection multiplexer. it “speaks” mysql and can route queries based on the actual contents of the SQL itself. It has a rule engine for complex routing/splitting and has native query caching. proxysql also understands group replication, xtradb clustering, and typical async replication.
The rule of thumb is whatever you are comfortable with. My default is ProxySQL because it is highly performant (X0,000 connections) and has many features.