Skip to content

Releases: SergeSavel/kafka-gateway

Release list

v5.1.1

Choose a tag to compare

@SergeSavel SergeSavel released this 15 Aug 19:21

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-transaction
  • describe-group-configs, alter-group-config, delete-group-config
  • create-topics — batch creation with a per-topic status (limit of 200 entries)
  • set-topic-config renamed to alter-topic-config (old name kept as a deprecated alias)
  • Topic deletion by id and a per-topic deletion status in delete-topics
  • Optional validateOnly and retryOnQuotaViolation in create-topic(s)
  • Optional timeoutMs on every admin request

Consumer endpoints

  • unsubscribe, get-group-metadata, get-committed, get-partitions
    (replaces the deprecated list-partitions)
  • seek-to-beginning / seek-to-end now accept multiple partitions

Producer endpoints

  • Transactions: begin-transaction, commit-transaction, abort-transaction

System

  • GET /health — liveness probe, no authentication required
  • GET /version — now accessible without authentication

Streaming, performance, deployment

  • Consumer poll responses are streamed with Transfer-Encoding: chunked in bounded
    chunks (-Dnetty.responseChunkBytes) instead of a single buffer
  • One active request per connection (HttpRequestFlowControlHandler) for correct keep-alive
  • Producer send via 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.dir is unset
  • systemd unit hardening (LimitNOFILE, TimeoutStopSec, WorkingDirectory)
  • OpenAPI 3.1 specification for all modules with a Swagger UI setup guide

Changed

  • The /consumer/poll field timeout is deprecated in favor of timeoutMs; the poll
    timeout is capped by -Dnetty.readTimeoutSeconds (300 s by default)
  • describe-topic accepts topicId as a string; the topic id in list-topics is a
    base64url string
  • The distribution is laid out at the archive root (no version-nested directory) and
    includes README.md and the docs/ 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 / Accept are 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-Encoding is 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-topic endpoints occasionally not sending a response
  • A race condition in describe-cluster responses
  • consumer.wakeup() is now invoked before close() to avoid a close/poll race
  • Data races (volatile expiration timestamp and Basic-auth user map)
  • Heap exhaustion via unbounded length fields in the binary deserializer
  • A ByteBuf leak 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