karafka 2.5.9 → 2.6.0.beta1
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 +34 -0
- data/certs/expired.txt +83 -0
- data/config/locales/errors.yml +17 -7
- data/karafka.gemspec +3 -3
- data/lib/active_job/queue_adapters/karafka_adapter.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 +109 -98
- data/lib/karafka/admin/isolation_levels.rb +22 -0
- data/lib/karafka/admin/topics.rb +103 -8
- data/lib/karafka/admin.rb +59 -31
- data/lib/karafka/app.rb +16 -5
- data/lib/karafka/base_consumer.rb +2 -2
- data/lib/karafka/cli/contracts/server.rb +4 -4
- data/lib/karafka/cli/info.rb +1 -1
- data/lib/karafka/cli/topics/base.rb +10 -18
- data/lib/karafka/cli/topics/repartition.rb +1 -1
- data/lib/karafka/connection/client.rb +40 -9
- data/lib/karafka/connection/consumer_groups/rebalance_manager.rb +120 -0
- data/lib/karafka/connection/listener.rb +8 -7
- data/lib/karafka/connection/listeners_batch.rb +1 -1
- data/lib/karafka/connection/mode.rb +1 -2
- data/lib/karafka/connection/raw_messages_buffer.rb +0 -5
- 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/helpers/interval_runner.rb +2 -2
- data/lib/karafka/instrumentation/assignments_tracker.rb +65 -2
- data/lib/karafka/instrumentation/callbacks/consumer_groups/error.rb +56 -0
- data/lib/karafka/instrumentation/callbacks/consumer_groups/rebalance.rb +93 -0
- data/lib/karafka/instrumentation/callbacks/consumer_groups/statistics.rb +59 -0
- data/lib/karafka/instrumentation/logger_listener.rb +27 -9
- data/lib/karafka/instrumentation/notifications.rb +2 -0
- data/lib/karafka/instrumentation/vendors/appsignal/metrics_listener.rb +14 -17
- data/lib/karafka/instrumentation/vendors/datadog/metrics_listener.rb +8 -9
- data/lib/karafka/instrumentation/vendors/kubernetes/base_listener.rb +7 -3
- data/lib/karafka/instrumentation/vendors/kubernetes/liveness_listener.rb +13 -10
- 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.rb +19 -19
- data/lib/karafka/pro/base_consumer.rb +3 -3
- data/lib/karafka/pro/cli/contracts/server.rb +5 -5
- data/lib/karafka/pro/cli/parallel_segments/base.rb +7 -7
- 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/iterator/tpl_builder.rb +38 -18
- data/lib/karafka/pro/loader.rb +15 -12
- data/lib/karafka/pro/processing/consumer_groups/adaptive_iterator/consumer.rb +84 -0
- data/lib/karafka/pro/processing/consumer_groups/adaptive_iterator/tracker.rb +97 -0
- data/lib/karafka/pro/processing/consumer_groups/collapser.rb +84 -0
- data/lib/karafka/pro/processing/consumer_groups/coordinator.rb +202 -0
- data/lib/karafka/pro/processing/consumer_groups/coordinators/errors_tracker.rb +124 -0
- data/lib/karafka/pro/processing/consumer_groups/coordinators/filters_applier.rb +157 -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/periodic.rb → consumer_groups/expansions_selector.rb} +18 -21
- data/lib/karafka/pro/processing/consumer_groups/filters/base.rb +103 -0
- data/lib/karafka/pro/processing/consumer_groups/filters/delayer.rb +92 -0
- data/lib/karafka/pro/processing/consumer_groups/filters/expirer.rb +78 -0
- data/lib/karafka/pro/processing/consumer_groups/filters/inline_insights_delayer.rb +99 -0
- data/lib/karafka/pro/processing/consumer_groups/filters/throttler.rb +106 -0
- data/lib/karafka/pro/processing/consumer_groups/filters/virtual_limiter.rb +79 -0
- data/lib/karafka/pro/processing/{jobs → consumer_groups/jobs}/consume_non_blocking.rb +21 -17
- data/lib/karafka/pro/processing/{virtual_partitions/distributors/consistent.rb → consumer_groups/jobs/eofed_non_blocking.rb} +16 -14
- data/lib/karafka/pro/processing/consumer_groups/jobs/periodic.rb +64 -0
- data/lib/karafka/pro/processing/{jobs → consumer_groups/jobs}/periodic_non_blocking.rb +16 -11
- data/lib/karafka/pro/processing/{jobs → consumer_groups/jobs}/revoked_non_blocking.rb +19 -15
- data/lib/karafka/pro/processing/consumer_groups/jobs_builder.rb +95 -0
- data/lib/karafka/pro/processing/consumer_groups/offset_metadata/consumer.rb +66 -0
- data/lib/karafka/pro/processing/consumer_groups/offset_metadata/fetcher.rb +154 -0
- data/lib/karafka/pro/processing/consumer_groups/offset_metadata/listener.rb +68 -0
- data/lib/karafka/pro/processing/consumer_groups/parallel_segments/filters/base.rb +102 -0
- data/lib/karafka/pro/processing/consumer_groups/parallel_segments/filters/default.rb +115 -0
- data/lib/karafka/pro/processing/consumer_groups/parallel_segments/filters/mom.rb +96 -0
- data/lib/karafka/pro/processing/consumer_groups/partitioner.rb +98 -0
- data/lib/karafka/pro/processing/consumer_groups/periodic_job/consumer.rb +90 -0
- data/lib/karafka/pro/processing/consumer_groups/piping/consumer.rb +154 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_ftr_lrj_mom.rb +93 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_ftr_lrj_mom_vp.rb +99 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_ftr_mom.rb +92 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_ftr_mom_vp.rb +90 -0
- data/lib/karafka/pro/processing/{strategies/aj/dlq_ftr_lrj_mom.rb → consumer_groups/strategies/aj/dlq_lrj_mom.rb} +37 -39
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_lrj_mom_vp.rb +90 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_mom.rb +84 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/dlq_mom_vp.rb +89 -0
- data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/aj/ftr_lrj_mom.rb +20 -15
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/ftr_lrj_mom_vp.rb +91 -0
- data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/aj/ftr_mom.rb +20 -15
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/ftr_mom_vp.rb +80 -0
- data/lib/karafka/pro/processing/{strategies/mom/default.rb → consumer_groups/strategies/aj/lrj_mom.rb} +18 -22
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/lrj_mom_vp.rb +106 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/mom.rb +58 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/aj/mom_vp.rb +74 -0
- data/lib/karafka/pro/processing/{strategies/lrj/vp.rb → consumer_groups/strategies/base.rb} +9 -14
- data/lib/karafka/pro/processing/consumer_groups/strategies/default.rb +421 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/default.rb +285 -0
- data/lib/karafka/pro/processing/{strategies/dlq/lrj.rb → consumer_groups/strategies/dlq/ftr.rb} +30 -29
- data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/ftr_lrj.rb +95 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/ftr_lrj_mom.rb +97 -0
- data/lib/karafka/pro/processing/{executor.rb → consumer_groups/strategies/dlq/ftr_lrj_mom_vp.rb} +26 -15
- data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/ftr_lrj_vp.rb +63 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/ftr_mom.rb +97 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/ftr_mom_vp.rb +63 -0
- data/lib/karafka/pro/{routing/features/patterns/patterns.rb → processing/consumer_groups/strategies/dlq/ftr_vp.rb} +22 -12
- data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/lrj.rb +83 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/lrj_mom.rb +100 -0
- data/lib/karafka/pro/processing/{strategies → consumer_groups/strategies}/dlq/lrj_mom_vp.rb +18 -13
- data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/lrj_vp.rb +61 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/mom.rb +96 -0
- data/lib/karafka/pro/processing/{strategies/lrj → consumer_groups/strategies/dlq}/mom_vp.rb +19 -15
- data/lib/karafka/pro/processing/consumer_groups/strategies/dlq/vp.rb +62 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/ftr/default.rb +146 -0
- data/lib/karafka/pro/processing/{strategies/mom/ftr.rb → consumer_groups/strategies/ftr/vp.rb} +20 -28
- data/lib/karafka/pro/processing/consumer_groups/strategies/lrj/default.rb +119 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/lrj/ftr.rb +94 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/lrj/ftr_mom.rb +92 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/lrj/ftr_mom_vp.rb +62 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/lrj/ftr_vp.rb +61 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/lrj/mom.rb +101 -0
- data/lib/karafka/pro/processing/consumer_groups/strategies/lrj/mom_vp.rb +60 -0
- data/lib/karafka/pro/processing/{strategies/mom → consumer_groups/strategies/lrj}/vp.rb +18 -12
- data/lib/karafka/pro/processing/{strategies/aj/mom_vp.rb → consumer_groups/strategies/mom/default.rb} +22 -23
- data/lib/karafka/pro/processing/{strategies/aj/ftr_mom_vp.rb → consumer_groups/strategies/mom/ftr.rb} +28 -28
- data/lib/karafka/pro/processing/{virtual_partitions/distributors/base.rb → consumer_groups/strategies/mom/ftr_vp.rb} +19 -14
- data/lib/karafka/pro/processing/{strategies/aj/mom.rb → consumer_groups/strategies/mom/vp.rb} +16 -12
- data/lib/karafka/pro/processing/consumer_groups/strategies/vp/default.rb +197 -0
- data/lib/karafka/pro/processing/consumer_groups/strategy_selector.rb +106 -0
- data/lib/karafka/pro/processing/consumer_groups/subscription_groups_coordinator.rb +73 -0
- data/lib/karafka/pro/processing/consumer_groups/virtual_partitions/distributors/balanced.rb +82 -0
- data/lib/karafka/pro/processing/consumer_groups/virtual_partitions/distributors/base.rb +59 -0
- data/lib/karafka/pro/processing/{strategies/dlq/ftr.rb → consumer_groups/virtual_partitions/distributors/consistent.rb} +18 -33
- data/lib/karafka/pro/processing/filters/base.rb +3 -61
- data/lib/karafka/pro/processing/partitioner.rb +2 -57
- data/lib/karafka/pro/processing/schedulers/base.rb +10 -6
- data/lib/karafka/pro/processing/schedulers/default.rb +6 -5
- data/lib/karafka/pro/recurring_tasks/executor.rb +1 -2
- 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/{direct_assignments → consumer_groups/delaying}/config.rb +6 -4
- 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 +97 -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/consumer_groups/long_running_job/topic.rb +72 -0
- data/lib/karafka/pro/routing/features/{long_running_job.rb → consumer_groups/long_running_job.rb} +6 -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/{delaying/contracts/topic.rb → consumer_groups/multiplexing/patches/contracts/consumer_group.rb} +19 -14
- 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/{non_blocking_job.rb → consumer_groups/non_blocking_job.rb} +15 -13
- 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 +93 -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 +110 -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/{offset_metadata/contracts/topic.rb → consumer_groups/patterns/config.rb} +28 -13
- data/lib/karafka/pro/routing/features/consumer_groups/patterns/consumer_group.rb +91 -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} +24 -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 +98 -0
- data/lib/karafka/pro/routing/features/consumer_groups/patterns/pattern.rb +114 -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 +150 -0
- data/lib/karafka/pro/routing/features/{swarm → consumer_groups/recurring_tasks}/config.rb +7 -8
- 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 +154 -0
- data/lib/karafka/pro/routing/features/consumer_groups/scheduled_messages/config.rb +47 -0
- data/lib/karafka/pro/routing/features/{long_running_job → consumer_groups/scheduled_messages}/contracts/topic.rb +14 -12
- data/lib/karafka/pro/routing/features/{delaying/config.rb → consumer_groups/scheduled_messages/proxy.rb} +6 -4
- data/lib/karafka/pro/routing/features/consumer_groups/scheduled_messages/topic.rb +72 -0
- 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 +101 -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/setup/defaults_injector.rb +70 -0
- data/lib/karafka/pro/swarm/liveness_listener.rb +22 -10
- data/lib/karafka/processing/consumer_groups/coordinator.rb +221 -0
- data/lib/karafka/processing/consumer_groups/coordinators_buffer.rb +69 -0
- data/lib/karafka/processing/consumer_groups/executor.rb +220 -0
- data/lib/karafka/processing/consumer_groups/executors_buffer.rb +94 -0
- data/lib/karafka/processing/consumer_groups/expansions_selector.rb +26 -0
- data/lib/karafka/processing/consumer_groups/inline_insights/consumer.rb +47 -0
- data/lib/karafka/processing/consumer_groups/inline_insights/listener.rb +23 -0
- data/lib/karafka/processing/consumer_groups/inline_insights/tracker.rb +132 -0
- data/lib/karafka/processing/consumer_groups/jobs/consume.rb +52 -0
- data/lib/karafka/processing/consumer_groups/jobs/eofed.rb +34 -0
- data/lib/karafka/processing/consumer_groups/jobs/idle.rb +33 -0
- data/lib/karafka/processing/consumer_groups/jobs/revoked.rb +34 -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 +28 -0
- data/lib/karafka/processing/consumer_groups/strategies/aj_dlq_mom.rb +48 -0
- data/lib/karafka/processing/consumer_groups/strategies/aj_mom.rb +25 -0
- data/lib/karafka/processing/consumer_groups/strategies/base.rb +65 -0
- data/lib/karafka/processing/consumer_groups/strategies/default.rb +218 -0
- data/lib/karafka/processing/consumer_groups/strategies/dlq.rb +157 -0
- data/lib/karafka/processing/consumer_groups/strategies/dlq_mom.rb +72 -0
- data/lib/karafka/processing/consumer_groups/strategies/mom.rb +33 -0
- data/lib/karafka/processing/consumer_groups/strategy_selector.rb +53 -0
- data/lib/karafka/processing/coordinator.rb +4 -211
- data/lib/karafka/processing/coordinators_buffer.rb +4 -59
- data/lib/karafka/processing/jobs_queue.rb +12 -4
- data/lib/karafka/processing/partitioner.rb +4 -18
- data/lib/karafka/processing/schedulers/default.rb +2 -1
- data/lib/karafka/processing/strategy_selector.rb +4 -42
- data/lib/karafka/processing/worker.rb +8 -4
- data/lib/karafka/processing/workers_pool.rb +158 -0
- data/lib/karafka/routing/builder.rb +12 -12
- data/lib/karafka/routing/contracts/routing.rb +3 -4
- 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 +50 -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 -3
- 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/runner.rb +17 -17
- data/lib/karafka/server.rb +28 -6
- data/lib/karafka/setup/attributes_map.rb +2 -0
- data/lib/karafka/setup/config.rb +64 -15
- data/lib/karafka/setup/config_proxy.rb +1 -2
- data/lib/karafka/setup/contracts/config.rb +28 -8
- data/lib/karafka/setup/defaults_injector.rb +10 -0
- data/lib/karafka/status.rb +1 -2
- data/lib/karafka/swarm/liveness_listener.rb +7 -0
- data/lib/karafka/swarm/manager.rb +7 -7
- data/lib/karafka/swarm/node.rb +8 -0
- data/lib/karafka/swarm/supervisor.rb +9 -1
- data/lib/karafka/templates/karafka.rb.erb +11 -5
- data/lib/karafka/version.rb +1 -1
- metadata +237 -224
- 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/expansions_selector.rb +0 -52
- data/lib/karafka/pro/processing/filters/delayer.rb +0 -87
- 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/eofed_non_blocking.rb +0 -51
- 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.rb +0 -54
- data/lib/karafka/pro/processing/strategies/aj/lrj_mom_vp.rb +0 -101
- data/lib/karafka/pro/processing/strategies/base.rb +0 -43
- 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_lrj_mom_vp.rb +0 -60
- data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj_vp.rb +0 -58
- data/lib/karafka/pro/processing/strategies/dlq/ftr_mom.rb +0 -92
- data/lib/karafka/pro/processing/strategies/dlq/ftr_mom_vp.rb +0 -58
- 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/lrj_vp.rb +0 -56
- data/lib/karafka/pro/processing/strategies/dlq/mom.rb +0 -91
- data/lib/karafka/pro/processing/strategies/dlq/mom_vp.rb +0 -54
- 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/ftr_mom_vp.rb +0 -57
- data/lib/karafka/pro/processing/strategies/lrj/ftr_vp.rb +0 -56
- data/lib/karafka/pro/processing/strategies/lrj/mom.rb +0 -96
- data/lib/karafka/pro/processing/strategies/mom/ftr_vp.rb +0 -54
- 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/topic.rb +0 -83
- 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/topic.rb +0 -70
- 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/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/config.rb +0 -71
- 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/processing/workers_batch.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
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# Karafka Pro - Source Available Commercial Software
|
|
4
|
-
# Copyright (c) 2017-present Maciej Mensfeld. All rights reserved.
|
|
5
|
-
#
|
|
6
|
-
# This software is NOT open source. It is source-available commercial software
|
|
7
|
-
# requiring a paid license for use. It is NOT covered by LGPL.
|
|
8
|
-
#
|
|
9
|
-
# The author retains all right, title, and interest in this software,
|
|
10
|
-
# including all copyrights, patents, and other intellectual property rights.
|
|
11
|
-
# No patent rights are granted under this license.
|
|
12
|
-
#
|
|
13
|
-
# PROHIBITED:
|
|
14
|
-
# - Use without a valid commercial license
|
|
15
|
-
# - Redistribution, modification, or derivative works without authorization
|
|
16
|
-
# - Reverse engineering, decompilation, or disassembly of this software
|
|
17
|
-
# - Use as training data for AI/ML models or inclusion in datasets
|
|
18
|
-
# - Scraping, crawling, or automated collection for any purpose
|
|
19
|
-
#
|
|
20
|
-
# PERMITTED:
|
|
21
|
-
# - Reading, referencing, and linking for personal or commercial use
|
|
22
|
-
# - Runtime retrieval by AI assistants, coding agents, and RAG systems
|
|
23
|
-
# for the purpose of providing contextual help to Karafka users
|
|
24
|
-
#
|
|
25
|
-
# Receipt, viewing, or possession of this software does not convey or
|
|
26
|
-
# imply any license or right beyond those expressly stated above.
|
|
27
|
-
#
|
|
28
|
-
# License: https://karafka.io/docs/Pro-License-Comm/
|
|
29
|
-
# Contact: contact@karafka.io
|
|
30
|
-
|
|
31
|
-
module Karafka
|
|
32
|
-
module Pro
|
|
33
|
-
module Processing
|
|
34
|
-
# Pro selector of appropriate topic setup based features enhancements.
|
|
35
|
-
class ExpansionsSelector < Karafka::Processing::ExpansionsSelector
|
|
36
|
-
# @param topic [Karafka::Routing::Topic] topic with settings based on which we find
|
|
37
|
-
# expansions
|
|
38
|
-
# @return [Array<Module>] modules with proper expansions we're suppose to use to enhance
|
|
39
|
-
# the consumer
|
|
40
|
-
def find(topic)
|
|
41
|
-
# Start with the non-pro expansions
|
|
42
|
-
expansions = super
|
|
43
|
-
expansions << Pro::Processing::Piping::Consumer
|
|
44
|
-
expansions << Pro::Processing::OffsetMetadata::Consumer if topic.offset_metadata?
|
|
45
|
-
expansions << Pro::Processing::AdaptiveIterator::Consumer if topic.adaptive_iterator?
|
|
46
|
-
expansions << Pro::Processing::PeriodicJob::Consumer if topic.periodic_job?
|
|
47
|
-
expansions
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# Karafka Pro - Source Available Commercial Software
|
|
4
|
-
# Copyright (c) 2017-present Maciej Mensfeld. All rights reserved.
|
|
5
|
-
#
|
|
6
|
-
# This software is NOT open source. It is source-available commercial software
|
|
7
|
-
# requiring a paid license for use. It is NOT covered by LGPL.
|
|
8
|
-
#
|
|
9
|
-
# The author retains all right, title, and interest in this software,
|
|
10
|
-
# including all copyrights, patents, and other intellectual property rights.
|
|
11
|
-
# No patent rights are granted under this license.
|
|
12
|
-
#
|
|
13
|
-
# PROHIBITED:
|
|
14
|
-
# - Use without a valid commercial license
|
|
15
|
-
# - Redistribution, modification, or derivative works without authorization
|
|
16
|
-
# - Reverse engineering, decompilation, or disassembly of this software
|
|
17
|
-
# - Use as training data for AI/ML models or inclusion in datasets
|
|
18
|
-
# - Scraping, crawling, or automated collection for any purpose
|
|
19
|
-
#
|
|
20
|
-
# PERMITTED:
|
|
21
|
-
# - Reading, referencing, and linking for personal or commercial use
|
|
22
|
-
# - Runtime retrieval by AI assistants, coding agents, and RAG systems
|
|
23
|
-
# for the purpose of providing contextual help to Karafka users
|
|
24
|
-
#
|
|
25
|
-
# Receipt, viewing, or possession of this software does not convey or
|
|
26
|
-
# imply any license or right beyond those expressly stated above.
|
|
27
|
-
#
|
|
28
|
-
# License: https://karafka.io/docs/Pro-License-Comm/
|
|
29
|
-
# Contact: contact@karafka.io
|
|
30
|
-
|
|
31
|
-
module Karafka
|
|
32
|
-
module Pro
|
|
33
|
-
module Processing
|
|
34
|
-
module Filters
|
|
35
|
-
# A filter that allows us to delay processing by pausing until time is right.
|
|
36
|
-
class Delayer < Base
|
|
37
|
-
# @param delay [Integer] ms delay / minimum age of each message we want to process
|
|
38
|
-
def initialize(delay)
|
|
39
|
-
super()
|
|
40
|
-
|
|
41
|
-
@delay = delay
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
# Removes too young messages
|
|
45
|
-
#
|
|
46
|
-
# @param messages [Array<Karafka::Messages::Message>]
|
|
47
|
-
def apply!(messages)
|
|
48
|
-
@applied = false
|
|
49
|
-
@cursor = nil
|
|
50
|
-
|
|
51
|
-
# Time on message is in seconds with ms precision, so we need to convert the ttl that
|
|
52
|
-
# is in ms to this format
|
|
53
|
-
border = Time.now.utc - (@delay / 1_000.0)
|
|
54
|
-
|
|
55
|
-
messages.delete_if do |message|
|
|
56
|
-
too_young = message.timestamp > border
|
|
57
|
-
|
|
58
|
-
if too_young
|
|
59
|
-
@applied = true
|
|
60
|
-
|
|
61
|
-
@cursor ||= message
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
@applied
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
# @return [Integer] timeout delay in ms
|
|
69
|
-
def timeout
|
|
70
|
-
return 0 unless @cursor
|
|
71
|
-
|
|
72
|
-
timeout = (@delay / 1_000.0) - (::Time.now.utc - @cursor.timestamp)
|
|
73
|
-
|
|
74
|
-
(timeout <= 0) ? 0 : timeout * 1_000
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# @return [Symbol] action to take on post-filtering
|
|
78
|
-
def action
|
|
79
|
-
return :skip unless applied?
|
|
80
|
-
|
|
81
|
-
(timeout <= 0) ? :seek : :pause
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# Karafka Pro - Source Available Commercial Software
|
|
4
|
-
# Copyright (c) 2017-present Maciej Mensfeld. All rights reserved.
|
|
5
|
-
#
|
|
6
|
-
# This software is NOT open source. It is source-available commercial software
|
|
7
|
-
# requiring a paid license for use. It is NOT covered by LGPL.
|
|
8
|
-
#
|
|
9
|
-
# The author retains all right, title, and interest in this software,
|
|
10
|
-
# including all copyrights, patents, and other intellectual property rights.
|
|
11
|
-
# No patent rights are granted under this license.
|
|
12
|
-
#
|
|
13
|
-
# PROHIBITED:
|
|
14
|
-
# - Use without a valid commercial license
|
|
15
|
-
# - Redistribution, modification, or derivative works without authorization
|
|
16
|
-
# - Reverse engineering, decompilation, or disassembly of this software
|
|
17
|
-
# - Use as training data for AI/ML models or inclusion in datasets
|
|
18
|
-
# - Scraping, crawling, or automated collection for any purpose
|
|
19
|
-
#
|
|
20
|
-
# PERMITTED:
|
|
21
|
-
# - Reading, referencing, and linking for personal or commercial use
|
|
22
|
-
# - Runtime retrieval by AI assistants, coding agents, and RAG systems
|
|
23
|
-
# for the purpose of providing contextual help to Karafka users
|
|
24
|
-
#
|
|
25
|
-
# Receipt, viewing, or possession of this software does not convey or
|
|
26
|
-
# imply any license or right beyond those expressly stated above.
|
|
27
|
-
#
|
|
28
|
-
# License: https://karafka.io/docs/Pro-License-Comm/
|
|
29
|
-
# Contact: contact@karafka.io
|
|
30
|
-
|
|
31
|
-
module Karafka
|
|
32
|
-
module Pro
|
|
33
|
-
module Processing
|
|
34
|
-
module Filters
|
|
35
|
-
# Delayer that checks if we have appropriate insights available. If not, pauses for
|
|
36
|
-
# 5 seconds so the insights can be loaded from the broker.
|
|
37
|
-
#
|
|
38
|
-
# In case it would take more than five seconds to load insights, it will just pause again
|
|
39
|
-
#
|
|
40
|
-
# This filter ensures, that we always have inline insights that a consumer can use
|
|
41
|
-
#
|
|
42
|
-
# It is relevant in most cases only during the process start, when first poll may not
|
|
43
|
-
# yield statistics yet but will give some data.
|
|
44
|
-
class InlineInsightsDelayer < Base
|
|
45
|
-
# Minimum how long should we pause when there are no metrics
|
|
46
|
-
PAUSE_TIMEOUT = 5_000
|
|
47
|
-
|
|
48
|
-
private_constant :PAUSE_TIMEOUT
|
|
49
|
-
|
|
50
|
-
# @param topic [Karafka::Routing::Topic]
|
|
51
|
-
# @param partition [Integer] partition
|
|
52
|
-
def initialize(topic, partition)
|
|
53
|
-
super()
|
|
54
|
-
@topic = topic
|
|
55
|
-
@partition = partition
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# Pauses if inline insights would not be available. Does nothing otherwise
|
|
59
|
-
#
|
|
60
|
-
# @param messages [Array<Karafka::Messages::Message>]
|
|
61
|
-
def apply!(messages)
|
|
62
|
-
@applied = false
|
|
63
|
-
@cursor = messages.first
|
|
64
|
-
|
|
65
|
-
# Nothing to do if there were no messages
|
|
66
|
-
# This can happen when we chain filters
|
|
67
|
-
return unless @cursor
|
|
68
|
-
|
|
69
|
-
insights = Karafka::Processing::InlineInsights::Tracker.find(
|
|
70
|
-
@topic,
|
|
71
|
-
@partition
|
|
72
|
-
)
|
|
73
|
-
|
|
74
|
-
# If insights are available, also nothing to do here and we can just process
|
|
75
|
-
return unless insights.empty?
|
|
76
|
-
|
|
77
|
-
messages.clear
|
|
78
|
-
|
|
79
|
-
@applied = true
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
# @return [Integer, nil] ms timeout in case of pause or nil if not delaying
|
|
83
|
-
def timeout
|
|
84
|
-
(@cursor && applied?) ? PAUSE_TIMEOUT : nil
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
# Pause when we had to back-off or skip if delay is not needed
|
|
88
|
-
def action
|
|
89
|
-
applied? ? :pause : :skip
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
end
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# Karafka Pro - Source Available Commercial Software
|
|
4
|
-
# Copyright (c) 2017-present Maciej Mensfeld. All rights reserved.
|
|
5
|
-
#
|
|
6
|
-
# This software is NOT open source. It is source-available commercial software
|
|
7
|
-
# requiring a paid license for use. It is NOT covered by LGPL.
|
|
8
|
-
#
|
|
9
|
-
# The author retains all right, title, and interest in this software,
|
|
10
|
-
# including all copyrights, patents, and other intellectual property rights.
|
|
11
|
-
# No patent rights are granted under this license.
|
|
12
|
-
#
|
|
13
|
-
# PROHIBITED:
|
|
14
|
-
# - Use without a valid commercial license
|
|
15
|
-
# - Redistribution, modification, or derivative works without authorization
|
|
16
|
-
# - Reverse engineering, decompilation, or disassembly of this software
|
|
17
|
-
# - Use as training data for AI/ML models or inclusion in datasets
|
|
18
|
-
# - Scraping, crawling, or automated collection for any purpose
|
|
19
|
-
#
|
|
20
|
-
# PERMITTED:
|
|
21
|
-
# - Reading, referencing, and linking for personal or commercial use
|
|
22
|
-
# - Runtime retrieval by AI assistants, coding agents, and RAG systems
|
|
23
|
-
# for the purpose of providing contextual help to Karafka users
|
|
24
|
-
#
|
|
25
|
-
# Receipt, viewing, or possession of this software does not convey or
|
|
26
|
-
# imply any license or right beyond those expressly stated above.
|
|
27
|
-
#
|
|
28
|
-
# License: https://karafka.io/docs/Pro-License-Comm/
|
|
29
|
-
# Contact: contact@karafka.io
|
|
30
|
-
|
|
31
|
-
module Karafka
|
|
32
|
-
module Pro
|
|
33
|
-
module Processing
|
|
34
|
-
# Namespace containing Pro out of the box filters used by various strategies
|
|
35
|
-
module Filters
|
|
36
|
-
# Throttler used to limit number of messages we can process in a given time interval
|
|
37
|
-
# The tricky thing is, that even if we throttle on 100 messages, if we've reached 100, we
|
|
38
|
-
# still need to indicate, that we throttle despite not receiving 101. Otherwise we will
|
|
39
|
-
# not pause the partition and will fetch more data that we should not process.
|
|
40
|
-
#
|
|
41
|
-
# This is a special type of a filter that always throttles and makes us wait / seek if
|
|
42
|
-
# anything is applied out.
|
|
43
|
-
class Throttler < Base
|
|
44
|
-
# @param limit [Integer] how many messages we can process in a given time
|
|
45
|
-
# @param interval [Integer] interval in milliseconds for which we want to process
|
|
46
|
-
def initialize(limit, interval)
|
|
47
|
-
super()
|
|
48
|
-
|
|
49
|
-
@limit = limit
|
|
50
|
-
@interval = interval
|
|
51
|
-
@requests = Hash.new { |h, k| h[k] = 0 }
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
# Limits number of messages to a range that we can process (if needed) and keeps track
|
|
55
|
-
# of how many messages we've processed in a given time
|
|
56
|
-
# @param messages [Array<Karafka::Messages::Message>] limits the number of messages to
|
|
57
|
-
# number we can accept in the context of throttling constraints
|
|
58
|
-
def apply!(messages)
|
|
59
|
-
@applied = false
|
|
60
|
-
@cursor = nil
|
|
61
|
-
@time = monotonic_now
|
|
62
|
-
@requests.delete_if { |timestamp, _| timestamp < (@time - @interval) }
|
|
63
|
-
values = @requests.values.sum
|
|
64
|
-
accepted = 0
|
|
65
|
-
|
|
66
|
-
messages.delete_if do |message|
|
|
67
|
-
# +1 because of current
|
|
68
|
-
@applied = (values + accepted + 1) > @limit
|
|
69
|
-
|
|
70
|
-
@cursor = message if @applied && @cursor.nil?
|
|
71
|
-
|
|
72
|
-
next true if @applied
|
|
73
|
-
|
|
74
|
-
accepted += 1
|
|
75
|
-
|
|
76
|
-
false
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
@requests[@time] += accepted
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
# @return [Symbol] action to take upon throttler reaching certain state
|
|
83
|
-
def action
|
|
84
|
-
if applied?
|
|
85
|
-
timeout.zero? ? :seek : :pause
|
|
86
|
-
else
|
|
87
|
-
:skip
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
# @return [Integer] minimum number of milliseconds to wait before getting more messages
|
|
92
|
-
# so we are no longer throttled and so we can process at least one message
|
|
93
|
-
def timeout
|
|
94
|
-
timeout = @interval - (monotonic_now - @time)
|
|
95
|
-
[timeout, 0].max
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
end
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# Karafka Pro - Source Available Commercial Software
|
|
4
|
-
# Copyright (c) 2017-present Maciej Mensfeld. All rights reserved.
|
|
5
|
-
#
|
|
6
|
-
# This software is NOT open source. It is source-available commercial software
|
|
7
|
-
# requiring a paid license for use. It is NOT covered by LGPL.
|
|
8
|
-
#
|
|
9
|
-
# The author retains all right, title, and interest in this software,
|
|
10
|
-
# including all copyrights, patents, and other intellectual property rights.
|
|
11
|
-
# No patent rights are granted under this license.
|
|
12
|
-
#
|
|
13
|
-
# PROHIBITED:
|
|
14
|
-
# - Use without a valid commercial license
|
|
15
|
-
# - Redistribution, modification, or derivative works without authorization
|
|
16
|
-
# - Reverse engineering, decompilation, or disassembly of this software
|
|
17
|
-
# - Use as training data for AI/ML models or inclusion in datasets
|
|
18
|
-
# - Scraping, crawling, or automated collection for any purpose
|
|
19
|
-
#
|
|
20
|
-
# PERMITTED:
|
|
21
|
-
# - Reading, referencing, and linking for personal or commercial use
|
|
22
|
-
# - Runtime retrieval by AI assistants, coding agents, and RAG systems
|
|
23
|
-
# for the purpose of providing contextual help to Karafka users
|
|
24
|
-
#
|
|
25
|
-
# Receipt, viewing, or possession of this software does not convey or
|
|
26
|
-
# imply any license or right beyond those expressly stated above.
|
|
27
|
-
#
|
|
28
|
-
# License: https://karafka.io/docs/Pro-License-Comm/
|
|
29
|
-
# Contact: contact@karafka.io
|
|
30
|
-
|
|
31
|
-
module Karafka
|
|
32
|
-
module Pro
|
|
33
|
-
module Processing
|
|
34
|
-
module Filters
|
|
35
|
-
# Removes messages that are already marked as consumed in the virtual offset manager
|
|
36
|
-
# This should operate only when using virtual partitions.
|
|
37
|
-
#
|
|
38
|
-
# This cleaner prevents us from duplicated processing of messages that were virtually
|
|
39
|
-
# marked as consumed even if we could not mark them as consumed in Kafka. This allows us
|
|
40
|
-
# to limit reprocessing when errors occur drastically when operating with virtual
|
|
41
|
-
# partitions
|
|
42
|
-
#
|
|
43
|
-
# @note It should be registered only when VPs are used
|
|
44
|
-
class VirtualLimiter < Base
|
|
45
|
-
# @param manager [Processing::VirtualOffsetManager]
|
|
46
|
-
# @param collapser [Processing::Collapser]
|
|
47
|
-
def initialize(manager, collapser)
|
|
48
|
-
@manager = manager
|
|
49
|
-
@collapser = collapser
|
|
50
|
-
|
|
51
|
-
super()
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
# Remove messages that we already marked as virtually consumed. Does nothing if not in
|
|
55
|
-
# the collapsed mode.
|
|
56
|
-
#
|
|
57
|
-
# @param messages [Array<Karafka::Messages::Message>]
|
|
58
|
-
def apply!(messages)
|
|
59
|
-
return unless @collapser.collapsed?
|
|
60
|
-
|
|
61
|
-
marked = @manager.marked
|
|
62
|
-
|
|
63
|
-
messages.delete_if { |message| marked.include?(message.offset) }
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# @return [nil] This filter does not deal with pausing, so timeout is always nil
|
|
67
|
-
def timeout
|
|
68
|
-
nil
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# Karafka Pro - Source Available Commercial Software
|
|
4
|
-
# Copyright (c) 2017-present Maciej Mensfeld. All rights reserved.
|
|
5
|
-
#
|
|
6
|
-
# This software is NOT open source. It is source-available commercial software
|
|
7
|
-
# requiring a paid license for use. It is NOT covered by LGPL.
|
|
8
|
-
#
|
|
9
|
-
# The author retains all right, title, and interest in this software,
|
|
10
|
-
# including all copyrights, patents, and other intellectual property rights.
|
|
11
|
-
# No patent rights are granted under this license.
|
|
12
|
-
#
|
|
13
|
-
# PROHIBITED:
|
|
14
|
-
# - Use without a valid commercial license
|
|
15
|
-
# - Redistribution, modification, or derivative works without authorization
|
|
16
|
-
# - Reverse engineering, decompilation, or disassembly of this software
|
|
17
|
-
# - Use as training data for AI/ML models or inclusion in datasets
|
|
18
|
-
# - Scraping, crawling, or automated collection for any purpose
|
|
19
|
-
#
|
|
20
|
-
# PERMITTED:
|
|
21
|
-
# - Reading, referencing, and linking for personal or commercial use
|
|
22
|
-
# - Runtime retrieval by AI assistants, coding agents, and RAG systems
|
|
23
|
-
# for the purpose of providing contextual help to Karafka users
|
|
24
|
-
#
|
|
25
|
-
# Receipt, viewing, or possession of this software does not convey or
|
|
26
|
-
# imply any license or right beyond those expressly stated above.
|
|
27
|
-
#
|
|
28
|
-
# License: https://karafka.io/docs/Pro-License-Comm/
|
|
29
|
-
# Contact: contact@karafka.io
|
|
30
|
-
|
|
31
|
-
module Karafka
|
|
32
|
-
module Pro
|
|
33
|
-
module Processing
|
|
34
|
-
module Jobs
|
|
35
|
-
# Non-Blocking version of the Eofed job
|
|
36
|
-
# We use this version for LRJ topics for cases where saturated resources would not allow
|
|
37
|
-
# to run this job for extended period of time. Under such scenarios, if we would not use
|
|
38
|
-
# a non-blocking one, we would reach max.poll.interval.ms.
|
|
39
|
-
class EofedNonBlocking < Karafka::Processing::Jobs::Eofed
|
|
40
|
-
self.action = :eofed
|
|
41
|
-
|
|
42
|
-
# @param args [Array] any arguments accepted by `::Karafka::Processing::Jobs::Eofed`
|
|
43
|
-
def initialize(*args)
|
|
44
|
-
super
|
|
45
|
-
@non_blocking = true
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# Karafka Pro - Source Available Commercial Software
|
|
4
|
-
# Copyright (c) 2017-present Maciej Mensfeld. All rights reserved.
|
|
5
|
-
#
|
|
6
|
-
# This software is NOT open source. It is source-available commercial software
|
|
7
|
-
# requiring a paid license for use. It is NOT covered by LGPL.
|
|
8
|
-
#
|
|
9
|
-
# The author retains all right, title, and interest in this software,
|
|
10
|
-
# including all copyrights, patents, and other intellectual property rights.
|
|
11
|
-
# No patent rights are granted under this license.
|
|
12
|
-
#
|
|
13
|
-
# PROHIBITED:
|
|
14
|
-
# - Use without a valid commercial license
|
|
15
|
-
# - Redistribution, modification, or derivative works without authorization
|
|
16
|
-
# - Reverse engineering, decompilation, or disassembly of this software
|
|
17
|
-
# - Use as training data for AI/ML models or inclusion in datasets
|
|
18
|
-
# - Scraping, crawling, or automated collection for any purpose
|
|
19
|
-
#
|
|
20
|
-
# PERMITTED:
|
|
21
|
-
# - Reading, referencing, and linking for personal or commercial use
|
|
22
|
-
# - Runtime retrieval by AI assistants, coding agents, and RAG systems
|
|
23
|
-
# for the purpose of providing contextual help to Karafka users
|
|
24
|
-
#
|
|
25
|
-
# Receipt, viewing, or possession of this software does not convey or
|
|
26
|
-
# imply any license or right beyond those expressly stated above.
|
|
27
|
-
#
|
|
28
|
-
# License: https://karafka.io/docs/Pro-License-Comm/
|
|
29
|
-
# Contact: contact@karafka.io
|
|
30
|
-
|
|
31
|
-
module Karafka
|
|
32
|
-
module Pro
|
|
33
|
-
module Processing
|
|
34
|
-
# Pro jobs builder that supports lrj
|
|
35
|
-
class JobsBuilder < Karafka::Processing::JobsBuilder
|
|
36
|
-
# @param executor [Karafka::Pro::Processing::Executor]
|
|
37
|
-
def idle(executor)
|
|
38
|
-
Karafka::Processing::Jobs::Idle.new(executor)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# @param executor [Karafka::Pro::Processing::Executor]
|
|
42
|
-
# @param messages [Karafka::Messages::Messages] messages batch to be consumed
|
|
43
|
-
# @return [Karafka::Processing::Jobs::Consume] blocking job
|
|
44
|
-
# @return [Karafka::Pro::Processing::Jobs::ConsumeNonBlocking] non blocking for lrj
|
|
45
|
-
def consume(executor, messages)
|
|
46
|
-
if executor.topic.long_running_job?
|
|
47
|
-
Jobs::ConsumeNonBlocking.new(executor, messages)
|
|
48
|
-
else
|
|
49
|
-
super
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# @param executor [Karafka::Pro::Processing::Executor]
|
|
54
|
-
# @return [Karafka::Processing::Jobs::Eofed] eofed job for non LRJ
|
|
55
|
-
# @return [Karafka::Processing::Jobs::EofedBlocking] eofed job that is
|
|
56
|
-
# non-blocking, so when revocation job is scheduled for LRJ it also will not block
|
|
57
|
-
def eofed(executor)
|
|
58
|
-
if executor.topic.long_running_job?
|
|
59
|
-
Jobs::EofedNonBlocking.new(executor)
|
|
60
|
-
else
|
|
61
|
-
super
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
# @param executor [Karafka::Pro::Processing::Executor]
|
|
66
|
-
# @return [Karafka::Processing::Jobs::Revoked] revocation job for non LRJ
|
|
67
|
-
# @return [Karafka::Processing::Jobs::RevokedNonBlocking] revocation job that is
|
|
68
|
-
# non-blocking, so when revocation job is scheduled for LRJ it also will not block
|
|
69
|
-
def revoked(executor)
|
|
70
|
-
if executor.topic.long_running_job?
|
|
71
|
-
Jobs::RevokedNonBlocking.new(executor)
|
|
72
|
-
else
|
|
73
|
-
super
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# @param executor [Karafka::Pro::Processing::Executor]
|
|
78
|
-
# @return [Jobs::Periodic] Periodic job
|
|
79
|
-
# @return [Jobs::PeriodicNonBlocking] Periodic non-blocking job
|
|
80
|
-
def periodic(executor)
|
|
81
|
-
if executor.topic.long_running_job?
|
|
82
|
-
Jobs::PeriodicNonBlocking.new(executor)
|
|
83
|
-
else
|
|
84
|
-
Jobs::Periodic.new(executor)
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
end
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# Karafka Pro - Source Available Commercial Software
|
|
4
|
-
# Copyright (c) 2017-present Maciej Mensfeld. All rights reserved.
|
|
5
|
-
#
|
|
6
|
-
# This software is NOT open source. It is source-available commercial software
|
|
7
|
-
# requiring a paid license for use. It is NOT covered by LGPL.
|
|
8
|
-
#
|
|
9
|
-
# The author retains all right, title, and interest in this software,
|
|
10
|
-
# including all copyrights, patents, and other intellectual property rights.
|
|
11
|
-
# No patent rights are granted under this license.
|
|
12
|
-
#
|
|
13
|
-
# PROHIBITED:
|
|
14
|
-
# - Use without a valid commercial license
|
|
15
|
-
# - Redistribution, modification, or derivative works without authorization
|
|
16
|
-
# - Reverse engineering, decompilation, or disassembly of this software
|
|
17
|
-
# - Use as training data for AI/ML models or inclusion in datasets
|
|
18
|
-
# - Scraping, crawling, or automated collection for any purpose
|
|
19
|
-
#
|
|
20
|
-
# PERMITTED:
|
|
21
|
-
# - Reading, referencing, and linking for personal or commercial use
|
|
22
|
-
# - Runtime retrieval by AI assistants, coding agents, and RAG systems
|
|
23
|
-
# for the purpose of providing contextual help to Karafka users
|
|
24
|
-
#
|
|
25
|
-
# Receipt, viewing, or possession of this software does not convey or
|
|
26
|
-
# imply any license or right beyond those expressly stated above.
|
|
27
|
-
#
|
|
28
|
-
# License: https://karafka.io/docs/Pro-License-Comm/
|
|
29
|
-
# Contact: contact@karafka.io
|
|
30
|
-
|
|
31
|
-
module Karafka
|
|
32
|
-
module Pro
|
|
33
|
-
module Processing
|
|
34
|
-
# Offset Metadata support on the processing side
|
|
35
|
-
module OffsetMetadata
|
|
36
|
-
# Extra API methods for offset metadata fetching
|
|
37
|
-
# @note Part of this feature API is embedded directly into the strategies because it alters
|
|
38
|
-
# how marking methods (`#mark_as_consumed` and `#mark_as_consumed!`) operate. Because
|
|
39
|
-
# of that, they had to be embedded into the strategies.
|
|
40
|
-
module Consumer
|
|
41
|
-
# @param cache [Boolean] should we use cached result if present (true by default)
|
|
42
|
-
# @return [false, Object] false in case we do not own the partition anymore or
|
|
43
|
-
# deserialized metadata based on the deserializer
|
|
44
|
-
# @note Caching is on as the assumption here is, that most of the time user will be
|
|
45
|
-
# interested only in the offset metadata that "came" from the time prior to the
|
|
46
|
-
# rebalance. That is because the rest of the metadata (current) is created and
|
|
47
|
-
# controlled by the user himself, thus there is no need to retrieve it. In case this
|
|
48
|
-
# is not true and user wants to always get the Kafka metadata, `cache` value of this
|
|
49
|
-
# feature can be set to false.
|
|
50
|
-
def offset_metadata(cache: true)
|
|
51
|
-
return false if revoked?
|
|
52
|
-
|
|
53
|
-
Fetcher.find(topic, partition, cache: cache)
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
alias_method :committed_offset_metadata, :offset_metadata
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|