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,149 +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
|
-
# All code needed for messages piping in Karafka
|
|
35
|
-
module Piping
|
|
36
|
-
# Consumer piping functionality
|
|
37
|
-
#
|
|
38
|
-
# It provides way to pipe data in a consistent way with extra traceability headers similar
|
|
39
|
-
# to those in the enhanced DLQ.
|
|
40
|
-
module Consumer
|
|
41
|
-
# Empty hash to save on memory allocations
|
|
42
|
-
EMPTY_HASH = {}.freeze
|
|
43
|
-
|
|
44
|
-
private_constant :EMPTY_HASH
|
|
45
|
-
|
|
46
|
-
# Pipes given message to the provided topic with expected details. Useful for
|
|
47
|
-
# pass-through operations where deserialization is not needed. Upon usage it will include
|
|
48
|
-
# all the source headers + meta headers about the source of message.
|
|
49
|
-
#
|
|
50
|
-
# @param topic [String, Symbol] where we want to send the message
|
|
51
|
-
# @param message [Karafka::Messages::Message] source message to pipe
|
|
52
|
-
#
|
|
53
|
-
# @note It will NOT deserialize the payload so it is fast
|
|
54
|
-
#
|
|
55
|
-
# @note We assume that there can be different number of partitions in the target topic,
|
|
56
|
-
# this is why we use `key` based on the source topic key and not the partition id.
|
|
57
|
-
# This will not utilize partitions beyond the number of partitions of source topic,
|
|
58
|
-
# but will accommodate for topics with less partitions.
|
|
59
|
-
def pipe_async(topic:, message:)
|
|
60
|
-
produce_async(
|
|
61
|
-
build_pipe_message(topic: topic, message: message)
|
|
62
|
-
)
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
# Sync version of pipe for one message
|
|
66
|
-
#
|
|
67
|
-
# @param topic [String, Symbol] where we want to send the message
|
|
68
|
-
# @param message [Karafka::Messages::Message] source message to pipe
|
|
69
|
-
# @see [#pipe_async]
|
|
70
|
-
def pipe_sync(topic:, message:)
|
|
71
|
-
produce_sync(
|
|
72
|
-
build_pipe_message(topic: topic, message: message)
|
|
73
|
-
)
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
# Async multi-message pipe
|
|
77
|
-
#
|
|
78
|
-
# @param topic [String, Symbol] where we want to send the message
|
|
79
|
-
# @param messages [Array<Karafka::Messages::Message>] source messages to pipe
|
|
80
|
-
#
|
|
81
|
-
# @note If transactional producer in use and dispatch is not wrapped with a transaction,
|
|
82
|
-
# it will automatically wrap the dispatch with a transaction
|
|
83
|
-
def pipe_many_async(topic:, messages:)
|
|
84
|
-
messages = messages.map do |message|
|
|
85
|
-
build_pipe_message(topic: topic, message: message)
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
produce_many_async(messages)
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
# Sync multi-message pipe
|
|
92
|
-
#
|
|
93
|
-
# @param topic [String, Symbol] where we want to send the message
|
|
94
|
-
# @param messages [Array<Karafka::Messages::Message>] source messages to pipe
|
|
95
|
-
#
|
|
96
|
-
# @note If transactional producer in use and dispatch is not wrapped with a transaction,
|
|
97
|
-
# it will automatically wrap the dispatch with a transaction
|
|
98
|
-
def pipe_many_sync(topic:, messages:)
|
|
99
|
-
messages = messages.map do |message|
|
|
100
|
-
build_pipe_message(topic: topic, message: message)
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
produce_many_sync(messages)
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
private
|
|
107
|
-
|
|
108
|
-
# @param topic [String, Symbol] where we want to send the message
|
|
109
|
-
# @param message [Karafka::Messages::Message] source message to pipe
|
|
110
|
-
# @return [Hash] hash with message to pipe.
|
|
111
|
-
#
|
|
112
|
-
# @note If you need to alter this, please define the `#enhance_pipe_message` method
|
|
113
|
-
def build_pipe_message(topic:, message:)
|
|
114
|
-
pipe_message = {
|
|
115
|
-
topic: topic,
|
|
116
|
-
payload: message.raw_payload,
|
|
117
|
-
headers: message.raw_headers.merge(
|
|
118
|
-
"source_topic" => message.topic,
|
|
119
|
-
"source_partition" => message.partition.to_s,
|
|
120
|
-
"source_offset" => message.offset.to_s,
|
|
121
|
-
"source_consumer_group" => self.topic.consumer_group.id
|
|
122
|
-
)
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
# Use a key only if key was provided
|
|
126
|
-
pipe_message[:key] = if message.raw_key
|
|
127
|
-
message.raw_key
|
|
128
|
-
# Otherwise pipe creating a key that will assign it based on the source partition
|
|
129
|
-
# number
|
|
130
|
-
else
|
|
131
|
-
message.partition.to_s
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
# Optional method user can define in consumer to enhance the dlq message hash with
|
|
135
|
-
# some extra details if needed or to replace payload, etc
|
|
136
|
-
if respond_to?(:enhance_pipe_message, true)
|
|
137
|
-
enhance_pipe_message(
|
|
138
|
-
pipe_message,
|
|
139
|
-
message
|
|
140
|
-
)
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
pipe_message
|
|
144
|
-
end
|
|
145
|
-
end
|
|
146
|
-
end
|
|
147
|
-
end
|
|
148
|
-
end
|
|
149
|
-
end
|
|
@@ -1,94 +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 Strategies
|
|
35
|
-
module Aj
|
|
36
|
-
# ActiveJob enabled
|
|
37
|
-
# DLQ enabled
|
|
38
|
-
# Filtering enabled
|
|
39
|
-
# Long-Running Job enabled
|
|
40
|
-
# Manual offset management enabled
|
|
41
|
-
# Virtual Partitions enabled
|
|
42
|
-
module DlqFtrLrjMomVp
|
|
43
|
-
include Strategies::Aj::FtrMom
|
|
44
|
-
include Strategies::Aj::DlqMomVp
|
|
45
|
-
include Strategies::Aj::LrjMom
|
|
46
|
-
|
|
47
|
-
# Features for this strategy
|
|
48
|
-
FEATURES = %i[
|
|
49
|
-
active_job
|
|
50
|
-
dead_letter_queue
|
|
51
|
-
filtering
|
|
52
|
-
long_running_job
|
|
53
|
-
manual_offset_management
|
|
54
|
-
virtual_partitions
|
|
55
|
-
].freeze
|
|
56
|
-
|
|
57
|
-
# This strategy assumes we do not early break on shutdown as it has VP
|
|
58
|
-
def handle_after_consume
|
|
59
|
-
coordinator.on_finished do |last_group_message|
|
|
60
|
-
if coordinator.success?
|
|
61
|
-
coordinator.pause_tracker.reset
|
|
62
|
-
|
|
63
|
-
# Since we have VP here we do not commit intermediate offsets and need to commit
|
|
64
|
-
# them here. We do commit in collapsed mode but this is generalized.
|
|
65
|
-
mark_as_consumed(last_group_message) unless revoked?
|
|
66
|
-
|
|
67
|
-
if coordinator.filtered? && !revoked?
|
|
68
|
-
handle_post_filtering
|
|
69
|
-
|
|
70
|
-
# :seek and :pause are fully handled by handle_post_filtering
|
|
71
|
-
# For :skip we still need to resume the LRJ MAX_PAUSE_TIME pause
|
|
72
|
-
return unless coordinator.filter.action == :skip
|
|
73
|
-
elsif !revoked?
|
|
74
|
-
# no need to check for manual seek because AJ consumer is internal and
|
|
75
|
-
# fully controlled by us
|
|
76
|
-
seek(seek_offset, false, reset_offset: false)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
resume
|
|
80
|
-
else
|
|
81
|
-
apply_dlq_flow do
|
|
82
|
-
skippable_message, = find_skippable_message
|
|
83
|
-
dispatch_to_dlq(skippable_message) if dispatch_to_dlq?
|
|
84
|
-
mark_dispatched_to_dlq(skippable_message)
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
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 Strategies
|
|
35
|
-
module Aj
|
|
36
|
-
# - Aj
|
|
37
|
-
# - Dlq
|
|
38
|
-
# - Ftr
|
|
39
|
-
# - Mom
|
|
40
|
-
module DlqFtrMom
|
|
41
|
-
include Strategies::Dlq::FtrMom
|
|
42
|
-
|
|
43
|
-
# Features for this strategy
|
|
44
|
-
FEATURES = %i[
|
|
45
|
-
active_job
|
|
46
|
-
dead_letter_queue
|
|
47
|
-
filtering
|
|
48
|
-
manual_offset_management
|
|
49
|
-
].freeze
|
|
50
|
-
|
|
51
|
-
# We write our own custom handler for after consume here, because we mark as consumed
|
|
52
|
-
# per each job in the AJ consumer itself (for this strategy). This means, that for DLQ
|
|
53
|
-
# dispatch, we can mark this message as consumed as well.
|
|
54
|
-
def handle_after_consume
|
|
55
|
-
coordinator.on_finished do
|
|
56
|
-
return if revoked?
|
|
57
|
-
|
|
58
|
-
if coordinator.success?
|
|
59
|
-
coordinator.pause_tracker.reset
|
|
60
|
-
|
|
61
|
-
return if coordinator.manual_pause?
|
|
62
|
-
|
|
63
|
-
handle_post_filtering
|
|
64
|
-
# If we've reached number of retries that we could, we need to skip the first
|
|
65
|
-
# message that was not marked as consumed, pause and continue, while also moving
|
|
66
|
-
# this message to the dead topic.
|
|
67
|
-
#
|
|
68
|
-
# For a Mom setup, this means, that user has to manage the checkpointing by
|
|
69
|
-
# himself. If no checkpointing is ever done, we end up with an endless loop.
|
|
70
|
-
else
|
|
71
|
-
apply_dlq_flow do
|
|
72
|
-
skippable_message, = find_skippable_message
|
|
73
|
-
dispatch_to_dlq(skippable_message) if dispatch_to_dlq?
|
|
74
|
-
# We can commit the offset here because we know that we skip it "forever" and
|
|
75
|
-
# since AJ consumer commits the offset after each job, we also know that the
|
|
76
|
-
# previous job was successful
|
|
77
|
-
mark_dispatched_to_dlq(skippable_message)
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
@@ -1,85 +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 Strategies
|
|
35
|
-
module Aj
|
|
36
|
-
# - Aj
|
|
37
|
-
# - Dlq
|
|
38
|
-
# - Ftr
|
|
39
|
-
# - Mom
|
|
40
|
-
# - VP
|
|
41
|
-
module DlqFtrMomVp
|
|
42
|
-
include Strategies::Aj::DlqMomVp
|
|
43
|
-
include Strategies::Aj::DlqFtrMom
|
|
44
|
-
|
|
45
|
-
# Features for this strategy
|
|
46
|
-
FEATURES = %i[
|
|
47
|
-
active_job
|
|
48
|
-
dead_letter_queue
|
|
49
|
-
filtering
|
|
50
|
-
manual_offset_management
|
|
51
|
-
virtual_partitions
|
|
52
|
-
].freeze
|
|
53
|
-
|
|
54
|
-
# AJ VP does not early stop on shutdown, hence here we can mark as consumed at the
|
|
55
|
-
# end of all VPs
|
|
56
|
-
def handle_after_consume
|
|
57
|
-
coordinator.on_finished do |last_group_message|
|
|
58
|
-
return if revoked?
|
|
59
|
-
|
|
60
|
-
if coordinator.success?
|
|
61
|
-
coordinator.pause_tracker.reset
|
|
62
|
-
|
|
63
|
-
return if coordinator.manual_pause?
|
|
64
|
-
|
|
65
|
-
mark_as_consumed(last_group_message)
|
|
66
|
-
|
|
67
|
-
handle_post_filtering
|
|
68
|
-
else
|
|
69
|
-
apply_dlq_flow do
|
|
70
|
-
skippable_message, = find_skippable_message
|
|
71
|
-
dispatch_to_dlq(skippable_message) if dispatch_to_dlq?
|
|
72
|
-
# We can commit the offset here because we know that we skip it "forever" and
|
|
73
|
-
# since AJ consumer commits the offset after each job, we also know that the
|
|
74
|
-
# previous job was successful
|
|
75
|
-
mark_dispatched_to_dlq(skippable_message)
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
@@ -1,81 +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 Strategies
|
|
35
|
-
module Aj
|
|
36
|
-
# ActiveJob enabled
|
|
37
|
-
# DLQ enabled
|
|
38
|
-
# Long-Running Job enabled
|
|
39
|
-
# Manual offset management enabled
|
|
40
|
-
#
|
|
41
|
-
# This case is a bit of special. Please see the `AjDlqMom` for explanation on how the
|
|
42
|
-
# offset management works in this case.
|
|
43
|
-
module DlqLrjMom
|
|
44
|
-
include Strategies::Default
|
|
45
|
-
include Strategies::Dlq::Default
|
|
46
|
-
include Strategies::Aj::LrjMom
|
|
47
|
-
|
|
48
|
-
# Features for this strategy
|
|
49
|
-
FEATURES = %i[
|
|
50
|
-
active_job
|
|
51
|
-
dead_letter_queue
|
|
52
|
-
long_running_job
|
|
53
|
-
manual_offset_management
|
|
54
|
-
].freeze
|
|
55
|
-
|
|
56
|
-
# We cannot use a VP version of this, because non-VP can early stop on shutdown
|
|
57
|
-
def handle_after_consume
|
|
58
|
-
coordinator.on_finished do
|
|
59
|
-
if coordinator.success?
|
|
60
|
-
coordinator.pause_tracker.reset
|
|
61
|
-
|
|
62
|
-
# no need to check for manual seek because AJ consumer is internal and
|
|
63
|
-
# fully controlled by us
|
|
64
|
-
seek(seek_offset, false, reset_offset: false) unless revoked?
|
|
65
|
-
|
|
66
|
-
resume
|
|
67
|
-
else
|
|
68
|
-
apply_dlq_flow do
|
|
69
|
-
skippable_message, = find_skippable_message
|
|
70
|
-
dispatch_to_dlq(skippable_message) if dispatch_to_dlq?
|
|
71
|
-
mark_dispatched_to_dlq(skippable_message)
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
@@ -1,85 +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 Strategies
|
|
35
|
-
module Aj
|
|
36
|
-
# ActiveJob enabled
|
|
37
|
-
# DLQ enabled
|
|
38
|
-
# Long-Running Job enabled
|
|
39
|
-
# Manual offset management enabled
|
|
40
|
-
# Virtual Partitions enabled
|
|
41
|
-
#
|
|
42
|
-
# This case is a bit of special. Please see the `Aj::DlqMom` for explanation on how the
|
|
43
|
-
# offset management works in this case.
|
|
44
|
-
module DlqLrjMomVp
|
|
45
|
-
include Strategies::Aj::DlqMomVp
|
|
46
|
-
include Strategies::Aj::LrjMom
|
|
47
|
-
|
|
48
|
-
# Features for this strategy
|
|
49
|
-
FEATURES = %i[
|
|
50
|
-
active_job
|
|
51
|
-
dead_letter_queue
|
|
52
|
-
long_running_job
|
|
53
|
-
manual_offset_management
|
|
54
|
-
virtual_partitions
|
|
55
|
-
].freeze
|
|
56
|
-
|
|
57
|
-
# This strategy assumes we do not early break on shutdown as it has VP
|
|
58
|
-
def handle_after_consume
|
|
59
|
-
coordinator.on_finished do |last_group_message|
|
|
60
|
-
if coordinator.success?
|
|
61
|
-
coordinator.pause_tracker.reset
|
|
62
|
-
|
|
63
|
-
# Since we have VP here we do not commit intermediate offsets and need to commit
|
|
64
|
-
# them here. We do commit in collapsed mode but this is generalized.
|
|
65
|
-
mark_as_consumed(last_group_message) unless revoked?
|
|
66
|
-
# no need to check for manual seek because AJ consumer is internal and
|
|
67
|
-
# fully controlled by us
|
|
68
|
-
seek(seek_offset, false, reset_offset: false) unless revoked?
|
|
69
|
-
|
|
70
|
-
resume
|
|
71
|
-
else
|
|
72
|
-
apply_dlq_flow do
|
|
73
|
-
skippable_message, = find_skippable_message
|
|
74
|
-
dispatch_to_dlq(skippable_message) if dispatch_to_dlq?
|
|
75
|
-
mark_dispatched_to_dlq(skippable_message)
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
@@ -1,79 +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 Strategies
|
|
35
|
-
module Aj
|
|
36
|
-
# ActiveJob enabled
|
|
37
|
-
# DLQ enabled
|
|
38
|
-
# Manual offset management enabled
|
|
39
|
-
#
|
|
40
|
-
# AJ has manual offset management on by default and the offset management is delegated to
|
|
41
|
-
# the AJ consumer. This means, we cannot mark as consumed always. We can only mark as
|
|
42
|
-
# consumed when we skip given job upon errors. In all the other scenarios marking as
|
|
43
|
-
# consumed needs to happen in the AJ consumer on a per job basis.
|
|
44
|
-
module DlqMom
|
|
45
|
-
include Strategies::Dlq::Mom
|
|
46
|
-
|
|
47
|
-
# Features for this strategy
|
|
48
|
-
FEATURES = %i[
|
|
49
|
-
active_job
|
|
50
|
-
dead_letter_queue
|
|
51
|
-
manual_offset_management
|
|
52
|
-
].freeze
|
|
53
|
-
|
|
54
|
-
# How should we post-finalize consumption.
|
|
55
|
-
def handle_after_consume
|
|
56
|
-
coordinator.on_finished do
|
|
57
|
-
return if revoked?
|
|
58
|
-
|
|
59
|
-
if coordinator.success?
|
|
60
|
-
# Do NOT commit offsets, they are comitted after each job in the AJ consumer.
|
|
61
|
-
coordinator.pause_tracker.reset
|
|
62
|
-
else
|
|
63
|
-
apply_dlq_flow do
|
|
64
|
-
skippable_message, = find_skippable_message
|
|
65
|
-
dispatch_to_dlq(skippable_message) if dispatch_to_dlq?
|
|
66
|
-
# We can commit the offset here because we know that we skip it "forever" and
|
|
67
|
-
# since AJ consumer commits the offset after each job, we also know that the
|
|
68
|
-
# previous job was successful
|
|
69
|
-
mark_dispatched_to_dlq(skippable_message)
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|