- [Maintenance] Replace manual per-version
Warning[:performance]/Warning[:deprecated]flag setup in specs with a dynamicWarning.categories-based approach that enables all non-experimental warning categories automatically, keeping spec warning configuration in sync with karafka-rdkafka. - [Enhancement] Replace per-partition
query_watermark_offsetsconsumer calls inAdmin::Topics#read_watermark_offsetswith two batchlist_offsetsadmin calls (:earliestand:latest), reducing N sequential consumer roundtrips to 2 admin roundtrips regardless of how many topics or partitions are queried. Replace per-partitionquery_watermark_offsetsfallback inAdmin::ConsumerGroups#seek(when a time-based offset resolves beyond the last message) with a single batchlist_offsetscall covering all affected partitions. Replace per-partitionquery_watermark_offsetsloop inPro::Iterator::TplBuilder#resolve_partitions_with_negative_offsetswith one batchedoffsets_for_times(epoch)call for consumer metadata warm-up plus two batch adminlist_offsetscalls for LWM/HWM resolution, reducing N sequential calls to 3 total (Pro). - [Feature] Add
Karafka::Admin.read_partition_offsets(andAdmin::Topics#read_partition_offsets) to expose therd_kafka_ListOffsetsadmin API. Allows querying partition offsets by spec (:earliest,:latest,:max_timestamp, or a timestamp in ms) without a consumer group. Accepts an optionalisolation_level:keyword — passKarafka::Admin::IsolationLevels::READ_COMMITTEDto get the Last Stable Offset (LSO) instead of the high-watermark, giving accurate lag figures on transactionally-produced topics. - [Feature] Add
Karafka::Admin::IsolationLevelsmodule withREAD_UNCOMMITTEDandREAD_COMMITTEDconstants. These wrap the underlyingRdkafka::Bindingsinteger constants so callers do not need to reference rdkafka internals directly. - [Feature] Introduce standalone
Karafka::Declarativessubsystem (Declaratives::Topic,Declaratives::Repository,Declaratives::Builder) decoupled from routing. Topic declarations can now be defined viaKarafka::App.declaratives.drawindependently of routing blocks. The existingrouting#config(partitions:, ...)DSL continues to work as a backwards-compatible bridge that populates the shared declaratives repository. - [Enhancement] CLI topic commands (
create,delete,reset,repartition,align,migrate,plan) now read fromKarafka::App.declaratives.topicsinstead of walking the routing tree. Topics declared via the standalonedeclaratives.drawDSL are now managed by all CLI commands without requiring a routing entry. The routing bridge setsbootstrap_serverson declarations for cluster filtering. - [Enhancement] Move consumer-group-specific
Processingcomponents (Coordinator,CoordinatorsBuffer,Executor,ExecutorsBuffer,Partitioner,ExpansionsSelector,InlineInsights) and Pro equivalents (includingSubscriptionGroupsCoordinator,Collapser,AdaptiveIterator,PeriodicJob,ParallelSegments,VirtualPartitions,Filters,OffsetMetadata,Piping) under theConsumerGroupsnamespace (internal). Theconfig.processing.coordinator_class,executor_class,partitioner_class, andexpansions_selectordefaults are updated accordingly; user-provided classes are unaffected. Generic processing components (JobsQueue,Worker,WorkersPool,Schedulers::*,Jobs::Base) stay in their original locations. - [Enhancement] Move processing strategies (
Karafka::Processing::Strategies::*andKarafka::Pro::Processing::Strategies::*) under theConsumerGroupsnamespace (internal). Prepares the processing layer for parallelShareGroups::Strategiesonce KIP-932 lands. - [Enhancement] Move
Karafka::Processing::StrategySelectorandKarafka::Pro::Processing::StrategySelectorunder theConsumerGroupsnamespace (internal). Theconfig.processing.strategy_selectordefault is updated accordingly; user-provided selectors are unaffected. - [Enhancement] Move
Karafka::Connection::RebalanceManagertoKarafka::Connection::ConsumerGroups::RebalanceManager(internal). Prepares the connection layer for a parallelShareGroupsnamespace once KIP-932 lands. - [Enhancement] Move the rebalance librdkafka callback to
Karafka::Instrumentation::Callbacks::ConsumerGroups::Rebalance(internal). Published event names (rebalance.*) and payload shape are unchanged. - [Enhancement] Move
Karafka::Instrumentation::Callbacks::ErrorandKarafka::Instrumentation::Callbacks::StatisticstoKarafka::Instrumentation::Callbacks::ConsumerGroups::ErrorandConsumerGroups::Statistics(internal). Completes the callbacks layer namespacing — all consumer-group-specific librdkafka callbacks now live underCallbacks::ConsumerGroups. Published event names and payload shape are unchanged. - [Enhancement] Namespace consumer-group-specific processing job classes under
Karafka::Processing::ConsumerGroups::Jobs(OSS:Consume,Eofed,Revoked,Shutdown,Idle) andKarafka::Pro::Processing::ConsumerGroups::Jobs(Pro:ConsumeNonBlocking,EofedNonBlocking,Periodic,PeriodicNonBlocking,RevokedNonBlocking). OnlyJobs::Basestays underKarafka::Processing::Jobsas the generic base class. Internal move only — no public API changes; prepares the processing layer for parallelShareGroups::Jobs(KIP-932). - [Enhancement] Move
Karafka::Processing::JobsBuildertoKarafka::Processing::ConsumerGroups::JobsBuilderandKarafka::Pro::Processing::JobsBuildertoKarafka::Pro::Processing::ConsumerGroups::JobsBuilder(internal). The jobs builder only creates consumer-group-specific jobs; prepares the processing layer for a parallelShareGroups::JobsBuilderonce KIP-932 lands. - [Enhancement] Nest consumer-group-specific processing config settings (
coordinator_class,errors_tracker_class,partitioner_class,strategy_selector,expansions_selector,executor_class,jobs_builder) underconfig.internal.processing.consumer_groups. Shared settings (jobs_queue_class,scheduler_class,worker_job_call_wrapper) remain at theconfig.internal.processinglevel. Prepares the config structure for a parallelconfig.internal.processing.share_groupssub-namespace once KIP-932 lands. - [Enhancement] Move OSS consumer-group-specific routing features (
ActiveJob,DeadLetterQueue,Eofed,InlineInsights,ManualOffsetManagement) fromRouting::FeaturestoRouting::Features::ConsumerGroups(internal). Agnostic features (Declaratives,Deserializers) remain at theRouting::Featureslevel. Prepares the routing layer for a parallelRouting::Features::ShareGroupsnamespace once KIP-932 lands. - [Enhancement] Move Pro consumer-group-specific routing features (
ActiveJob,AdaptiveIterator,DeadLetterQueue,Delaying,DirectAssignments,InlineInsights,LongRunningJob,Multiplexing,NonBlockingJob,OffsetMetadata,ParallelSegments,Patterns,PeriodicJob,RecurringTasks,ScheduledMessages,Swarm,VirtualPartitions) fromPro::Routing::FeaturestoPro::Routing::Features::ConsumerGroups(internal). Agnostic features (Expiring,Filtering,Pausing,Throttling) remain at thePro::Routing::Featureslevel. - [Enhancement] Introduce polymorphic
Routing::Topic#groupandRouting::SubscriptionGroup#groupaccessors (with#consumer_groupkept as a backwards-compatible alias), exposegroup_idalongsideconsumer_group_idinRouting::Topic#to_h, emit parallelgroup:/group_id:keys alongsideconsumer_group:/consumer_group_id:inrebalance.*payloads, and emit parallelgroup_id:alongsideconsumer_group_id:inerror.occurredandstatistics.emittedpayloads (these callbacks only carry the group id, not the group object). Prepares routing for additional group types (e.g. KIP-932 share groups); legacy keys remain and will be retired in Karafka 3.0 once share groups land. - [Feature] Add
Processing::WorkersPoolwith dynamic thread pool scaling via#scale,nilsentinel-based worker exit for downscaling, andworker.scaling.up/worker.scaling.downinstrumentation events. - [Enhancement] Add per-partition generation tracking to
AssignmentsTrackerto distinguish first-time assignments from reassignments. - [Enhancement] Make liveness listeners fiber-safe.
- [Fix] Include orphaned node detection in Pro swarm liveness listener.
- [Fix] Report liveness on
connection.listener.before_fetch_loopso nodes send an initial healthy report before the first consumption. - [Fix] Fire liveness events during
wait_pingingso nodes continue reporting health status during shutdown with active LRJ jobs. - [Maintenance] Use namespaced topic naming format in all integration specs for consistent traceability.
- [Fix] Fix
DataCollector::SPEC_HASHproducing non-deterministic hashes for pristine and poro specs by passing the original spec path viaKARAFKA_SPEC_PATHenv var. - [Fix] Fix swarm supervisor leaking reader pipe file descriptors on node restarts by closing the old reader before creating a new pipe in
Node#start. - [Maintenance] Add
bin/tests_topics_hashesscript for looking up spec files by their topic name hash prefix. - [Change] Require
karafka-rdkafka>=0.27.1to pick up the fix forpoll_batchandpoll_batch_nbraisingRdkafkaErrorwith only the integer error code, which discarded topic/partition/offset context frome.detailsand causedpartition_eofhandling to call@buffer.eof(nil, nil), resulting in aTopicNotFoundErrorcrash. - [Fix] Raise
InvalidLicenseTokenErrorwhen a manually-definedKarafka::Licensemodule is missing required methods (#tokenor#version) instead of silently skipping pro component loading, which previously caused confusingNameErrorexceptions later in the boot process. - [Enhancement] Bump swarm supervisor
SHUTDOWN_GRACE_PERIODfrom 1s to 15s to give forked nodes enough time to finish post-shutdown_timeoutcleanup (at_exit handlers, librdkafka finalization, connection pool close) before the supervisor forcefully terminates them, especially on CI wheresleepgranularity andwaitpidcost stretch each supervision loop iteration. - [Maintenance] Fix flaky
pro/admin/recovery/coordinator_for_spec.rbby warming up the__consumer_offsetsinternal topic with a produce +seek_consumer_groupand retrying the firstRecovery.coordinator_forcall with exponential backoff onMetadataError.