Releases: SergeSavel/kafka-gateway
Releases · SergeSavel/kafka-gateway
Release list
v5.1.1
A major release since 5.0.2: new Admin/Consumer/Producer endpoints, streaming of poll
responses, large reliability and performance improvements, Windows service support,
an OpenAPI specification, and a substantially expanded test suite (90+ new tests).
Added
Admin endpoints
describe-features,update-feature,delete-records,abort-transactiondescribe-group-configs,alter-group-config,delete-group-configcreate-topics— batch creation with a per-topic status (limit of 200 entries)set-topic-configrenamed toalter-topic-config(old name kept as a deprecated alias)- Topic deletion by id and a per-topic deletion status in
delete-topics - Optional
validateOnlyandretryOnQuotaViolationin create-topic(s) - Optional
timeoutMson every admin request
Consumer endpoints
unsubscribe,get-group-metadata,get-committed,get-partitions
(replaces the deprecatedlist-partitions)seek-to-beginning/seek-to-endnow accept multiple partitions
Producer endpoints
- Transactions:
begin-transaction,commit-transaction,abort-transaction
System
GET /health— liveness probe, no authentication requiredGET /version— now accessible without authentication
Streaming, performance, deployment
- Consumer poll responses are streamed with
Transfer-Encoding: chunkedin bounded
chunks (-Dnetty.responseChunkBytes) instead of a single buffer - One active request per connection (
HttpRequestFlowControlHandler) for correct keep-alive - Producer
sendvia the Kafka callback (no virtual-thread blocking); blocking admin
operations offloaded to virtual threads - Asynchronous Kafka client close with bounded parallelism (
-Dclient.close.parallelism) TCP_NODELAY, epoll transport, configurable Netty settings (worker threads, backlog,
request size limits, timeouts), graceful shutdown within a single configurable deadline- Windows service support via Apache Procrun (
install-windows-service.ps1) - Daily log file rolling (gzip, 30-day retention); console-only logging when
-Dlog.diris unset - systemd unit hardening (LimitNOFILE, TimeoutStopSec, WorkingDirectory)
- OpenAPI 3.1 specification for all modules with a Swagger UI setup guide
Changed
- The
/consumer/pollfieldtimeoutis deprecated in favor oftimeoutMs; the poll
timeout is capped by-Dnetty.readTimeoutSeconds(300 s by default) describe-topicacceptstopicIdas a string; the topic id inlist-topicsis a
base64url string- The distribution is laid out at the archive root (no version-nested directory) and
includes README.md and thedocs/directory - Kafka timeouts now return 504; woken-up consumers (
WakeupException) return 503;
a client config rejected by Kafka on create returns 400 (instead of 500) Content-Type/Acceptare parsed as media types rather than exact strings
(parameters and any casing are accepted)- Response header names are always written in canonical case
- Instance expiration is measured with a monotonic clock (immune to system clock changes)
- Binary producer send preserves duplicate Kafka message header keys
Fixed
- Binary consumer poll truncation — clients received partial responses. Multiple root
causes eliminated: timed-out connections no longer write a response over an in-flight
chunked body; the read timeout counts only client idle time (not request processing or
streaming);Transfer-Encodingis sent in canonical case for case-sensitive clients;
leftover request content is discarded without closing the channel; pipeline exceptions
are propagated to the inbound handler correctly create-topicendpoints occasionally not sending a response- A race condition in
describe-clusterresponses consumer.wakeup()is now invoked beforeclose()to avoid a close/poll race- Data races (
volatileexpiration timestamp and Basic-auth user map) - Heap exhaustion via unbounded length fields in the binary deserializer
- A
ByteBufleak on binary serialization errors - Locale-dependent case folding pinned to
Locale.ROOT - Empty SCRAM username/password are rejected with 400 at instance creation
Dependencies
- Netty 4.2.17.Final, kafka-clients 4.1.2, hibernate-validator 9.1.3, log4j 2.26.1,
jackson 2.22.1, JUnit 6.1.3