Initial 3.11 release notes
This commit is contained in:
parent
b1897e7e58
commit
994a71321c
|
|
@ -44,17 +44,38 @@ periods of time (no more than a few hours).
|
|||
|
||||
## Compatibility Notes
|
||||
|
||||
###
|
||||
|
||||
RabbitMQ 3.11.0 will [require all feature flags from the 3.8.x release series to be enabled](https://blog.rabbitmq.com/posts/2022/07/required-feature-flags-in-rabbitmq-3.11/) before upgrading.
|
||||
If the feature flags are not enabled, RabbitMQ 3.11 and later nodes will refuse to start.
|
||||
|
||||
### Minimum Supported Erlang Version
|
||||
|
||||
Starting with this release, RabbitMQ requires Erlang 25.0 or later versions. Nodes **will fail to start**
|
||||
on older Erlang releases.
|
||||
|
||||
Erlang 25 as our new baseline means much improved performance on ARM64 architectures, [profiling with flame graphs](https://blog.rabbitmq.com/posts/2022/05/flame-graphs/)
|
||||
across all architectures, and the most recent TLS 1.3 implementation available to all RabbitMQ 3.11 users.
|
||||
|
||||
### Open File Handle Limit is Capped by Default
|
||||
|
||||
Nodes now default to 65536 concurrent client connections instead of using the effective kernel open file handle limit.
|
||||
|
||||
|
||||
This change was introduced because of a change in several Linux distributions: they now use a default open file handle limit so high,
|
||||
they cause a significant (say, 1.5 GiB) memory preallocated the Erlang runtime.
|
||||
|
||||
For example, [RHEL 9 and CentOS Stream 9](https://access.redhat.com/solutions/1479623) are examples of such distributions.
|
||||
The new default [comes from modern systemd](https://github.com/systemd/systemd/commit/a8b627aaed409a15260c25988970c795bf963812).
|
||||
|
||||
See [rabbitmq/rabbitmq-server#5684](https://github.com/rabbitmq/rabbitmq-server/pull/5684) and [docker-library/rabbitmq#545](https://github.com/docker-library/rabbitmq/issues/545#issuecomment-1224977154)
|
||||
for details.
|
||||
|
||||
### Client Library Compatibility
|
||||
|
||||
Client libraries that were compatible with RabbitMQ `3.10.x` will be compatible with `3.11.0`.
|
||||
|
||||
|
||||
### Upgrading to Erlang 24.x
|
||||
|
||||
RabbitMQ `3.9.x` versions up to `3.9.22` require Erlang `23.2` and support Erlang `24` (recommended).
|
||||
Users of RabbitMQ versions that [do not support Erlang 23.2](https://www.rabbitmq.com/which-erlang.html) should first upgrade to the latest `3.9.22` on Erlang 23.2,
|
||||
then upgrade to `3.10.0` on Erlang 24 or (ideally) 25.
|
||||
|
||||
|
||||
### Getting Help
|
||||
|
||||
|
|
@ -64,287 +85,100 @@ Any questions about this release, upgrades or RabbitMQ in general are welcome on
|
|||
|
||||
## Changes Worth Mentioning
|
||||
|
||||
Release notes are kept under [rabbitmq-server/release-notes](https://github.com/rabbitmq/rabbitmq-server/tree/v3.10.x/release-notes).
|
||||
|
||||
Release notes are kept under [rabbitmq-server/release-notes](https://github.com/rabbitmq/rabbitmq-server/tree/v3.11.x/release-notes).
|
||||
|
||||
### Core Server
|
||||
|
||||
#### Enhancements
|
||||
|
||||
* Reduced memory footprint of quorum queues. Quorum queues now move enqueues messages to disk as quickly as
|
||||
possible, ignoring the `x-max-in-memory-length` and `x-max-in-memory-bytes` policy keys. This reduces per-queue memory footprint
|
||||
and makes throughput and latency less variable.
|
||||
* Some features flags have [graduated to always enabled](https://blog.rabbitmq.com/posts/2022/07/required-feature-flags-in-rabbitmq-3.11/).
|
||||
This means that they must be enabled before upgrading to 3.11. If that is not the case, the upgrade process will not proceed.
|
||||
|
||||
GitHub issue: [#3898](https://github.com/rabbitmq/rabbitmq-server/issues/3898)
|
||||
* More efficient connection tracking. This means less CPU load in environments where high [connection churn](https://www.rabbitmq.com/connections.html#high-connection-churn)
|
||||
cannot be avoided.
|
||||
|
||||
* New classic queue index and message store implementations. This makes memory footprint of classic queues less variable
|
||||
and on average, lower than before. Consumer delivery is more efficient, potentially increasing throughput for workloads
|
||||
where consumers do keep up with producers.
|
||||
In part contributed by @gomoripeti.
|
||||
|
||||
This implementation is not enabled by default. It can be enabled using a policy:
|
||||
GitHub issue: [#5610](https://github.com/rabbitmq/rabbitmq-server/pull/5610)
|
||||
|
||||
``` shell
|
||||
rabbitmqctl set_policy cq_version "^cq\." '{"queue-version": 2}' --priority 1 --apply-to queues
|
||||
```
|
||||
|
||||
or set via `rabbitmq.conf`:
|
||||
|
||||
``` ini
|
||||
classic_queue.default_version = 2
|
||||
```
|
||||
GitHub issue: [#3029](https://github.com/rabbitmq/rabbitmq-server/pull/3029)
|
||||
|
||||
* Quorum queues now support [message TTL](https://rabbitmq.com/ttl.html).
|
||||
|
||||
GitHub issue: [#3121](https://github.com/rabbitmq/rabbitmq-server/pull/3121)
|
||||
|
||||
* Reduced per-queue garbage collection.
|
||||
|
||||
GitHub issue: [#4110](https://github.com/rabbitmq/rabbitmq-server/pull/4110)
|
||||
|
||||
* Stream replication connections now adopt [TLS settings configured for inter-node communication links](https://rabbitmq.com/clustering-ssl.html).
|
||||
|
||||
GitHub issue: [#3553](https://github.com/rabbitmq/rabbitmq-server/pull/3553)
|
||||
|
||||
* Quorum queues now support two [dead lettering](https://rabbitmq.com/dlx.html) strategies, at-most-once (the 3.9 quorum queue and classic queue behavior)
|
||||
and at-least-once.
|
||||
|
||||
To use at-least-once the user must opt-in.
|
||||
|
||||
GitHub issue: [#3100](https://github.com/rabbitmq/rabbitmq-server/issues/3100)
|
||||
|
||||
* Messages delivered by a quorum queue and negatively acknowledged with a requeue will be added to the back of the queue
|
||||
until the queue has redelivery limit set. With a redelivery limit, requeueing will use the original position of the message
|
||||
if possible.
|
||||
|
||||
This improves operational safety: consumers that get stuck or requeue deliveries at a high rate will not indefinitely
|
||||
grow quorum queue Raft log, potentially driving the node out of disk space.
|
||||
|
||||
 This is a **potentially breaking change**.
|
||||
Applications can make sure quorum queues have a redelivery limit
|
||||
set if the original behavior is important to keep.
|
||||
|
||||
GitHub issue: [#3776](https://github.com/rabbitmq/rabbitmq-server/issues/3776)
|
||||
|
||||
* [Boot time definition sync](https://rabbitmq.com/definitions.html#import-on-boot) now can be skipped if definition source (e.g. file or directory) contents
|
||||
have not changed:
|
||||
|
||||
``` ini
|
||||
definitions.skip_if_unchanged = true
|
||||
|
||||
definitions.import_backend = local_filesystem
|
||||
definitions.local.path = /path/to/definitions/defs.json
|
||||
```
|
||||
|
||||
GitHub issue: [#4062](https://github.com/rabbitmq/rabbitmq-server/pull/4062)
|
||||
|
||||
* Classic mirrored queues peak eager sync throughput now can be limited.
|
||||
|
||||
Contributed by @thuandb (AWS).
|
||||
|
||||
GitHub issue: [#3925](https://github.com/rabbitmq/rabbitmq-server/pull/3925)
|
||||
|
||||
* [Optional queue arguments](https://rabbitmq.com/queues.html#optional-arguments) are now more strictly validated at queue
|
||||
declaration time, as are optional consumer arguments when new consumers subscribe.
|
||||
|
||||
GitHub issue: [#4572](https://github.com/rabbitmq/rabbitmq-server/pull/4572)
|
||||
|
||||
* Headers exchanges (AMQP 0-9-1) now support a new matching strategy, `"any-with-x"`,
|
||||
which works the same way as `"any"` but also considers headers that begin with
|
||||
an `"x-"`.
|
||||
|
||||
GitHub issue: [#4143](https://github.com/rabbitmq/rabbitmq-server/pull/4143)
|
||||
|
||||
* Queues can no longer be created in a vhost while deletion of that vhost is in progress
|
||||
|
||||
Contributed by @tomyouyou.
|
||||
|
||||
GitHub issue: [#4260](https://github.com/rabbitmq/rabbitmq-server/pull/4260)
|
||||
|
||||
* rabbitmqctl encode/decode can now accept more values via standard input
|
||||
|
||||
GitHub issue: [#4258](https://github.com/rabbitmq/rabbitmq-server/pull/4258)
|
||||
|
||||
* rabbitmq_tracing now uses local time for timestamps
|
||||
|
||||
GitHub issue: [#4277](https://github.com/rabbitmq/rabbitmq-server/pull/4277)
|
||||
|
||||
|
||||
#### Internal API and Other Changes
|
||||
|
||||
* Two rarely used classic queue metrics have been removed. Their removal reduces pressure
|
||||
on internal table writes and boosts classic queue v1 throughput by 10 to 20 percent.
|
||||
|
||||
Contributed by @felixhuettner.
|
||||
|
||||
GitHub issue: [#4431](https://github.com/rabbitmq/rabbitmq-server/pull/4431)
|
||||
|
||||
* Tracing and `idle_since` timestamps now reflect local time in RFC 3339 format. Previously
|
||||
a custom format was used for these timestamps and they always reflected UTC time.
|
||||
|
||||
GitHub issue: [#4276](https://github.com/rabbitmq/rabbitmq-server/pull/4276)
|
||||
|
||||
* Inter-node message transfer is optimized for the case where a message is only routed to one queue.
|
||||
|
||||
Contributed by @tomyouyou.
|
||||
|
||||
GitHub issue: [#3865](https://github.com/rabbitmq/rabbitmq-server/pull/3865)
|
||||
|
||||
* Definition import now can be extended to support arbitrary sources. This is done
|
||||
by providing a module that implements three functions: `is_enabled/0`, `load/1`, `load_with_hashing/3`.
|
||||
The module can then should be specified as the `definitions.import_backend` value:
|
||||
|
||||
``` ini
|
||||
definitions.import_backend = rabbit_definitions_import_our_custom_backend
|
||||
```
|
||||
|
||||
GitHub issue: [#3311](https://github.com/rabbitmq/rabbitmq-server/pull/3311)
|
||||
|
||||
|
||||
* Elixir 1.13 is now supported at build time.
|
||||
|
||||
GitHub issue: [#4108](https://github.com/rabbitmq/rabbitmq-server/pull/4108)
|
||||
* 10% to 20% throughput gain for publishers that use the default exchange.
|
||||
|
||||
GitHub issue: [#4606](https://github.com/rabbitmq/rabbitmq-server/pull/4606)
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
This release includes all applicable [bug fixes that shipped in `3.9.x` releases](https://www.rabbitmq.com/changelog.html).
|
||||
* Durable classic queues could get "lost" under certain conditions when a node failed.
|
||||
|
||||
* Addressed a performance regression for large fanouts when streams were not enabled.
|
||||
GitHub issue: [#4563](https://github.com/rabbitmq/rabbitmq-server/pull/4563)
|
||||
|
||||
GitHub issue: [#4073](https://github.com/rabbitmq/rabbitmq-server/pull/4073)
|
||||
* Nodes could get stuck when performing a rolling restart on Kubernetes where DNS hostname
|
||||
resolution was not available early on node boot.
|
||||
For example, this is the case with a [popular default caching setting of CoreDNS](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#stable-network-id).
|
||||
|
||||
* Stream delivery rate could drop if concurrent stream consumers consumed in a way
|
||||
that made them reach the end of the stream often.
|
||||
|
||||
GitHub issue: [#4371](https://github.com/rabbitmq/rabbitmq-server/pull/4371)
|
||||
|
||||
* Channels could confirm a subset of messages published as mandatory in some cases.
|
||||
|
||||
GitHub issue: [#3870](https://github.com/rabbitmq/rabbitmq-server/pull/3870)
|
||||
|
||||
* Direct Erlang client initialisation had a race condition with earlier boot steps,
|
||||
which could lead plugins that depend on it to fail to open connections.
|
||||
|
||||
GitHub issue: [#3685](https://github.com/rabbitmq/rabbitmq-server/pull/3685)
|
||||
|
||||
* Exclusive queues are always placed on local node.
|
||||
|
||||
[Exclusive queues](https://rabbitmq.com/queues.html#exclusive-queues) are by definition node-local because they are tied to the lifecycle of
|
||||
their declaring connection, which is node-local.
|
||||
|
||||
GitHub issue: [#3341](https://github.com/rabbitmq/rabbitmq-server/pull/3341)
|
||||
GitHub issue: [#5438](https://github.com/rabbitmq/rabbitmq-server/pull/5438)
|
||||
|
||||
|
||||
### Prometheus Plugin
|
||||
### Stream Plugin
|
||||
|
||||
#### Bug Fixes
|
||||
#### Enhancement
|
||||
|
||||
* Prometheus collector could run into an exception early on node's
|
||||
schema database sync.
|
||||
* RabbitMQ now supports [partitioned streams](https://blog.rabbitmq.com/posts/2022/07/rabbitmq-3-11-feature-preview-super-streams/) (super streams).
|
||||
Super streams are a way to scale out by partitioning a large stream into smaller streams.
|
||||
|
||||
GitHub issue: [#4376](https://github.com/rabbitmq/rabbitmq-server/pull/4376)
|
||||
* Stream protocol clients and RabbitMQ nodes now have a mechanism of exchanging
|
||||
their capabilities (sets of supported commands).
|
||||
|
||||
GitHub issue: [#5308](https://github.com/rabbitmq/rabbitmq-server/issues/5308)
|
||||
|
||||
* New stream protocol command that allows certain stream metadata to be inspected by
|
||||
applications.
|
||||
|
||||
GitHub issue: [#5412](https://github.com/rabbitmq/rabbitmq-server/issues/5412)
|
||||
|
||||
* [Single Active Consumer support for streams](https://blog.rabbitmq.com/posts/2022/07/rabbitmq-3-11-feature-preview-single-active-consumer-for-streams/).
|
||||
|
||||
GitHub issue: [#3754](https://github.com/rabbitmq/rabbitmq-server/pull/3754)
|
||||
|
||||
* Consumers now have access to their committed offset information.
|
||||
|
||||
GitHub issue: [#5307](https://github.com/rabbitmq/rabbitmq-server/issues/5307)
|
||||
|
||||
|
||||
### OAuth 2 AuthN/AuthZ Backend Plugin
|
||||
|
||||
#### Enhancements
|
||||
|
||||
* OAuth 2 plugin now [supports more identity providers and OpenID Connect](https://blog.rabbitmq.com/posts/2022/07/oidc-integration/).
|
||||
|
||||
GitHub issue: [#4749](https://github.com/rabbitmq/rabbitmq-server/pull/4749)
|
||||
|
||||
* OAuth 2 plugin now supports [Rich Authorization Requests](https://oauth.net/2/rich-authorization-requests/).
|
||||
|
||||
GitHub issue: [#5234](https://github.com/rabbitmq/rabbitmq-server/pull/5234)
|
||||
|
||||
### Management Plugin
|
||||
|
||||
#### Enhancements
|
||||
|
||||
* `idle_since` field now uses RFC 3339 format.
|
||||
* Management UI OAuth 2 integration supports more identity providers and [OpenID Connect](https://openid.net/connect/).
|
||||
|
||||
 This is a **potentially breaking change**.
|
||||
Sample value with the previous format: `2022-03-22 11:39:37`. With the new format: `2022-03-22T11:39:37.908+01:00`.
|
||||
Clients of the REST API should be able to parse values in the new format.
|
||||
GitHub issue: [#4749](https://github.com/rabbitmq/rabbitmq-server/pull/4749)
|
||||
|
||||
GitHub issue: [#4276](https://github.com/rabbitmq/rabbitmq-server/issues/4276)
|
||||
* HTTP API responses that render a large rest sets are now more efficient thanks to a more efficient JSON serialiser library used internally.
|
||||
Peak memory footprint of such queries is also double digit percent lower compared to v3.10.x.
|
||||
|
||||
#### Bug Fixes
|
||||
GitHub issue: [#5356](https://github.com/rabbitmq/rabbitmq-server/pull/5356)
|
||||
|
||||
* `rabbitmqadmin` now correctly loads TLS-related keys from its configuration file.
|
||||
* New endpoint for listing connections of a specific user.
|
||||
|
||||
Contributed by @fwolfsjaeger.
|
||||
Contributed by @NuwanSameera.
|
||||
|
||||
GitHub issue: [#4408](https://github.com/rabbitmq/rabbitmq-server/pull/4408)
|
||||
|
||||
|
||||
### MQTT Plugin
|
||||
|
||||
#### Enhancements
|
||||
|
||||
* Durable (QoS 1) subscriptions now can be backed by [quorum queues](https://www.rabbitmq.com/quorum-queues.html) if configured so.
|
||||
|
||||
This setting **can only be applied for new clusters**: existing durable classic
|
||||
queues will not be converted. Enabling this setting in a cluster with existing
|
||||
durable subscription data of MQTT clients will make it impossible for them to
|
||||
subscribe without **explicit queue deletion** by the cluster operator.
|
||||
|
||||
To opt in to use quorum queues for durable MQTT subscriptions, use the `mqtt.durable_queue_type`
|
||||
configuration key in `rabbitmq.conf`:
|
||||
|
||||
``` ini
|
||||
mqtt.durable_queue_type = quorum
|
||||
```
|
||||
|
||||
GitHub issue: [#4401](https://github.com/rabbitmq/rabbitmq-server/pull/4401)
|
||||
|
||||
|
||||
### OAuth 2 AuthN and AuthZ Backend Plugin
|
||||
|
||||
#### Enhancements
|
||||
|
||||
* The plugin now supports scope aliases. In some environments, it's unrealistic to
|
||||
adopt JWTs that follow the `scope` convention assumed by the plugin. Instead,
|
||||
identity services fill `scope` or `claims` field with a "role name" or "role alias"
|
||||
that implicitly maps to a set of scopes/permissions.
|
||||
|
||||
With this feature, RabbitMQ operators can map those values to a set of
|
||||
scopes that can be translated to RabbitMQ permissions.
|
||||
|
||||
GitHub issue: [#4588](https://github.com/rabbitmq/rabbitmq-server/issues/4588)
|
||||
|
||||
* Improvements to JKW support and new HTTPS settings.
|
||||
|
||||
Contributed by @anhanhnguyen (Erlang Solutions).
|
||||
|
||||
GitHub issue: [#3887](https://github.com/rabbitmq/rabbitmq-server/pull/3887)
|
||||
|
||||
|
||||
### Shovel Plugin
|
||||
|
||||
#### Enhancements
|
||||
|
||||
* Dynamic Shovels can be deleted or restarted from any cluster node
|
||||
|
||||
Contributed by @kostakal.
|
||||
|
||||
GitHub issue: [#4242](https://github.com/rabbitmq/rabbitmq-server/pull/4242)
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Shovels with automatic deletion threshold of `0` are now correctly deleted immediately.
|
||||
|
||||
Contribited by @luos (Erlang Solutions).
|
||||
|
||||
GitHub issue: [#4098](https://github.com/rabbitmq/rabbitmq-server/pull/4098)
|
||||
|
||||
|
||||
### Consul Peer Discovery Plugin
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Handle a response code change in Consul 1.11.
|
||||
|
||||
Contributed by @maestroes.
|
||||
|
||||
GitHub issue: [#4149](https://github.com/rabbitmq/rabbitmq-server/issues/4149)
|
||||
GitHub issue: [#5319](https://github.com/rabbitmq/rabbitmq-server/pull/5319)
|
||||
|
||||
|
||||
### Dependency Changes
|
||||
|
||||
* `ra` upgraded from [`2.0.0` to `2.0.9`](https://github.com/rabbitmq/ra/compare/v2.0.0...v2.0.9)
|
||||
* `osiris` upgraded from [`1.0.0` to `1.2.6`](https://github.com/rabbitmq/osiris/compare/v1.0.0...v1.2.6)
|
||||
* `ranch` upgraded from [`2.0.0` to `2.1.0`](https://github.com/ninenines/ranch/compare/2.0.0...2.1.0)
|
||||
* `prometheus` upgraded from [`4.8.1` to `4.8.2`](https://github.com/deadtrickster/prometheus.erl/compare/06425c21a39c1564164f1cc3fe5bdfa8b23b1f78...v4.8.2)
|
||||
* `eetcd` upgraded from [`0.3.3` to `0.3.5`](https://github.com/zhongwencool/eetcd/compare/v0.3.3...v0.3.5)
|
||||
* `observer_cli` upgraded from [`1.6.2` to `1.7.3`](https://github.com/zhongwencool/observer_cli/compare/1.6.2...1.7.3)
|
||||
* `gen_batch_server` upgraded from [`0.8.6` to `0.8.7`](https://github.com/rabbitmq/gen-batch-server/compare/38191672ee0f22a8d5291c6c09f8c07178d565ca...v0.8.7)
|
||||
* `ra` upgraded to [`2.3.0`](https://github.com/rabbitmq/ra/releases)
|
||||
* `osiris` upgraded to [`1.3.0`](https://github.com/rabbitmq/osiris/tags)
|
||||
* `prometheus` upgraded to [`4.9.0`](https://github.com/deadtrickster/prometheus.erl/tags)
|
||||
* `jsx` was replaced with [`thoas`](https://github.com/lpil/thoas)
|
||||
|
|
|
|||
Loading…
Reference in New Issue