The core team has recently made RabbitMQ compatible with Erlang 24 which we expect to be released in May. This is a significant release and RabbitMQ users will benefit from it. In the process we have concluded that supporting Erlang 22 and 24 at the same time is not feasible. We believe that most users would strongly prefer to move to Erlang 24 given the benefits (see below) instead of sticking to Erlang 22 for longer.
As such, Erlang 22 support will be dropped about three months earlier than our standard Erlang release support policy outlines: on May 3rd 2021. A GA release of Erlang 24 is expected to come out in early to mid-May.
To avoid any inconvenience, you can move to Erlang 23 today. We expect that this version will be supported until at least April 2022. Erlang 23 is no longer a new release hot off the presses, and it’s already very widely used by RabbitMQ users. For example, the Docker community image provides the most recent Erlang 23 release available, and the image is automatically rebuilt when new RabbitMQ, Erlang or OpenSSL releases come out.
Erlang 24 brings a number of positive changes that directly or indirectly affect nearly every RabbitMQ user.
Erlang 24 introduces a JIT to the runtime and that results in significant throughput gains for real world systems, including RabbitMQ nodes. Both Erlang/OTP maintainers and our team have observed improvements in the 35-55% range depending on the workload. Since this is potentially relevant to every single RabbitMQ user, we believe this outweighs a couple of minor potentially breaking changes described below.
Erlang 24 continues improving (maturing) TLSv1.3 support, which is highly relevant as more and more tools move to support TLSv1.3 or even use it exclusively.
For contributors and the RabbitMQ core team, Erlang 24 offers significant quality of life improvements:
The substantial benefits listed above come at a cost that most RabbitMQ users won’t have to pay but some will.
Starting with 3.9, RabbitMQ will use a logging library from Erlang 24 instead of a 3rd party dependency. That dependency — Lager — has served us well for many years but is no longer obviously superior to the standard library option. This switch won’t affect most users but two things change:
The former can affect systems that attempt to parse RabbitMQ logs. The latter will require those who depend on those advanced Lager sink configuration settings to build a small plugin that provides an equivalent. If you only use the standard logging settings or Syslog, you won’t lose anything.
RabbitMQ 3.9 (master) already supports Erlang 24. On May 3rd, 2021 RabbitMQ 3.8 branch will have Erlang 24 support merged. That will automatically retire Erlang 22 support and all future RabbitMQ 3.8 releases will require Erlang 23. Upgrade to Erlang 23 today to make the transition smoother!
Note that we expect at least one more Erlang 22-compatible patch release to come out before May 3rd.
If you rely on RabbitMQ log parsing, the changes in timestamp formatting will be mentioned in 3.9 release notes when it comes out.
If you rely on Lager-specific advanced configuration settings, you should be able to build a small plugin that e.g. implements a custom backend or adjusts the formatting using the standard library logger API which provides most if not all features that Lager has.
If you use the Docker community RabbitMQ image and have updated it recently, you already run on a very recent release of Erlang 23. So do most RabbitMQ Kubernetes Operator users. The image will be upgraded to Erlang 24 likely a few weeks after it comes out, unless any serious enough Erlang 24-specific issues are discovered.
Other Docker images likely already use Erlang 23 but this is something that you should verify if you use one of those images.
If you have any questions or feedback, please share it in the RabbitMQ community Slack
Written by: Michael Klishin