karafka 2.5.10.rc1 → 2.6.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +65 -6
- data/certs/expired.txt +2 -0
- data/config/locales/errors.yml +19 -7
- data/karafka.gemspec +3 -3
- data/lib/active_job/queue_adapters/karafka_adapter.rb +2 -3
- data/lib/karafka/active_job/current_attributes/loading.rb +1 -1
- data/lib/karafka/active_job/current_attributes.rb +4 -2
- data/lib/karafka/active_job/dispatcher.rb +1 -2
- data/lib/karafka/active_job/job_extensions.rb +1 -2
- data/lib/karafka/admin/configs/resource.rb +1 -2
- data/lib/karafka/admin/consumer_groups.rb +117 -100
- data/lib/karafka/admin/isolation_levels.rb +22 -0
- data/lib/karafka/admin/replication.rb +6 -3
- data/lib/karafka/admin/topics.rb +127 -12
- data/lib/karafka/admin.rb +202 -78
- data/lib/karafka/app.rb +16 -5
- data/lib/karafka/base_consumer.rb +35 -7
- data/lib/karafka/cli/console.rb +0 -1
- data/lib/karafka/cli/contracts/server.rb +4 -4
- data/lib/karafka/cli/help.rb +0 -1
- data/lib/karafka/cli/info.rb +1 -2
- data/lib/karafka/cli/install.rb +0 -1
- data/lib/karafka/cli/server.rb +0 -1
- data/lib/karafka/cli/swarm.rb +0 -1
- data/lib/karafka/cli/topics/base.rb +10 -18
- data/lib/karafka/cli/topics/repartition.rb +1 -1
- data/lib/karafka/cli.rb +2 -2
- data/lib/karafka/connection/client.rb +77 -15
- data/lib/karafka/connection/consumer_groups/rebalance_manager.rb +120 -0
- data/lib/karafka/connection/listener.rb +8 -8
- data/lib/karafka/connection/listeners_batch.rb +1 -1
- data/lib/karafka/connection/manager.rb +0 -1
- data/lib/karafka/connection/mode.rb +1 -2
- data/lib/karafka/connection/pauses_manager.rb +17 -0
- data/lib/karafka/connection/proxy.rb +45 -0
- data/lib/karafka/connection/raw_messages_buffer.rb +0 -5
- data/lib/karafka/connection/status.rb +0 -1
- data/lib/karafka/declaratives/builder.rb +65 -0
- data/lib/karafka/declaratives/contracts/topic.rb +28 -0
- data/lib/karafka/declaratives/repository.rb +52 -0
- data/lib/karafka/declaratives/topic.rb +100 -0
- data/lib/karafka/declaratives.rb +9 -0
- data/lib/karafka/instrumentation/assignments_tracker.rb +34 -0
- data/lib/karafka/instrumentation/callbacks/consumer_groups/decorator.rb +19 -0
- data/lib/karafka/instrumentation/callbacks/consumer_groups/error.rb +55 -0
- data/lib/karafka/instrumentation/callbacks/consumer_groups/rebalance.rb +93 -0
- data/lib/karafka/instrumentation/callbacks/consumer_groups/statistics.rb +60 -0
- data/lib/karafka/instrumentation/critical_errors_listener.rb +85 -0
- data/lib/karafka/instrumentation/logger_listener.rb +10 -9
- data/lib/karafka/instrumentation/monitor.rb +2 -3
- data/lib/karafka/instrumentation/vendors/appsignal/errors_listener.rb +0 -1
- data/lib/karafka/instrumentation/vendors/appsignal/metrics_listener.rb +13 -15
- data/lib/karafka/instrumentation/vendors/datadog/logger_listener.rb +4 -3
- data/lib/karafka/instrumentation/vendors/datadog/metrics_listener.rb +7 -10
- data/lib/karafka/instrumentation/vendors/kubernetes/base_listener.rb +7 -3
- data/lib/karafka/instrumentation/vendors/kubernetes/liveness_listener.rb +181 -18
- data/lib/karafka/licenser.rb +16 -3
- data/lib/karafka/pro/active_job/consumer.rb +1 -2
- data/lib/karafka/pro/active_job/dispatcher.rb +1 -2
- data/lib/karafka/pro/admin/recovery/errors.rb +0 -1
- data/lib/karafka/pro/admin/recovery.rb +25 -23
- data/lib/karafka/pro/base_consumer.rb +6 -6
- data/lib/karafka/pro/cleaner/messages/metadata.rb +0 -1
- data/lib/karafka/pro/cli/contracts/server.rb +5 -5
- data/lib/karafka/pro/cli/parallel_segments/base.rb +8 -9
- data/lib/karafka/pro/cli/parallel_segments/collapse.rb +4 -4
- data/lib/karafka/pro/cli/parallel_segments/distribute.rb +6 -6
- data/lib/karafka/pro/connection/manager.rb +7 -4
- data/lib/karafka/pro/encryption/messages/middleware.rb +5 -0
- data/lib/karafka/pro/encryption/messages/parser.rb +4 -0
- data/lib/karafka/pro/{routing/features/long_running_job/topic.rb → instrumentation/callbacks/consumer_groups/decorator.rb} +20 -27
- data/lib/karafka/pro/instrumentation/consumer_groups/lag_compensation/compensator.rb +120 -0
- data/lib/karafka/pro/instrumentation/consumer_groups/lag_compensation/fetcher.rb +88 -0
- data/lib/karafka/pro/instrumentation/consumer_groups/lag_compensation/refresher.rb +185 -0
- data/lib/karafka/pro/instrumentation/consumer_groups/lag_compensation/registry.rb +102 -0
- data/lib/karafka/pro/instrumentation/performance_tracker.rb +40 -6
- data/lib/karafka/pro/iterator/tpl_builder.rb +58 -18
- data/lib/karafka/pro/iterator.rb +22 -7
- data/lib/karafka/pro/loader.rb +25 -12
- data/lib/karafka/pro/processing/consumer_groups/adaptive_iterator/consumer.rb +81 -0
- data/lib/karafka/pro/processing/consumer_groups/adaptive_iterator/tracker.rb +95 -0
- data/lib/karafka/pro/processing/consumer_groups/collapser.rb +81 -0
- data/lib/karafka/pro/processing/consumer_groups/coordinator.rb +199 -0
- data/lib/karafka/pro/processing/consumer_groups/coordinators/errors_tracker.rb +121 -0
- data/lib/karafka/pro/processing/consumer_groups/coordinators/filters_applier.rb +168 -0
- data/lib/karafka/pro/processing/consumer_groups/coordinators/virtual_offset_manager.rb +212 -0
- data/lib/karafka/pro/processing/{filters/expirer.rb → consumer_groups/executor.rb} +17 -31
- data/lib/karafka/pro/processing/{jobs/eofed_non_blocking.rb → consumer_groups/expansions_selector.rb} +15 -12
- data/lib/karafka/pro/processing/consumer_groups/filters/actions.rb +84 -0
- data/lib/karafka/pro/processing/consumer_groups/filters/base.rb +102 -0
- data/lib/karafka/pro/processing/consumer_groups/filters/delayer.rb +89 -0
- data/lib/karafka/pro/processing/consumer_groups/filters/expirer.rb +75 -0
- data/lib/karafka/pro/processing/consumer_groups/filters/inline_insights_delayer.rb +96 -0
- data/lib/karafka/pro/processing/consumer_groups/filters/throttler.rb +103 -0
- data/lib/karafka/pro/processing/consumer_groups/filters/virtual_limiter.rb +76 -0
- data/lib/karafka/pro/processing/{jobs → consumer_groups/jobs}/consume_non_blocking.rb +20 -17
- data/lib/karafka/pro/processing/{strategies/mom/default.rb → consumer_groups/jobs/eofed_non_blocking.rb} +13 -22
- data/lib/karafka/pro/processing/{virtual_partitions/distributors/consistent.rb → consumer_groups/jobs/periodic.rb} +23 -14
- data/lib/karafka/pro/processing/{jobs → consumer_groups/jobs}/periodic_non_blocking.rb +14 -11
- data/lib/karafka/pro/processing/consumer_groups/jobs/revoked_non_blocking.rb +57 -0
- data/lib/karafka/pro/processing/consumer_groups/jobs_builder.rb +96 -0
- data/lib/karafka/pro/processing/{filters/delayer.rb → consumer_groups/offset_metadata/consumer.rb} +21 -46
- data/lib/karafka/pro/processing/consumer_groups/offset_metadata/fetcher.rb +152 -0
- data/lib/karafka/pro/{routing/features/patterns/config.rb → processing/consumer_groups/offset_metadata/listener.rb} +22 -28
- data/lib/karafka/pro/processing/consumer_groups/parallel_segments/filters/base.rb +100 -0
- data/lib/karafka/pro/processing/consumer_groups/parallel_segments/filters/default.rb +112 -0
- data/lib/karafka/pro/processing/consumer_groups/parallel_segments/filters/mom.rb +93 -0
- data/lib/karafka/pro/processing/consumer_groups/partitioner.rb +95 -0
- data/lib/karafka/pro/processing/consumer_groups/periodic_job/consumer.rb +87 -0
- data/lib/karafka/pro/processing/consumer_groups/piping/consumer.rb +151 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_ftr_lrj_mom.rb +94 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_ftr_lrj_mom_vp.rb +100 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_ftr_mom.rb +89 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_ftr_mom_vp.rb +87 -0
- data/lib/karafka/pro/processing/{strategies/aj/dlq_ftr_lrj_mom.rb → consumer_groups/strategies/aj/dlq_lrj_mom.rb} +38 -39
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_lrj_mom_vp.rb +91 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_mom.rb +81 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_mom_vp.rb +86 -0
- data/lib/karafka/pro/processing/{virtual_partitions/distributors/base.rb → consumer_groups/strategies/aj/ftr_lrj_mom.rb} +17 -14
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/ftr_lrj_mom_vp.rb +88 -0
- data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/aj/ftr_mom.rb +16 -15
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/ftr_mom_vp.rb +76 -0
- data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/aj/lrj_mom.rb +16 -14
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/lrj_mom_vp.rb +103 -0
- data/lib/karafka/pro/processing/{strategies/aj/ftr_lrj_mom.rb → consumer_groups/strategies/aj/mom.rb} +15 -15
- data/lib/karafka/pro/processing/{strategies/mom/ftr.rb → consumer_groups/strategies/aj/mom_vp.rb} +25 -24
- data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/base.rb +7 -5
- data/lib/karafka/pro/processing/consumer_groups/strategies/default.rb +444 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/default.rb +298 -0
- data/lib/karafka/pro/processing/{strategies/aj/ftr_mom_vp.rb → consumer_groups/strategies/dlq/ftr.rb} +29 -28
- data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/ftr_lrj.rb +92 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/ftr_lrj_mom.rb +94 -0
- data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/dlq/ftr_lrj_mom_vp.rb +22 -20
- data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/dlq/ftr_lrj_vp.rb +19 -18
- data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/ftr_mom.rb +94 -0
- data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/dlq/ftr_mom_vp.rb +20 -18
- data/lib/karafka/pro/processing/{strategies/lrj → consumer_groups/strategies/dlq}/ftr_vp.rb +19 -16
- data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/dlq/lrj.rb +31 -29
- data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/lrj_mom.rb +97 -0
- data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/dlq/lrj_mom_vp.rb +15 -13
- data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/dlq/lrj_vp.rb +18 -16
- data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/mom.rb +93 -0
- data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/dlq/mom_vp.rb +16 -14
- data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/vp.rb +119 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/ftr/default.rb +142 -0
- data/lib/karafka/pro/{routing/features/patterns/patterns.rb → processing/consumer_groups/strategies/ftr/vp.rb} +19 -12
- data/lib/karafka/pro/processing/consumer_groups/strategies/lrj/default.rb +116 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/lrj/ftr.rb +91 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/lrj/ftr_mom.rb +89 -0
- data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/lrj/ftr_mom_vp.rb +18 -17
- data/lib/karafka/pro/processing/{strategies/mom → consumer_groups/strategies/lrj}/ftr_vp.rb +18 -14
- data/lib/karafka/pro/processing/consumer_groups/strategies/lrj/mom.rb +98 -0
- data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/lrj/mom_vp.rb +16 -15
- data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/lrj/vp.rb +15 -13
- data/lib/karafka/pro/processing/{strategies/aj/mom_vp.rb → consumer_groups/strategies/mom/default.rb} +19 -23
- data/lib/karafka/pro/processing/{strategies/dlq → consumer_groups/strategies/mom}/ftr.rb +24 -26
- data/lib/karafka/pro/processing/{strategies/aj/mom.rb → consumer_groups/strategies/mom/ftr_vp.rb} +15 -12
- data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/mom/vp.rb +14 -12
- data/lib/karafka/pro/processing/consumer_groups/strategies/vp/default.rb +202 -0
- data/lib/karafka/pro/processing/consumer_groups/strategy_selector.rb +103 -0
- data/lib/karafka/pro/processing/{jobs/periodic.rb → consumer_groups/subscription_groups_coordinator.rb} +26 -16
- data/lib/karafka/pro/processing/consumer_groups/virtual_partitions/distributors/balanced.rb +79 -0
- data/lib/karafka/pro/{routing/features/long_running_job/contracts/topic.rb → processing/consumer_groups/virtual_partitions/distributors/base.rb} +16 -14
- data/lib/karafka/pro/processing/consumer_groups/virtual_partitions/distributors/consistent.rb +56 -0
- data/lib/karafka/pro/processing/filters/base.rb +3 -61
- data/lib/karafka/pro/processing/jobs_queue.rb +4 -1
- data/lib/karafka/pro/processing/partitioner.rb +2 -57
- data/lib/karafka/pro/processing/schedulers/base.rb +12 -6
- data/lib/karafka/pro/processing/schedulers/default.rb +8 -7
- data/lib/karafka/pro/recurring_tasks/consumer.rb +9 -2
- data/lib/karafka/pro/recurring_tasks/contracts/config.rb +0 -1
- data/lib/karafka/pro/recurring_tasks/executor.rb +26 -15
- data/lib/karafka/pro/routing/features/{active_job → consumer_groups/active_job}/builder.rb +20 -18
- data/lib/karafka/pro/routing/features/{inline_insights/config.rb → consumer_groups/active_job.rb} +5 -9
- data/lib/karafka/pro/routing/features/consumer_groups/adaptive_iterator/config.rb +53 -0
- data/lib/karafka/pro/routing/features/consumer_groups/adaptive_iterator/contracts/topic.rb +91 -0
- data/lib/karafka/pro/routing/features/consumer_groups/adaptive_iterator/topic.rb +90 -0
- data/lib/karafka/pro/routing/features/consumer_groups/adaptive_iterator.rb +50 -0
- data/lib/karafka/pro/routing/features/{patterns/contracts/consumer_group.rb → consumer_groups/dead_letter_queue/contracts/topic.rb} +25 -30
- data/lib/karafka/pro/routing/features/consumer_groups/dead_letter_queue/topic.rb +70 -0
- data/lib/karafka/pro/routing/features/consumer_groups/dead_letter_queue.rb +46 -0
- data/lib/karafka/pro/routing/features/{swarm → consumer_groups/delaying}/config.rb +6 -8
- data/lib/karafka/pro/routing/features/{patterns/contracts/pattern.rb → consumer_groups/delaying/contracts/topic.rb} +13 -16
- data/lib/karafka/pro/routing/features/consumer_groups/delaying/topic.rb +85 -0
- data/lib/karafka/pro/routing/features/{adaptive_iterator/config.rb → consumer_groups/delaying.rb} +8 -11
- data/lib/karafka/pro/routing/features/consumer_groups/direct_assignments/config.rb +46 -0
- data/lib/karafka/pro/routing/features/consumer_groups/direct_assignments/contracts/consumer_group.rb +68 -0
- data/lib/karafka/pro/routing/features/consumer_groups/direct_assignments/contracts/topic.rb +125 -0
- data/lib/karafka/pro/routing/features/consumer_groups/direct_assignments/subscription_group.rb +95 -0
- data/lib/karafka/pro/routing/features/consumer_groups/direct_assignments/topic.rb +97 -0
- data/lib/karafka/pro/routing/features/consumer_groups/direct_assignments.rb +44 -0
- data/lib/karafka/pro/routing/features/consumer_groups/inline_insights/config.rb +51 -0
- data/lib/karafka/pro/routing/features/consumer_groups/inline_insights/contracts/topic.rb +58 -0
- data/lib/karafka/pro/routing/features/consumer_groups/inline_insights/topic.rb +80 -0
- data/lib/karafka/pro/routing/features/consumer_groups/inline_insights.rb +45 -0
- data/lib/karafka/pro/routing/features/consumer_groups/long_running_job/config.rb +47 -0
- data/lib/karafka/pro/routing/features/{multiplexing/patches/contracts/consumer_group.rb → consumer_groups/long_running_job/contracts/topic.rb} +13 -15
- data/lib/karafka/pro/routing/features/{offset_metadata/contracts → consumer_groups/long_running_job}/topic.rb +28 -13
- data/lib/karafka/pro/routing/features/{direct_assignments/config.rb → consumer_groups/long_running_job.rb} +5 -4
- data/lib/karafka/pro/routing/features/consumer_groups/multiplexing/config.rb +58 -0
- data/lib/karafka/pro/routing/features/consumer_groups/multiplexing/contracts/routing.rb +83 -0
- data/lib/karafka/pro/routing/features/consumer_groups/multiplexing/contracts/topic.rb +148 -0
- data/lib/karafka/pro/routing/features/consumer_groups/multiplexing/patches/contracts/consumer_group.rb +61 -0
- data/lib/karafka/pro/routing/features/{multiplexing/subscription_group.rb → consumer_groups/multiplexing/proxy.rb} +17 -23
- data/lib/karafka/pro/routing/features/consumer_groups/multiplexing/subscription_group.rb +68 -0
- data/lib/karafka/pro/routing/features/{multiplexing → consumer_groups/multiplexing}/subscription_groups_builder.rb +16 -14
- data/lib/karafka/pro/routing/features/consumer_groups/multiplexing.rb +85 -0
- data/lib/karafka/pro/routing/features/consumer_groups/non_blocking_job/topic.rb +51 -0
- data/lib/karafka/pro/routing/features/consumer_groups/non_blocking_job.rb +54 -0
- data/lib/karafka/pro/routing/features/consumer_groups/offset_metadata/config.rb +52 -0
- data/lib/karafka/pro/routing/features/consumer_groups/offset_metadata/contracts/topic.rb +59 -0
- data/lib/karafka/pro/routing/features/consumer_groups/offset_metadata/topic.rb +87 -0
- data/lib/karafka/pro/routing/features/{offset_metadata.rb → consumer_groups/offset_metadata.rb} +16 -14
- data/lib/karafka/pro/routing/features/consumer_groups/parallel_segments/builder.rb +74 -0
- data/lib/karafka/pro/routing/features/{multiplexing → consumer_groups/parallel_segments}/config.rb +13 -15
- data/lib/karafka/pro/routing/features/consumer_groups/parallel_segments/consumer_group.rb +111 -0
- data/lib/karafka/pro/routing/features/consumer_groups/parallel_segments/contracts/consumer_group.rb +74 -0
- data/lib/karafka/pro/routing/features/{parallel_segments → consumer_groups/parallel_segments}/topic.rb +24 -22
- data/lib/karafka/pro/routing/features/consumer_groups/parallel_segments.rb +51 -0
- data/lib/karafka/pro/routing/features/{patterns → consumer_groups/patterns}/builder.rb +15 -13
- data/lib/karafka/pro/routing/features/{delaying/contracts/topic.rb → consumer_groups/patterns/config.rb} +22 -12
- data/lib/karafka/pro/routing/features/consumer_groups/patterns/consumer_group.rb +92 -0
- data/lib/karafka/pro/routing/features/consumer_groups/patterns/contracts/consumer_group.rb +83 -0
- data/lib/karafka/pro/routing/features/{parallel_segments.rb → consumer_groups/patterns/contracts/pattern.rb} +23 -10
- data/lib/karafka/pro/routing/features/consumer_groups/patterns/contracts/topic.rb +58 -0
- data/lib/karafka/pro/routing/features/consumer_groups/patterns/detector.rb +99 -0
- data/lib/karafka/pro/routing/features/consumer_groups/patterns/pattern.rb +115 -0
- data/lib/karafka/pro/routing/features/{recurring_tasks/contracts/topic.rb → consumer_groups/patterns/patterns.rb} +12 -13
- data/lib/karafka/pro/routing/features/consumer_groups/patterns/topic.rb +78 -0
- data/lib/karafka/pro/routing/features/consumer_groups/patterns/topics.rb +72 -0
- data/lib/karafka/pro/routing/features/consumer_groups/patterns.rb +52 -0
- data/lib/karafka/pro/routing/features/consumer_groups/periodic_job/config.rb +56 -0
- data/lib/karafka/pro/routing/features/{direct_assignments/contracts/consumer_group.rb → consumer_groups/periodic_job/contracts/topic.rb} +17 -22
- data/lib/karafka/pro/routing/features/consumer_groups/periodic_job/topic.rb +122 -0
- data/lib/karafka/pro/routing/features/consumer_groups/periodic_job.rb +46 -0
- data/lib/karafka/pro/routing/features/consumer_groups/recurring_tasks/builder.rb +170 -0
- data/lib/karafka/pro/routing/features/consumer_groups/recurring_tasks/config.rb +47 -0
- data/lib/karafka/pro/routing/features/{inline_insights → consumer_groups/recurring_tasks}/contracts/topic.rb +14 -13
- data/lib/karafka/pro/routing/features/{scheduled_messages → consumer_groups/recurring_tasks}/proxy.rb +6 -4
- data/lib/karafka/pro/routing/features/consumer_groups/recurring_tasks/topic.rb +72 -0
- data/lib/karafka/pro/routing/features/consumer_groups/recurring_tasks.rb +44 -0
- data/lib/karafka/pro/routing/features/consumer_groups/scheduled_messages/builder.rb +178 -0
- data/lib/karafka/pro/routing/features/consumer_groups/scheduled_messages/config.rb +47 -0
- data/lib/karafka/pro/routing/features/consumer_groups/scheduled_messages/contracts/topic.rb +57 -0
- data/lib/karafka/pro/routing/features/{delaying/config.rb → consumer_groups/scheduled_messages/proxy.rb} +6 -4
- data/lib/karafka/pro/routing/features/{delaying → consumer_groups/scheduled_messages}/topic.rb +28 -38
- data/lib/karafka/pro/routing/features/{recurring_tasks/proxy.rb → consumer_groups/scheduled_messages.rb} +3 -4
- data/lib/karafka/pro/routing/features/{non_blocking_job/topic.rb → consumer_groups/swarm/config.rb} +9 -8
- data/lib/karafka/pro/routing/features/consumer_groups/swarm/contracts/routing.rb +94 -0
- data/lib/karafka/pro/routing/features/consumer_groups/swarm/contracts/topic.rb +95 -0
- data/lib/karafka/pro/routing/features/consumer_groups/swarm/topic.rb +105 -0
- data/lib/karafka/pro/routing/features/consumer_groups/swarm.rb +58 -0
- data/lib/karafka/pro/routing/features/consumer_groups/virtual_partitions/config.rb +69 -0
- data/lib/karafka/pro/routing/features/{parallel_segments/contracts/consumer_group.rb → consumer_groups/virtual_partitions/contracts/topic.rb} +21 -18
- data/lib/karafka/pro/routing/features/consumer_groups/virtual_partitions/topic.rb +102 -0
- data/lib/karafka/pro/routing/features/consumer_groups/virtual_partitions.rb +46 -0
- data/lib/karafka/pro/routing/features/{scheduled_messages.rb → consumer_groups.rb} +3 -2
- data/lib/karafka/pro/routing/features/expiring/topic.rb +4 -4
- data/lib/karafka/pro/routing/features/filtering/topic.rb +3 -3
- data/lib/karafka/pro/routing/features/pausing/topic.rb +3 -3
- data/lib/karafka/pro/routing/features/throttling/topic.rb +4 -4
- data/lib/karafka/pro/scheduled_messages/consumer.rb +7 -1
- data/lib/karafka/pro/scheduled_messages/schema_validator.rb +6 -1
- data/lib/karafka/pro/swarm/liveness_listener.rb +118 -13
- data/lib/karafka/pro.rb +0 -6
- data/lib/karafka/processing/consumer_groups/coordinator.rb +220 -0
- data/lib/karafka/processing/consumer_groups/coordinators_buffer.rb +73 -0
- data/lib/karafka/processing/consumer_groups/executor.rb +220 -0
- data/lib/karafka/processing/consumer_groups/executors_buffer.rb +92 -0
- data/lib/karafka/processing/consumer_groups/expansions_selector.rb +24 -0
- data/lib/karafka/processing/consumer_groups/inline_insights/consumer.rb +45 -0
- data/lib/karafka/processing/consumer_groups/inline_insights/listener.rb +21 -0
- data/lib/karafka/processing/consumer_groups/inline_insights/tracker.rb +130 -0
- data/lib/karafka/processing/consumer_groups/jobs/consume.rb +49 -0
- data/lib/karafka/processing/consumer_groups/jobs/eofed.rb +33 -0
- data/lib/karafka/processing/consumer_groups/jobs/idle.rb +33 -0
- data/lib/karafka/processing/consumer_groups/jobs/revoked.rb +32 -0
- data/lib/karafka/processing/consumer_groups/jobs/shutdown.rb +32 -0
- data/lib/karafka/processing/consumer_groups/jobs_builder.rb +36 -0
- data/lib/karafka/processing/consumer_groups/partitioner.rb +25 -0
- data/lib/karafka/processing/consumer_groups/strategies/aj_dlq_mom.rb +51 -0
- data/lib/karafka/processing/consumer_groups/strategies/aj_mom.rb +23 -0
- data/lib/karafka/processing/consumer_groups/strategies/base.rb +63 -0
- data/lib/karafka/processing/consumer_groups/strategies/default.rb +248 -0
- data/lib/karafka/processing/consumer_groups/strategies/dlq.rb +160 -0
- data/lib/karafka/processing/consumer_groups/strategies/dlq_mom.rb +75 -0
- data/lib/karafka/processing/consumer_groups/strategies/mom.rb +32 -0
- data/lib/karafka/processing/consumer_groups/strategy_selector.rb +51 -0
- data/lib/karafka/processing/coordinator.rb +2 -211
- data/lib/karafka/processing/coordinators_buffer.rb +2 -59
- data/lib/karafka/processing/partitioner.rb +2 -18
- data/lib/karafka/processing/schedulers/default.rb +2 -1
- data/lib/karafka/processing/strategy_selector.rb +2 -42
- data/lib/karafka/processing/worker.rb +15 -8
- data/lib/karafka/processing/workers_pool.rb +21 -4
- data/lib/karafka/railtie.rb +0 -1
- data/lib/karafka/routing/builder.rb +12 -12
- data/lib/karafka/routing/contracts/routing.rb +5 -6
- data/lib/karafka/routing/features/base/expander.rb +5 -5
- data/lib/karafka/routing/features/consumer_groups/active_job/builder.rb +35 -0
- data/lib/karafka/routing/features/consumer_groups/active_job/config.rb +17 -0
- data/lib/karafka/routing/features/consumer_groups/active_job/contracts/topic.rb +44 -0
- data/lib/karafka/routing/features/consumer_groups/active_job/proxy.rb +16 -0
- data/lib/karafka/routing/features/consumer_groups/active_job/topic.rb +51 -0
- data/lib/karafka/routing/features/consumer_groups/active_job.rb +15 -0
- data/lib/karafka/routing/features/consumer_groups/dead_letter_queue/config.rb +39 -0
- data/lib/karafka/routing/features/consumer_groups/dead_letter_queue/contracts/topic.rb +58 -0
- data/lib/karafka/routing/features/consumer_groups/dead_letter_queue/topic.rb +76 -0
- data/lib/karafka/routing/features/consumer_groups/dead_letter_queue.rb +18 -0
- data/lib/karafka/routing/features/consumer_groups/eofed/config.rb +17 -0
- data/lib/karafka/routing/features/consumer_groups/eofed/contracts/topic.rb +39 -0
- data/lib/karafka/routing/features/consumer_groups/eofed/topic.rb +42 -0
- data/lib/karafka/routing/features/consumer_groups/eofed.rb +16 -0
- data/lib/karafka/routing/features/consumer_groups/inline_insights/config.rb +17 -0
- data/lib/karafka/routing/features/consumer_groups/inline_insights/contracts/topic.rb +27 -0
- data/lib/karafka/routing/features/consumer_groups/inline_insights/topic.rb +42 -0
- data/lib/karafka/routing/features/consumer_groups/inline_insights.rb +42 -0
- data/lib/karafka/routing/features/consumer_groups/manual_offset_management/config.rb +17 -0
- data/lib/karafka/routing/features/consumer_groups/manual_offset_management/contracts/topic.rb +27 -0
- data/lib/karafka/routing/features/consumer_groups/manual_offset_management/topic.rb +46 -0
- data/lib/karafka/routing/features/consumer_groups/manual_offset_management.rb +20 -0
- data/lib/karafka/routing/features/consumer_groups.rb +12 -0
- data/lib/karafka/routing/features/declaratives/contracts/topic.rb +4 -19
- data/lib/karafka/routing/features/declaratives/topic.rb +30 -14
- data/lib/karafka/routing/features/deserializers/topic.rb +3 -4
- data/lib/karafka/routing/router.rb +2 -2
- data/lib/karafka/routing/subscription_group.rb +18 -9
- data/lib/karafka/routing/topic.rb +25 -11
- data/lib/karafka/routing/topics.rb +21 -1
- data/lib/karafka/server.rb +13 -0
- data/lib/karafka/setup/config.rb +118 -25
- data/lib/karafka/setup/config_proxy.rb +3 -3
- data/lib/karafka/setup/contracts/config.rb +25 -8
- data/lib/karafka/status.rb +1 -2
- data/lib/karafka/swarm/node.rb +10 -2
- data/lib/karafka/swarm/supervisor.rb +9 -1
- data/lib/karafka/templates/karafka.rb.erb +11 -5
- data/lib/karafka/version.rb +1 -2
- data/lib/karafka.rb +2 -2
- metadata +243 -223
- data/lib/karafka/connection/rebalance_manager.rb +0 -116
- data/lib/karafka/instrumentation/callbacks/error.rb +0 -52
- data/lib/karafka/instrumentation/callbacks/rebalance.rb +0 -84
- data/lib/karafka/instrumentation/callbacks/statistics.rb +0 -55
- data/lib/karafka/pro/processing/adaptive_iterator/consumer.rb +0 -79
- data/lib/karafka/pro/processing/adaptive_iterator/tracker.rb +0 -92
- data/lib/karafka/pro/processing/collapser.rb +0 -79
- data/lib/karafka/pro/processing/coordinator.rb +0 -197
- data/lib/karafka/pro/processing/coordinators/errors_tracker.rb +0 -119
- data/lib/karafka/pro/processing/coordinators/filters_applier.rb +0 -152
- data/lib/karafka/pro/processing/coordinators/virtual_offset_manager.rb +0 -207
- data/lib/karafka/pro/processing/executor.rb +0 -54
- data/lib/karafka/pro/processing/expansions_selector.rb +0 -52
- data/lib/karafka/pro/processing/filters/inline_insights_delayer.rb +0 -95
- data/lib/karafka/pro/processing/filters/throttler.rb +0 -101
- data/lib/karafka/pro/processing/filters/virtual_limiter.rb +0 -74
- data/lib/karafka/pro/processing/jobs/revoked_non_blocking.rb +0 -56
- data/lib/karafka/pro/processing/jobs_builder.rb +0 -90
- data/lib/karafka/pro/processing/offset_metadata/consumer.rb +0 -61
- data/lib/karafka/pro/processing/offset_metadata/fetcher.rb +0 -149
- data/lib/karafka/pro/processing/offset_metadata/listener.rb +0 -63
- data/lib/karafka/pro/processing/parallel_segments/filters/base.rb +0 -98
- data/lib/karafka/pro/processing/parallel_segments/filters/default.rb +0 -110
- data/lib/karafka/pro/processing/parallel_segments/filters/mom.rb +0 -91
- data/lib/karafka/pro/processing/periodic_job/consumer.rb +0 -85
- data/lib/karafka/pro/processing/piping/consumer.rb +0 -149
- data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_lrj_mom_vp.rb +0 -94
- data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_mom.rb +0 -87
- data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_mom_vp.rb +0 -85
- data/lib/karafka/pro/processing/strategies/aj/dlq_lrj_mom.rb +0 -81
- data/lib/karafka/pro/processing/strategies/aj/dlq_lrj_mom_vp.rb +0 -85
- data/lib/karafka/pro/processing/strategies/aj/dlq_mom.rb +0 -79
- data/lib/karafka/pro/processing/strategies/aj/dlq_mom_vp.rb +0 -84
- data/lib/karafka/pro/processing/strategies/aj/ftr_lrj_mom_vp.rb +0 -86
- data/lib/karafka/pro/processing/strategies/aj/lrj_mom_vp.rb +0 -101
- data/lib/karafka/pro/processing/strategies/default.rb +0 -416
- data/lib/karafka/pro/processing/strategies/dlq/default.rb +0 -280
- data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj.rb +0 -90
- data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj_mom.rb +0 -92
- data/lib/karafka/pro/processing/strategies/dlq/ftr_mom.rb +0 -92
- data/lib/karafka/pro/processing/strategies/dlq/ftr_vp.rb +0 -57
- data/lib/karafka/pro/processing/strategies/dlq/lrj_mom.rb +0 -95
- data/lib/karafka/pro/processing/strategies/dlq/mom.rb +0 -91
- data/lib/karafka/pro/processing/strategies/dlq/vp.rb +0 -57
- data/lib/karafka/pro/processing/strategies/ftr/default.rb +0 -141
- data/lib/karafka/pro/processing/strategies/ftr/vp.rb +0 -57
- data/lib/karafka/pro/processing/strategies/lrj/default.rb +0 -114
- data/lib/karafka/pro/processing/strategies/lrj/ftr.rb +0 -89
- data/lib/karafka/pro/processing/strategies/lrj/ftr_mom.rb +0 -87
- data/lib/karafka/pro/processing/strategies/lrj/mom.rb +0 -96
- data/lib/karafka/pro/processing/strategies/vp/default.rb +0 -192
- data/lib/karafka/pro/processing/strategies.rb +0 -39
- data/lib/karafka/pro/processing/strategy_selector.rb +0 -102
- data/lib/karafka/pro/processing/subscription_groups_coordinator.rb +0 -68
- data/lib/karafka/pro/processing/virtual_partitions/distributors/balanced.rb +0 -77
- data/lib/karafka/pro/routing/features/active_job.rb +0 -43
- data/lib/karafka/pro/routing/features/adaptive_iterator/contracts/topic.rb +0 -89
- data/lib/karafka/pro/routing/features/adaptive_iterator/topic.rb +0 -88
- data/lib/karafka/pro/routing/features/adaptive_iterator.rb +0 -48
- data/lib/karafka/pro/routing/features/dead_letter_queue/contracts/topic.rb +0 -74
- data/lib/karafka/pro/routing/features/dead_letter_queue/topic.rb +0 -68
- data/lib/karafka/pro/routing/features/dead_letter_queue.rb +0 -44
- data/lib/karafka/pro/routing/features/delaying.rb +0 -46
- data/lib/karafka/pro/routing/features/direct_assignments/contracts/topic.rb +0 -123
- data/lib/karafka/pro/routing/features/direct_assignments/subscription_group.rb +0 -95
- data/lib/karafka/pro/routing/features/direct_assignments/topic.rb +0 -95
- data/lib/karafka/pro/routing/features/direct_assignments.rb +0 -42
- data/lib/karafka/pro/routing/features/inline_insights/topic.rb +0 -78
- data/lib/karafka/pro/routing/features/inline_insights.rb +0 -43
- data/lib/karafka/pro/routing/features/long_running_job/config.rb +0 -45
- data/lib/karafka/pro/routing/features/long_running_job.rb +0 -45
- data/lib/karafka/pro/routing/features/multiplexing/contracts/routing.rb +0 -81
- data/lib/karafka/pro/routing/features/multiplexing/contracts/topic.rb +0 -146
- data/lib/karafka/pro/routing/features/multiplexing/proxy.rb +0 -58
- data/lib/karafka/pro/routing/features/multiplexing.rb +0 -83
- data/lib/karafka/pro/routing/features/non_blocking_job.rb +0 -54
- data/lib/karafka/pro/routing/features/offset_metadata/config.rb +0 -50
- data/lib/karafka/pro/routing/features/offset_metadata/topic.rb +0 -91
- data/lib/karafka/pro/routing/features/parallel_segments/builder.rb +0 -72
- data/lib/karafka/pro/routing/features/parallel_segments/config.rb +0 -52
- data/lib/karafka/pro/routing/features/parallel_segments/consumer_group.rb +0 -108
- data/lib/karafka/pro/routing/features/patterns/consumer_group.rb +0 -89
- data/lib/karafka/pro/routing/features/patterns/contracts/topic.rb +0 -56
- data/lib/karafka/pro/routing/features/patterns/detector.rb +0 -96
- data/lib/karafka/pro/routing/features/patterns/pattern.rb +0 -112
- data/lib/karafka/pro/routing/features/patterns/topic.rb +0 -76
- data/lib/karafka/pro/routing/features/patterns/topics.rb +0 -70
- data/lib/karafka/pro/routing/features/patterns.rb +0 -50
- data/lib/karafka/pro/routing/features/periodic_job/config.rb +0 -54
- data/lib/karafka/pro/routing/features/periodic_job/contracts/topic.rb +0 -59
- data/lib/karafka/pro/routing/features/periodic_job/topic.rb +0 -120
- data/lib/karafka/pro/routing/features/periodic_job.rb +0 -44
- data/lib/karafka/pro/routing/features/recurring_tasks/builder.rb +0 -148
- data/lib/karafka/pro/routing/features/recurring_tasks/config.rb +0 -45
- data/lib/karafka/pro/routing/features/recurring_tasks/topic.rb +0 -70
- data/lib/karafka/pro/routing/features/recurring_tasks.rb +0 -42
- data/lib/karafka/pro/routing/features/scheduled_messages/builder.rb +0 -152
- data/lib/karafka/pro/routing/features/scheduled_messages/config.rb +0 -45
- data/lib/karafka/pro/routing/features/scheduled_messages/contracts/topic.rb +0 -55
- data/lib/karafka/pro/routing/features/scheduled_messages/topic.rb +0 -70
- data/lib/karafka/pro/routing/features/swarm/contracts/routing.rb +0 -92
- data/lib/karafka/pro/routing/features/swarm/contracts/topic.rb +0 -93
- data/lib/karafka/pro/routing/features/swarm/topic.rb +0 -103
- data/lib/karafka/pro/routing/features/swarm.rb +0 -56
- data/lib/karafka/pro/routing/features/virtual_partitions/config.rb +0 -67
- data/lib/karafka/pro/routing/features/virtual_partitions/contracts/topic.rb +0 -73
- data/lib/karafka/pro/routing/features/virtual_partitions/topic.rb +0 -99
- data/lib/karafka/pro/routing/features/virtual_partitions.rb +0 -44
- data/lib/karafka/processing/executor.rb +0 -216
- data/lib/karafka/processing/executors_buffer.rb +0 -90
- data/lib/karafka/processing/expansions_selector.rb +0 -22
- data/lib/karafka/processing/inline_insights/consumer.rb +0 -43
- data/lib/karafka/processing/inline_insights/listener.rb +0 -19
- data/lib/karafka/processing/inline_insights/tracker.rb +0 -129
- data/lib/karafka/processing/jobs/consume.rb +0 -47
- data/lib/karafka/processing/jobs/eofed.rb +0 -29
- data/lib/karafka/processing/jobs/idle.rb +0 -31
- data/lib/karafka/processing/jobs/revoked.rb +0 -29
- data/lib/karafka/processing/jobs/shutdown.rb +0 -30
- data/lib/karafka/processing/jobs_builder.rb +0 -34
- data/lib/karafka/processing/strategies/aj_dlq_mom.rb +0 -44
- data/lib/karafka/processing/strategies/aj_mom.rb +0 -21
- data/lib/karafka/processing/strategies/base.rb +0 -61
- data/lib/karafka/processing/strategies/default.rb +0 -214
- data/lib/karafka/processing/strategies/dlq.rb +0 -153
- data/lib/karafka/processing/strategies/dlq_mom.rb +0 -68
- data/lib/karafka/processing/strategies/mom.rb +0 -29
- data/lib/karafka/routing/features/active_job/builder.rb +0 -33
- data/lib/karafka/routing/features/active_job/config.rb +0 -15
- data/lib/karafka/routing/features/active_job/contracts/topic.rb +0 -42
- data/lib/karafka/routing/features/active_job/proxy.rb +0 -14
- data/lib/karafka/routing/features/active_job/topic.rb +0 -48
- data/lib/karafka/routing/features/active_job.rb +0 -13
- data/lib/karafka/routing/features/dead_letter_queue/config.rb +0 -37
- data/lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb +0 -56
- data/lib/karafka/routing/features/dead_letter_queue/topic.rb +0 -74
- data/lib/karafka/routing/features/dead_letter_queue.rb +0 -16
- data/lib/karafka/routing/features/declaratives/config.rb +0 -18
- data/lib/karafka/routing/features/eofed/config.rb +0 -15
- data/lib/karafka/routing/features/eofed/contracts/topic.rb +0 -37
- data/lib/karafka/routing/features/eofed/topic.rb +0 -40
- data/lib/karafka/routing/features/eofed.rb +0 -14
- data/lib/karafka/routing/features/inline_insights/config.rb +0 -15
- data/lib/karafka/routing/features/inline_insights/contracts/topic.rb +0 -25
- data/lib/karafka/routing/features/inline_insights/topic.rb +0 -40
- data/lib/karafka/routing/features/inline_insights.rb +0 -40
- data/lib/karafka/routing/features/manual_offset_management/config.rb +0 -15
- data/lib/karafka/routing/features/manual_offset_management/contracts/topic.rb +0 -25
- data/lib/karafka/routing/features/manual_offset_management/topic.rb +0 -44
- data/lib/karafka/routing/features/manual_offset_management.rb +0 -18
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: bc797708a61eca1cc0309dce91d05ab1dd623f3c7f6abfd74ac7af69c98f5254
|
|
4
|
+
data.tar.gz: 9e0e3bace7cc9f5393dfe788035ddc6e89cd64c8afd7ed5a2400d841cce95637
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 512bed7912b22916225f0428cf1ef949e534765eaca459606155e451566e847c3c0993a83978f230f72ac202e2d6e797415df4086ed00b37bfdbcdb94f5f4e06
|
|
7
|
+
data.tar.gz: f0152dec64b5ba30ebae473db2236848b6a3298473be0dec7956330e44e973593311a70e616eb68cc8705fdbcdf55a53eff1d54a230658a0307d7ba6b00cb413
|
data/CHANGELOG.md
CHANGED
|
@@ -1,16 +1,75 @@
|
|
|
1
1
|
# Karafka Framework Changelog
|
|
2
2
|
|
|
3
|
-
## 2.
|
|
3
|
+
## 2.6.0 (Unreleased)
|
|
4
|
+
- **[Feature]** Add `Karafka::Admin.read_partition_offsets` (and `Admin::Topics#read_partition_offsets`) exposing the `rd_kafka_ListOffsets` admin API to query partition offsets by spec (`:earliest`, `:latest`, `:max_timestamp`, or a timestamp in ms) without a consumer group. Accepts an optional `isolation_level:` keyword (pass `READ_COMMITTED` for the Last Stable Offset instead of the high-watermark, giving accurate lag on transactional topics).
|
|
5
|
+
- **[Feature]** Add `Karafka::Connection::Client#read_partition_offsets` (and `Connection::Proxy#read_partition_offsets`) exposing the batched `ListOffsets` query on a consumer's own connection, forwarding its `isolation.level`. Note that `:latest` resolves to the high watermark regardless of isolation level, so it includes uncommitted messages on topics with in-flight transactions.
|
|
6
|
+
- **[Feature]** Allow `Karafka::Admin` (and subsystems like `Admin::ConsumerGroups`, `Admin::Topics`) to operate on an external client via `Karafka::Admin.new(external_client: client)`. Reuses the caller's client (no per-call bootstrap); its lifecycle stays with its owner.
|
|
7
|
+
- **[Feature]** Add `Karafka::Admin::IsolationLevels` module with `READ_UNCOMMITTED` and `READ_COMMITTED` constants wrapping the underlying rdkafka integer constants.
|
|
8
|
+
- **[Feature]** Introduce standalone `Karafka::Declaratives` subsystem (`Declaratives::Topic`, `Declaratives::Repository`, `Declaratives::Builder`) decoupled from routing. Topics can be declared via `Karafka::App.declaratives.draw`; the existing `routing#config(...)` DSL keeps working as a backwards-compatible bridge.
|
|
4
9
|
- **[Feature]** Add `Processing::WorkersPool` with dynamic thread pool scaling via `#scale`, `nil` sentinel-based worker exit for downscaling, and `worker.scaling.up`/`worker.scaling.down` instrumentation events.
|
|
10
|
+
- [Enhancement] Refresh watermark offsets and lags of long-paused partitions in `statistics.emitted` (Pro). Opt-in via `config.internal.statistics.consumer_groups.lag_compensation.interval` (ms, default `0` - disabled); partitions qualify after being paused for at least `lag_compensation.pause_age` (ms, min `5_000`, default `30_000`). Refreshed values are kept on resume until live statistics catch up, then dropped in bulk on the next rebalance.
|
|
11
|
+
- [Enhancement] Replace per-partition `query_watermark_offsets` calls with batched `list_offsets` in `Admin::Topics#read_watermark_offsets`, `Admin::ConsumerGroups#seek`, and `Pro::Iterator::TplBuilder#resolve_partitions_with_negative_offsets`, cutting N sequential roundtrips to a small constant and avoiding a dedicated admin client in the iterator path (Pro).
|
|
12
|
+
- [Enhancement] Add `stability_ttl` to `Kubernetes::LivenessListener` and `Pro::Swarm::LivenessListener` to detect consumers frozen in a single non-`"steady"` librdkafka `cgrp.join_state`. On breach, reports `stability_ttl_exceeded: true` (HTTP 500) / status code `4`; clears once the group returns to `"steady"`. Requires `statistics.interval.ms`; defaults to twice the max `max.poll.interval.ms` across active subscription groups.
|
|
13
|
+
- [Enhancement] Contain non-`StandardError` errors (`ScriptError`, `SystemStackError`, etc.) raised in the consumption flow through the normal retry/pause/DLQ flow instead of skipping the batch. Process-critical errors (`SystemExit`, `SignalException`, `NoMemoryError`) are recorded, keep the partition paused, and trigger a graceful shutdown via the auto-subscribed `Instrumentation::CriticalErrorsListener` instead of being retried or dispatched to the DLQ. Configurable via `config.internal.processing.critical_errors`.
|
|
14
|
+
- [Enhancement] Introduce polymorphic `Routing::Topic#group` and `Routing::SubscriptionGroup#group` accessors (`#consumer_group` kept as a backwards-compatible alias), expose `group_id` in `Routing::Topic#to_h`, and emit parallel `group`/`group_id` keys alongside the legacy `consumer_group`/`consumer_group_id` keys in `rebalance.*`, `error.occurred`, and `statistics.emitted` payloads. Prepares routing for KIP-932 share groups; legacy keys remain until Karafka 3.0.
|
|
15
|
+
- [Enhancement] Add `Pro::Processing::ConsumerGroups::Filters::Actions` as the single source of truth for filter post-execution actions (`Actions.skip`/`Actions.pause`/`Actions.seek` value methods, the `ALL` list, and `#skip?`/`#pause?`/`#seek?` predicates mixed into `Filters::Base` and `Coordinators::FiltersApplier`). Returned values remain the same plain symbols, so existing filters keep working (Pro).
|
|
16
|
+
- [Enhancement] Make the statistics decorator used by `Instrumentation::Callbacks::ConsumerGroups::Statistics` configurable via `config.internal.statistics.consumer_groups.decorator_class` instead of hardcoding `Karafka::Core::Monitoring::StatisticsDecorator`.
|
|
17
|
+
- [Enhancement] Declare recurring tasks and scheduled messages internal topics via the standalone `Karafka::App.declaratives.draw` DSL instead of the routing `config(...)` bridge; the resulting declarations are unchanged (Pro).
|
|
18
|
+
- [Enhancement] CLI topic commands (`create`, `delete`, `reset`, `repartition`, `align`, `migrate`, `plan`) now read from `Karafka::App.declaratives.topics` instead of walking the routing tree, so topics declared via `declaratives.draw` are managed without a routing entry.
|
|
5
19
|
- [Enhancement] Add per-partition generation tracking to `AssignmentsTracker` to distinguish first-time assignments from reassignments.
|
|
6
20
|
- [Enhancement] Make liveness listeners fiber-safe.
|
|
7
|
-
- [
|
|
8
|
-
- [
|
|
9
|
-
- [
|
|
21
|
+
- [Enhancement] Bump swarm supervisor `SHUTDOWN_GRACE_PERIOD` from 1s to 15s to give forked nodes enough time to finish post-`shutdown_timeout` cleanup before forceful termination.
|
|
22
|
+
- [Enhancement] Move consumer-group-specific `Processing` components (`Coordinator`, `CoordinatorsBuffer`, `Executor`, `ExecutorsBuffer`, `Partitioner`, `ExpansionsSelector`, `InlineInsights`) and their Pro equivalents under the `ConsumerGroups` namespace (internal). Related config defaults are updated; user-provided classes are unaffected.
|
|
23
|
+
- [Enhancement] Move processing strategies (`Processing::Strategies::*` and `Pro::Processing::Strategies::*`) under the `ConsumerGroups` namespace (internal), preparing for parallel `ShareGroups::Strategies` (KIP-932).
|
|
24
|
+
- [Enhancement] Move `Processing::StrategySelector` (OSS and Pro) under the `ConsumerGroups` namespace (internal); the `config.processing.strategy_selector` default is updated, user selectors unaffected.
|
|
25
|
+
- [Enhancement] Move `Karafka::Connection::RebalanceManager` to `Connection::ConsumerGroups::RebalanceManager` (internal).
|
|
26
|
+
- [Enhancement] Move the rebalance librdkafka callback to `Instrumentation::Callbacks::ConsumerGroups::Rebalance` (internal); event names and payloads unchanged.
|
|
27
|
+
- [Enhancement] Move `Instrumentation::Callbacks::Error` and `Callbacks::Statistics` under `Callbacks::ConsumerGroups` (internal), completing the callbacks-layer namespacing; event names and payloads unchanged.
|
|
28
|
+
- [Enhancement] Namespace consumer-group-specific processing job classes under `Processing::ConsumerGroups::Jobs` (OSS) and `Pro::Processing::ConsumerGroups::Jobs` (Pro); only `Jobs::Base` stays generic. Internal move, no public API changes.
|
|
29
|
+
- [Enhancement] Move `Processing::JobsBuilder` (OSS and Pro) under the `ConsumerGroups` namespace (internal).
|
|
30
|
+
- [Enhancement] Nest consumer-group-specific processing config settings (`coordinator_class`, `errors_tracker_class`, `partitioner_class`, `strategy_selector`, `expansions_selector`, `executor_class`, `jobs_builder`) under `config.internal.processing.consumer_groups`; shared settings stay at `config.internal.processing`.
|
|
31
|
+
- [Enhancement] Move OSS consumer-group-specific routing features (`ActiveJob`, `DeadLetterQueue`, `Eofed`, `InlineInsights`, `ManualOffsetManagement`) under `Routing::Features::ConsumerGroups` (internal); agnostic features stay put.
|
|
32
|
+
- [Enhancement] Move Pro consumer-group-specific routing features under `Pro::Routing::Features::ConsumerGroups` (internal); agnostic features (`Expiring`, `Filtering`, `Pausing`, `Throttling`) stay put.
|
|
33
|
+
- [Change] Require `karafka-rdkafka` `>= 0.28.0`, which exposes `Rdkafka::Consumer#list_offsets` and rebuilds `#lag` on top of it, so lag reads issue a single batched end-offsets query instead of one watermark roundtrip per partition.
|
|
34
|
+
- [Change] Require `karafka-rdkafka` `>= 0.27.1` for the `poll_batch`/`poll_batch_nb` fix that discarded topic/partition/offset context from `e.details`, causing `TopicNotFoundError` crashes on `partition_eof`.
|
|
35
|
+
- [Change] Remove the public `custom_kafka` reader from `Karafka::Admin` (internal collaboration detail, unused by any public API; custom kafka settings are provided at construction via `Karafka::Admin.new(kafka: ...)`).
|
|
36
|
+
- [Refactor] Remove the unused `@mutex` from `Pro::Connection::Manager` (dead since #1851 replaced lock-based `@changes` eviction with key preloading; the lock-free threading model is now documented) (Pro).
|
|
37
|
+
- [Maintenance] Split declarative topic configuration from routing in the integration suite: add a `draw_topics` spec helper wrapping `Karafka::App.declaratives.draw`, source spec topic creation from the declaratives repository, and migrate general integration specs to declare partitions/config via `draw_topics`.
|
|
38
|
+
- [Maintenance] Replace manual per-version `Warning[:performance]`/`Warning[:deprecated]` spec setup with a dynamic `Warning.categories`-based approach that enables all non-experimental warning categories automatically.
|
|
10
39
|
- [Maintenance] Use namespaced topic naming format in all integration specs for consistent traceability.
|
|
11
|
-
- [Fix] Fix `DataCollector::SPEC_HASH` producing non-deterministic hashes for pristine and poro specs by passing the original spec path via `KARAFKA_SPEC_PATH` env var.
|
|
12
40
|
- [Maintenance] Add `bin/tests_topics_hashes` script for looking up spec files by their topic name hash prefix.
|
|
13
|
-
- [
|
|
41
|
+
- [Maintenance] Fix flaky `pro/admin/recovery/coordinator_for_spec.rb` by warming up the `__consumer_offsets` topic and retrying the first `Recovery.coordinator_for` call with exponential backoff on `MetadataError`.
|
|
42
|
+
- [Fix] Compare recurring task schedule versions with `Gem::Version` instead of as strings, so multi-segment upgrades like `1.9.0` → `1.10.0` are no longer misread as downgrades and rejected with `IncompatibleScheduleError` (Pro).
|
|
43
|
+
- [Fix] Fix dynamic multiplexing `scale_delay` being applied globally instead of per subscription-group family (`Pro::Connection::Manager#stable?` memoized the first family's value for all); it is now read per family on every check (Pro).
|
|
44
|
+
- [Fix] Make `Routing::Topics#<<` copy-on-write so a topic discovered at runtime by a pattern subscription can no longer be observed mid-append by a concurrent reader (e.g. `Router#find_by` from a `Pro::Iterator` or `Admin` call on another thread).
|
|
45
|
+
- [Fix] Bound `Instrumentation::AssignmentsTracker`'s `@generations` map (`GENERATIONS_TOPICS_LIMIT`, LRU eviction) so it no longer grows for the whole process lifetime under regex pattern subscriptions; static topologies are unaffected.
|
|
46
|
+
- [Fix] Derive the filtering pause timeout only from filters that actually want to pause, so a coexisting `:seek` filter reporting a `0` timeout no longer collapses a `:pause` to `0` and busy-spins (Pro).
|
|
47
|
+
- [Fix] Clamp scheduled message CreateTime to the wall clock in the loaded heuristic, so a single future-dated message can no longer be taken as proof of catch-up and cause double dispatch of not-yet-loaded cancellations (Pro).
|
|
48
|
+
- [Fix] Reset `Pro::Iterator#each` EOF/stop tracking in an `ensure`, so breaking out of the yielded block no longer leaves `done?` immediately true and silently drops a fresh backlog on reuse (Pro).
|
|
49
|
+
- [Fix] Fix the `parallel_segments` CLI commands (`distribute`, `collapse`, `reset`) silently skipping groups when more than one was requested via `--groups` (the matched group was deleted from the array being iterated); all requested groups are now processed (Pro).
|
|
50
|
+
- [Fix] Evict a partition's samples from `Pro::Instrumentation::PerformanceTracker` on revoke and scope samples by subscription group id, fixing unbounded growth and cross-group interference. **Breaking (internal API):** `processing_time_p95` now takes the subscription group id first (`processing_time_p95(group_id, topic, partition)`) (Pro).
|
|
51
|
+
- [Fix] Fall back to the current offset metadata (instead of raising `KeyError`) in Virtual Partitions `VirtualOffsetManager#markable` under the `:exact` strategy when the lowest-offset virtual-partition group is left unmarked (Pro).
|
|
52
|
+
- [Fix] Leave tombstone records (key with a `nil` payload) untouched on produce and consume instead of crashing in `cipher.encrypt`/`decrypt`, so they remain valid tombstones for log compaction (Pro).
|
|
53
|
+
- [Fix] Recompute the `Pro::Processing::JobsQueue#clear` async-locking fast-path flag from the remaining groups' locks instead of forcing it off globally, so another subscription group's active `lock_async` locks are no longer ignored (Pro).
|
|
54
|
+
- [Fix] Reset the per-partition retry attempt counter on revocation, so a message reclaimed after a rebalance is no longer treated as having exhausted its retries and dispatched to the DLQ early.
|
|
55
|
+
- [Fix] Reset ActiveJob `CurrentAttributes` in an `ensure`, so a failed job's attributes no longer leak into the next job on the same worker.
|
|
56
|
+
- [Fix] Return `false` from `#mark_as_consumed`, `#mark_as_consumed!`, and `#commit_offsets!` when the operation fails because the partition was lost (previously could return `true`).
|
|
57
|
+
- [Fix] Reset `seek_offset` only after a `#seek` succeeds, so a raising seek (e.g. an unresolvable time-based offset) no longer pauses without seeking back and skips the rest of the batch.
|
|
58
|
+
- [Fix] Skip DLQ dispatch when the partition was revoked mid-job in the ActiveJob + DLQ + long-running job strategies (matching the non-AJ LRJ strategies), so the new owner handles it instead of producing a duplicate (Pro).
|
|
59
|
+
- [Fix] Advance the in-memory `seek_offset` only after a transactional DLQ dispatch succeeds, so an aborted dispatch transaction with `mark_after_dispatch: false` no longer skips the broken message (Pro).
|
|
60
|
+
- [Fix] Report ownership truthfully from Virtual Partitions `#mark_as_consumed`/`#mark_as_consumed!` when there is no real offset to materialize yet (previously inverted) (Pro).
|
|
61
|
+
- [Fix] Stop reverting recurring task commands consumed during the boot replay phase, which previously persisted the reverted state and lost the command permanently (Pro).
|
|
62
|
+
- [Fix] Always precede Virtual Partitions DLQ `:dispatch`/`:skip` decisions with a collapsed retry, so they run on the linear deterministic flow instead of an arbitrary virtual-partition subset that could lose messages or dispatch the wrong one (Pro).
|
|
63
|
+
- [Fix] Compare scheduled messages schema versions as `Gem::Version` instead of strings, fixing mis-evaluation once a version segment reaches two digits (Pro).
|
|
64
|
+
- [Fix] Fix `Karafka::Admin.read_topic` with a `Time` start offset beyond the last message returning the newest messages instead of none.
|
|
65
|
+
- [Fix] Prevent silent worker thread death draining the workers pool: worker continuation is now an explicit framework decision (only a closed queue or downscale sentinel stops a worker), so a user `Consumer#wrap` returning a falsy value no longer kills the thread.
|
|
66
|
+
- [Fix] Track `Pro::Iterator` EOF and explicit stops per topic-partition instead of globally, so a partition receiving new data mid-iteration no longer exhausts the EOF budget and terminates `#each` while others still have backlog; `#each` also resets `#stop` on finish so the iterator can be reused (Pro).
|
|
67
|
+
- [Fix] Include orphaned node detection in the Pro swarm liveness listener.
|
|
68
|
+
- [Fix] Report liveness on `connection.listener.before_fetch_loop` so nodes send an initial healthy report before the first consumption.
|
|
69
|
+
- [Fix] Fire liveness events during `wait_pinging` so nodes keep reporting health during shutdown with active LRJ jobs.
|
|
70
|
+
- [Fix] Fix `DataCollector::SPEC_HASH` producing non-deterministic hashes for pristine and poro specs by passing the original spec path via the `KARAFKA_SPEC_PATH` env var.
|
|
71
|
+
- [Fix] Fix the swarm supervisor leaking reader pipe file descriptors on node restarts by closing the old reader before creating a new pipe in `Node#start`.
|
|
72
|
+
- [Fix] Raise `InvalidLicenseTokenError` when a manually-defined `Karafka::License` module is missing `#token` or `#version` instead of silently skipping Pro loading and raising a confusing `NameError` later in boot.
|
|
14
73
|
|
|
15
74
|
## 2.5.9 (2026-03-30)
|
|
16
75
|
- [Enhancement] Validate that `statistics.interval.ms` is not zero when dynamic multiplexing is enabled (Pro).
|
data/certs/expired.txt
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
39aeae710122bf14729a05f24f5bd702d2a1127e5c7fb9bd90de0e20890575dc
|
|
20
20
|
3ada575caaf0b8bdeca0686a93074de9ed830751e6f46251849475f70e84e408
|
|
21
21
|
4367e57ca36a4b447f23745d76611514df61b56611225be4c8f9a90560bbace9
|
|
22
|
+
4611be91c816b50c54e7e4ec422e02363bc5450f9107a35d7e915d949ccf7bdb
|
|
22
23
|
47380207ca3041b14c7d4c81a69f820852069ecab4d80a068d39133f61a6e641
|
|
23
24
|
4d49b497ece81604358afc8e9adc7d1163995c4c08446bcd5c0bbfe3d7ebc1e7
|
|
24
25
|
4d97c95c46e51105705964aecbfa5219120295e7d0a172f5c098d12c3a5cbf7e
|
|
@@ -62,6 +63,7 @@ bf6c5c58b02fa5e7c7dc845213ad943c5b6613f12ac6012be00b1484bb85aa04
|
|
|
62
63
|
c011c3d168a159c135ef35bf55121edaf1a4cc94f663a1f461595776b0313160
|
|
63
64
|
c311cb6cfb38a8b2e83b3080c1f87444a52f3f645be8337559a123aaacf1344a
|
|
64
65
|
c87222a94f98c3a2191dda9254bd6ed031fd8ca190f75b40c67a0fcd4b56f795
|
|
66
|
+
c9a5cc3f4c0fc7cb8784978d1f5185340ab585baf3b5d94300a29b212310871b
|
|
65
67
|
ca53af70cd7e67abbb9dbf0a8da6788a9b2192aa3a5a1dd8720aaa68a2511722
|
|
66
68
|
d02da0cbd2c1d83432a2cee7984dd311249692373554002d1d543dd5007f6a58
|
|
67
69
|
d13295e597120b88bf4c4f36de63d0aa3e5a68e3578c09a2e026bd1f6aaaf04f
|
data/config/locales/errors.yml
CHANGED
|
@@ -34,16 +34,21 @@ en:
|
|
|
34
34
|
|
|
35
35
|
oauth.token_provider_listener_format: 'must be false or respond to #on_oauthbearer_token_refresh'
|
|
36
36
|
|
|
37
|
-
internal.processing.jobs_builder_format: cannot be nil
|
|
38
37
|
internal.processing.jobs_queue_class_format: cannot be nil
|
|
39
38
|
internal.processing.scheduler_class_format: cannot be nil
|
|
40
|
-
internal.processing.coordinator_class_format: cannot be nil
|
|
41
|
-
internal.processing.partitioner_class_format: cannot be nil
|
|
42
|
-
internal.processing.strategy_selector_format: cannot be nil
|
|
43
|
-
internal.processing.expansions_selector_format: cannot be nil
|
|
44
|
-
internal.processing.executor_class_format: cannot be nil
|
|
45
39
|
internal.processing.worker_job_call_wrapper_format: 'needs to be false or respond to #wrap'
|
|
46
|
-
internal.processing.
|
|
40
|
+
internal.processing.critical_errors_format: 'needs to be an array of Exception subclasses'
|
|
41
|
+
internal.processing.consumer_groups.jobs_builder_format: cannot be nil
|
|
42
|
+
internal.processing.consumer_groups.coordinator_class_format: cannot be nil
|
|
43
|
+
internal.processing.consumer_groups.errors_tracker_class_format: 'needs to be nil or a class'
|
|
44
|
+
internal.processing.consumer_groups.partitioner_class_format: cannot be nil
|
|
45
|
+
internal.processing.consumer_groups.strategy_selector_format: cannot be nil
|
|
46
|
+
internal.processing.consumer_groups.expansions_selector_format: cannot be nil
|
|
47
|
+
internal.processing.consumer_groups.executor_class_format: cannot be nil
|
|
48
|
+
|
|
49
|
+
internal.statistics.consumer_groups.decorator_class_format: cannot be nil
|
|
50
|
+
internal.statistics.consumer_groups.lag_compensation.interval_format: needs to be an Integer greater or equal to 0
|
|
51
|
+
internal.statistics.consumer_groups.lag_compensation.pause_age_format: needs to be an Integer greater or equal to 5000
|
|
47
52
|
|
|
48
53
|
internal.active_job.dispatcher_format: cannot be nil
|
|
49
54
|
internal.active_job.job_options_contract_format: cannot be nil
|
|
@@ -176,6 +181,13 @@ en:
|
|
|
176
181
|
all topic names within a single consumer group must be unique considering namespacing styles
|
|
177
182
|
disable this validation by setting config.strict_topics_namespacing to false
|
|
178
183
|
|
|
184
|
+
declaratives:
|
|
185
|
+
topic:
|
|
186
|
+
declaratives.partitions_format: needs to be more or equal to 1
|
|
187
|
+
declaratives.active_format: needs to be either true or false
|
|
188
|
+
declaratives.replication_factor_format: needs to be more or equal to 1
|
|
189
|
+
declaratives.details_format: needs to be a hash with only symbol keys
|
|
190
|
+
|
|
179
191
|
job_options:
|
|
180
192
|
missing: needs to be present
|
|
181
193
|
dispatch_method_format: needs to be either :produce_async or :produce_sync
|
data/karafka.gemspec
CHANGED
|
@@ -21,9 +21,9 @@ Gem::Specification.new do |spec|
|
|
|
21
21
|
without having to focus on things that are not your business domain.
|
|
22
22
|
DESC
|
|
23
23
|
|
|
24
|
-
spec.add_dependency "karafka-core", ">= 2.
|
|
25
|
-
spec.add_dependency "karafka-rdkafka", ">= 0.
|
|
26
|
-
spec.add_dependency "waterdrop", ">= 2.
|
|
24
|
+
spec.add_dependency "karafka-core", ">= 2.6.0", "< 2.7.0"
|
|
25
|
+
spec.add_dependency "karafka-rdkafka", ">= 0.28.0"
|
|
26
|
+
spec.add_dependency "waterdrop", ">= 2.10.1", "< 3.0.0"
|
|
27
27
|
spec.add_dependency "zeitwerk", "~> 2.3"
|
|
28
28
|
|
|
29
29
|
spec.required_ruby_version = ">= 3.2.0"
|
|
@@ -20,7 +20,7 @@ module ActiveJob
|
|
|
20
20
|
# - Other Rails versions: Inherit from AbstractAdapter (normal behavior)
|
|
21
21
|
# - No Rails: Inherit from Object (standalone ActiveJob usage)
|
|
22
22
|
#
|
|
23
|
-
#
|
|
23
|
+
# See https://github.com/sidekiq/sidekiq/issues/6746 Similar issue in Sidekiq
|
|
24
24
|
base = if defined?(Rails::VERSION)
|
|
25
25
|
((Rails::VERSION::MAJOR == 7 && Rails::VERSION::MINOR < 2) ? Object : AbstractAdapter)
|
|
26
26
|
else
|
|
@@ -28,8 +28,7 @@ module ActiveJob
|
|
|
28
28
|
Object
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
-
# Karafka adapter for enqueuing jobs
|
|
32
|
-
# This is here for ease of integration with ActiveJob.
|
|
31
|
+
# Karafka adapter for enqueuing jobs This is here for ease of integration with ActiveJob.
|
|
33
32
|
class KarafkaAdapter < base
|
|
34
33
|
include ::Karafka::Helpers::ConfigImporter.new(
|
|
35
34
|
dispatcher: %i[internal active_job dispatcher]
|
|
@@ -5,11 +5,13 @@ require_relative "current_attributes/job_wrapper"
|
|
|
5
5
|
require_relative "current_attributes/loading"
|
|
6
6
|
require_relative "current_attributes/persistence"
|
|
7
7
|
|
|
8
|
-
# This code is based on Sidekiqs approach to persisting current attributes
|
|
9
|
-
# @see https://github.com/sidekiq/sidekiq/blob/main/lib/sidekiq/middleware/current_attributes.rb
|
|
10
8
|
module Karafka
|
|
11
9
|
module ActiveJob
|
|
12
10
|
# Module that allows to persist current attributes on Karafka jobs
|
|
11
|
+
#
|
|
12
|
+
# This code is based on Sidekiqs approach to persisting current attributes
|
|
13
|
+
#
|
|
14
|
+
# @see https://github.com/sidekiq/sidekiq/blob/main/lib/sidekiq/middleware/current_attributes.rb
|
|
13
15
|
module CurrentAttributes
|
|
14
16
|
# Allows for persistence of given current attributes via AJ + Karafka
|
|
15
17
|
#
|
|
@@ -8,8 +8,7 @@ module Karafka
|
|
|
8
8
|
deserializer: %i[internal active_job deserializer]
|
|
9
9
|
)
|
|
10
10
|
|
|
11
|
-
# Defaults for dispatching
|
|
12
|
-
# The can be updated by using `#karafka_options` on the job
|
|
11
|
+
# Defaults for dispatching. They can be updated by using `#karafka_options` on the job
|
|
13
12
|
DEFAULTS = {
|
|
14
13
|
dispatch_method: :produce_async,
|
|
15
14
|
dispatch_many_method: :produce_many_async
|
|
@@ -19,8 +19,7 @@ module Karafka
|
|
|
19
19
|
def karafka_options(new_options = {})
|
|
20
20
|
return _karafka_options if new_options.empty?
|
|
21
21
|
|
|
22
|
-
# Make sure, that karafka options that someone wants to use are valid before assigning
|
|
23
|
-
# them
|
|
22
|
+
# Make sure, that karafka options that someone wants to use are valid before assigning them
|
|
24
23
|
App.config.internal.active_job.job_options_contract.validate!(
|
|
25
24
|
new_options,
|
|
26
25
|
scope: %w[active_job]
|
|
@@ -76,8 +76,7 @@ module Karafka
|
|
|
76
76
|
|
|
77
77
|
private
|
|
78
78
|
|
|
79
|
-
# Recognizes whether the type is provided and remaps it to a symbol representation if
|
|
80
|
-
# needed
|
|
79
|
+
# Recognizes whether the type is provided and remaps it to a symbol representation if needed
|
|
81
80
|
#
|
|
82
81
|
# @param type [Symbol, Integer]
|
|
83
82
|
# @return [Symbol]
|