The Kroxylicious project is very pleased to announce the release of Kroxylicious 0.9.0. This release introduces support for Apache Kafka 3.9.
We generally expect Kroxylicious to be both forwards- and backwards-compatible across Kafka versions just like the Apache Kafka client and broker. While we tested with pre-release versions of Apache Kafka 3.9 we discovered after it was released that we had missed a case in the protocol version negotiation. When the version of the ApiVersions
RPC was updated we were unable to decode the response. In the 0.9.0 release we adopt the same behaviour as the Kafka broker and respond with API version 0 if we do not support the protocol version requested by the client - we have also expanded our test coverage to get earlier warnings of similar issues in the future.
This release also marks the introduction of our new state machine for handling connections. We have evolved the state machine at the core of the proxy to separate out the state carried at various stages of the connection lifecycle and provide stronger rules around transitions between states. This is still a work in progress due to the wide-ranging implications it has, however we think it gives us a stronger core to base everything else around. This does, for the moment, limit our ability to offer authentication offload support, we do intend to restore this eventually (please do get in touch if this use case is important to you via Slack or GitHub or even bsky).
There are many quality of life improvements in this release (in no particular order)
This release upgrades Kroxylicious to Jackson 2.18 which changes how Jackson handles constructor detection, which may lead to issues when parsing config for custom filters. If after the upgrade you observe issues similar to
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Invalid type definition for type `com.fasterxml.jackson.databind.tofix.CreatorResolutionTest$HostPort`: Argument #0 of Creator [method com.fasterxml.jackson.databind.tofix.CreatorResolutionTest$HostPort#parse(java.lang.String)] has no property name (and is not Injectable): can not use as property-based Creator
then you need to add @JsonCreator(mode = JsonCreator.Mode.DELEGATING)
to the constructor one expects Jackson to use.
See the Changelog for a full list of changes and summary of Deprecations, Changes and Removals.
Lastly, we are very pleased to announce that this Kroxylicious release contains first time contributions from:
Please let us know, through Slack, GitHub or even bsky), if you find the project interesting or helpful and especially if you have deployed it in production.