Apache Apex looks similar to Apache Storm.
So, at a glance, both look similar and I'm not quite getting the difference. Can someone please explain what are the key differences? In other words, when should I use one instead of the other?
There are fundamental differences in architecture which make each of the platform very different in terms of latency, scaling and state management.
At the very basic level,
You can learn more differences in the following blog which also includes other main stream processing platforms out there.
https://databaseline.wordpress.com/2016/03/12/an-overview-of-apache-streaming-technologies/