As stated earlier, you are encouraged to use RxJava 3.0 if you can. This version will continue to grow and receive new features, while RxJava 1.x has not been developed further since March 21, 2018, and 2.x will be maintained for bug fixes only until February 28, 2021. However, there are other considerations that may lead you to use RxJava 1.x or 2.x.
If you inherit a project that is already using RxJava 1.x or 2.x, you will likely continue using it until it becomes feasible to migrate to RxJava 3.0. You can also check out David Karnok's RxJava2Interop project (https://github.com/akarnokd/RxJava2Interop), which converts Rx types from RxJava 1.x to RxJava 2.x and vice versa. After you finish this book, you may consider using this library to leverage RxJava 2.x even if you have the RxJava 1.x legacy code.
Migration to RxJava 3.0 requires mostly a change of import statements only. However, a few methods were dropped between RxJava 2.x and 3.0, some methods renamed, and new methods added (refer to the details at https://github.com/ReactiveX/RxJava/wiki/What's-different-in-3.0). The compiler will guide you and, for a typical, not overly large application, migration to RxJava 3.0 should be pretty straightforward, unless, of course, your application uses very particular version-specific features. In such a case, a rewrite would be the only way to proceed.
In RxJava, there are multiple libraries that can be used to make several Java APIs reactive and plug into RxJava seamlessly. To name just a few, these libraries include RxJava-JDBC, RxAndroid, RxJava-Extras, RxNetty, and RxJavaFX. At the time of writing, only RxAndroid and RxJavaFX have been fully ported to RxJava 2.x, and many other libraries will follow. By the time you are reading this, all major RxJava extension libraries will hopefully be ported to RxJava 2.x and some to RxJava 3.0, too.
You may prefer RxJava 3.0 because it was built on much of the hindsight and wisdom gained from RxJava 1.x and 2x. It has better performance, simpler APIs, a cleaner approach to backpressure, and is a bit safer when it comes to putting together your own operators.