Currently the java driver will fall back on NIO if it detects that io.netty.channel.epoll.Epoll is not on the classpath.
However, if the user has Epoll in their classpath but it fails to load because of incompatibilities between netty jars in their classpath the driver fails to intialize a Cluster.
An example of this happening is if the user has an older version of netty-all in their classpath (possibly pulled in by dependent libraries like hadoop), but a newer version of netty-transport in their classpath that was pulled in by the driver. Since netty-all is an uber jar of all the netty libraries it includes netty-transport-native-epoll. In such a situation, the user will see an exception like this:
A couple of users reported this after upgrading to 3.3.0 (which uses Netty 4.0.47.Final instead of Netty 4.0.44.Final like 3.2.0).
Since in this case the user doesn't have epoll in their classpath because they want to explicitly use it, it's just because a dependent library happened to pull it in as a transitive dependency we should fallback gracefully to NIO and inform the user of this.