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,47 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Processing
|
|
5
|
-
module Jobs
|
|
6
|
-
# The main job type. It runs the executor that triggers given topic partition messages
|
|
7
|
-
# processing in an underlying consumer instance.
|
|
8
|
-
class Consume < Base
|
|
9
|
-
# @return [Array<Rdkafka::Consumer::Message>] array with messages
|
|
10
|
-
attr_reader :messages
|
|
11
|
-
|
|
12
|
-
self.action = :consume
|
|
13
|
-
|
|
14
|
-
# @param executor [Karafka::Processing::Executor] executor that is suppose to run a given
|
|
15
|
-
# job
|
|
16
|
-
# @param messages [Karafka::Messages::Messages] karafka messages batch
|
|
17
|
-
# @return [Consume]
|
|
18
|
-
def initialize(executor, messages)
|
|
19
|
-
@executor = executor
|
|
20
|
-
@messages = messages
|
|
21
|
-
super()
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Runs all the preparation code on the executor that needs to happen before the job is
|
|
25
|
-
# scheduled.
|
|
26
|
-
def before_schedule
|
|
27
|
-
executor.before_schedule_consume(@messages)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
# Runs the before consumption preparations on the executor
|
|
31
|
-
def before_call
|
|
32
|
-
executor.before_consume
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# Runs the given executor
|
|
36
|
-
def call
|
|
37
|
-
executor.consume
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Runs any error handling and other post-consumption stuff on the executor
|
|
41
|
-
def after_call
|
|
42
|
-
executor.after_consume
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Processing
|
|
5
|
-
module Jobs
|
|
6
|
-
# Job that runs the eofed operation when we receive eof without messages alongside.
|
|
7
|
-
class Eofed < Base
|
|
8
|
-
self.action = :eofed
|
|
9
|
-
|
|
10
|
-
# @param executor [Karafka::Processing::Executor] executor that is suppose to run the job
|
|
11
|
-
# @return [Eofed]
|
|
12
|
-
def initialize(executor)
|
|
13
|
-
@executor = executor
|
|
14
|
-
super()
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
# Runs code prior to scheduling this eofed job
|
|
18
|
-
def before_schedule
|
|
19
|
-
executor.before_schedule_eofed
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
# Runs the eofed job via an executor.
|
|
23
|
-
def call
|
|
24
|
-
executor.eofed
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Processing
|
|
5
|
-
module Jobs
|
|
6
|
-
# Type of job that we may use to run some extra handling that happens without the user
|
|
7
|
-
# related lifecycle event like consumption, revocation, etc.
|
|
8
|
-
class Idle < Base
|
|
9
|
-
self.action = :idle
|
|
10
|
-
|
|
11
|
-
# @param executor [Karafka::Processing::Executor] executor that is suppose to run a given
|
|
12
|
-
# job on an active consumer
|
|
13
|
-
# @return [Shutdown]
|
|
14
|
-
def initialize(executor)
|
|
15
|
-
@executor = executor
|
|
16
|
-
super()
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
# Runs code prior to scheduling this idle job
|
|
20
|
-
def before_schedule
|
|
21
|
-
executor.before_schedule_idle
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Run the idle work via the executor
|
|
25
|
-
def call
|
|
26
|
-
executor.idle
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Processing
|
|
5
|
-
module Jobs
|
|
6
|
-
# Job that runs the revoked operation when we loose a partition on a consumer that lost it.
|
|
7
|
-
class Revoked < Base
|
|
8
|
-
self.action = :revoked
|
|
9
|
-
|
|
10
|
-
# @param executor [Karafka::Processing::Executor] executor that is suppose to run the job
|
|
11
|
-
# @return [Revoked]
|
|
12
|
-
def initialize(executor)
|
|
13
|
-
@executor = executor
|
|
14
|
-
super()
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
# Runs code prior to scheduling this revoked job
|
|
18
|
-
def before_schedule
|
|
19
|
-
executor.before_schedule_revoked
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
# Runs the revoking job via an executor.
|
|
23
|
-
def call
|
|
24
|
-
executor.revoked
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Processing
|
|
5
|
-
module Jobs
|
|
6
|
-
# Job that runs on each active consumer upon process shutdown (one job per consumer).
|
|
7
|
-
class Shutdown < Base
|
|
8
|
-
self.action = :shutdown
|
|
9
|
-
|
|
10
|
-
# @param executor [Karafka::Processing::Executor] executor that is suppose to run a given
|
|
11
|
-
# job on an active consumer
|
|
12
|
-
# @return [Shutdown]
|
|
13
|
-
def initialize(executor)
|
|
14
|
-
@executor = executor
|
|
15
|
-
super()
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# Runs code prior to scheduling this shutdown job
|
|
19
|
-
def before_schedule
|
|
20
|
-
executor.before_schedule_shutdown
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Runs the shutdown job via an executor.
|
|
24
|
-
def call
|
|
25
|
-
executor.shutdown
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Processing
|
|
5
|
-
# Class responsible for deciding what type of job should we build to run a given command and
|
|
6
|
-
# for building a proper job for it.
|
|
7
|
-
class JobsBuilder
|
|
8
|
-
# @param executor [Karafka::Processing::Executor]
|
|
9
|
-
# @param messages [Karafka::Messages::Messages] messages batch to be consumed
|
|
10
|
-
# @return [Karafka::Processing::Jobs::Consume] consumption job
|
|
11
|
-
def consume(executor, messages)
|
|
12
|
-
Jobs::Consume.new(executor, messages)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# @param executor [Karafka::Processing::Executor]
|
|
16
|
-
# @return [Karafka::Processing::Jobs::Eofed] eofed job
|
|
17
|
-
def eofed(executor)
|
|
18
|
-
Jobs::Eofed.new(executor)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# @param executor [Karafka::Processing::Executor]
|
|
22
|
-
# @return [Karafka::Processing::Jobs::Revoked] revocation job
|
|
23
|
-
def revoked(executor)
|
|
24
|
-
Jobs::Revoked.new(executor)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# @param executor [Karafka::Processing::Executor]
|
|
28
|
-
# @return [Karafka::Processing::Jobs::Shutdown] shutdown job
|
|
29
|
-
def shutdown(executor)
|
|
30
|
-
Jobs::Shutdown.new(executor)
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Processing
|
|
5
|
-
module Strategies
|
|
6
|
-
# ActiveJob strategy to cooperate with the DLQ.
|
|
7
|
-
#
|
|
8
|
-
# While AJ is uses MOM by default because it delegates the offset management to the AJ
|
|
9
|
-
# consumer. With DLQ however there is an extra case for skipping broken jobs with offset
|
|
10
|
-
# marking due to ordered processing.
|
|
11
|
-
module AjDlqMom
|
|
12
|
-
include DlqMom
|
|
13
|
-
|
|
14
|
-
# Apply strategy when only when using AJ with MOM and DLQ
|
|
15
|
-
FEATURES = %i[
|
|
16
|
-
active_job
|
|
17
|
-
dead_letter_queue
|
|
18
|
-
manual_offset_management
|
|
19
|
-
].freeze
|
|
20
|
-
|
|
21
|
-
# How should we post-finalize consumption.
|
|
22
|
-
def handle_after_consume
|
|
23
|
-
return if revoked?
|
|
24
|
-
|
|
25
|
-
if coordinator.success?
|
|
26
|
-
# Do NOT commit offsets, they are comitted after each job in the AJ consumer.
|
|
27
|
-
coordinator.pause_tracker.reset
|
|
28
|
-
elsif coordinator.pause_tracker.attempt <= topic.dead_letter_queue.max_retries
|
|
29
|
-
retry_after_pause
|
|
30
|
-
else
|
|
31
|
-
coordinator.pause_tracker.reset
|
|
32
|
-
skippable_message, = find_skippable_message
|
|
33
|
-
dispatch_to_dlq(skippable_message)
|
|
34
|
-
# We can commit the offset here because we know that we skip it "forever" and
|
|
35
|
-
# since AJ consumer commits the offset after each job, we also know that the
|
|
36
|
-
# previous job was successful
|
|
37
|
-
mark_dispatched_to_dlq(skippable_message)
|
|
38
|
-
pause(seek_offset, nil, false)
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Processing
|
|
5
|
-
module Strategies
|
|
6
|
-
# ActiveJob enabled
|
|
7
|
-
# Manual offset management enabled
|
|
8
|
-
#
|
|
9
|
-
# This is the default AJ strategy since AJ cannot be used without MOM
|
|
10
|
-
module AjMom
|
|
11
|
-
include Mom
|
|
12
|
-
|
|
13
|
-
# Apply strategy when only when using AJ with MOM
|
|
14
|
-
FEATURES = %i[
|
|
15
|
-
active_job
|
|
16
|
-
manual_offset_management
|
|
17
|
-
].freeze
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Processing
|
|
5
|
-
# Our processing patterns differ depending on various features configurations
|
|
6
|
-
# In this namespace we collect strategies for particular feature combinations to simplify the
|
|
7
|
-
# design. Based on features combinations we can then select handling strategy for a given case.
|
|
8
|
-
#
|
|
9
|
-
# @note The lack of common code here is intentional. It would get complex if there would be
|
|
10
|
-
# any type of composition, so each strategy is expected to be self-sufficient
|
|
11
|
-
module Strategies
|
|
12
|
-
# Base strategy that should be included in each strategy, just to ensure the API
|
|
13
|
-
module Base
|
|
14
|
-
# Defines all the before schedule handlers for appropriate actions
|
|
15
|
-
%i[
|
|
16
|
-
consume
|
|
17
|
-
idle
|
|
18
|
-
revoked
|
|
19
|
-
shutdown
|
|
20
|
-
].each do |action|
|
|
21
|
-
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
|
22
|
-
def handle_before_schedule_#{action}
|
|
23
|
-
# What should happen before scheduling this work
|
|
24
|
-
raise NotImplementedError, 'Implement in a subclass'
|
|
25
|
-
end
|
|
26
|
-
RUBY
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# What should happen before we kick in the processing
|
|
30
|
-
def handle_before_consume
|
|
31
|
-
raise NotImplementedError, "Implement in a subclass"
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# What should happen in the processing
|
|
35
|
-
def handle_consume
|
|
36
|
-
raise NotImplementedError, "Implement in a subclass"
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# Post-consumption handling
|
|
40
|
-
def handle_after_consume
|
|
41
|
-
raise NotImplementedError, "Implement in a subclass"
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
# Idle run handling
|
|
45
|
-
def handle_idle
|
|
46
|
-
raise NotImplementedError, "Implement in a subclass"
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
# Revocation handling
|
|
50
|
-
def handle_revoked
|
|
51
|
-
raise NotImplementedError, "Implement in a subclass"
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
# Shutdown handling
|
|
55
|
-
def handle_shutdown
|
|
56
|
-
raise NotImplementedError, "Implement in a subclass"
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Processing
|
|
5
|
-
module Strategies
|
|
6
|
-
# No features enabled.
|
|
7
|
-
# No manual offset management
|
|
8
|
-
# No long running jobs
|
|
9
|
-
# Nothing. Just standard, automatic flow
|
|
10
|
-
module Default
|
|
11
|
-
include Base
|
|
12
|
-
|
|
13
|
-
# Apply strategy for a non-feature based flow
|
|
14
|
-
FEATURES = %i[].freeze
|
|
15
|
-
|
|
16
|
-
# By default on all "before schedule" we just run instrumentation, nothing more
|
|
17
|
-
%i[
|
|
18
|
-
consume
|
|
19
|
-
idle
|
|
20
|
-
eofed
|
|
21
|
-
revoked
|
|
22
|
-
shutdown
|
|
23
|
-
].each do |action|
|
|
24
|
-
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
|
25
|
-
# No actions needed for the standard flow here
|
|
26
|
-
def handle_before_schedule_#{action}
|
|
27
|
-
monitor.instrument('consumer.before_schedule_#{action}', caller: self)
|
|
28
|
-
|
|
29
|
-
nil
|
|
30
|
-
end
|
|
31
|
-
RUBY
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# Runs the post-creation, post-assignment code
|
|
35
|
-
# @note It runs in the listener loop. Should **not** be used for anything heavy or
|
|
36
|
-
# with any potential errors. Mostly for initialization of states, etc.
|
|
37
|
-
def handle_initialized
|
|
38
|
-
monitor.instrument("consumer.initialize", caller: self)
|
|
39
|
-
monitor.instrument("consumer.initialized", caller: self) do
|
|
40
|
-
initialized
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
# Marks message as consumed in an async way.
|
|
45
|
-
#
|
|
46
|
-
# @param message [Messages::Message] last successfully processed message.
|
|
47
|
-
# @return [Boolean] true if we were able to mark the offset, false otherwise.
|
|
48
|
-
# False indicates that we were not able and that we have lost the partition.
|
|
49
|
-
#
|
|
50
|
-
# @note We keep track of this offset in case we would mark as consumed and got error when
|
|
51
|
-
# processing another message. In case like this we do not pause on the message we've
|
|
52
|
-
# already processed but rather at the next one. This applies to both sync and async
|
|
53
|
-
# versions of this method.
|
|
54
|
-
def mark_as_consumed(message)
|
|
55
|
-
# seek offset can be nil only in case `#seek` was invoked with offset reset request
|
|
56
|
-
# In case like this we ignore marking
|
|
57
|
-
return true if seek_offset.nil?
|
|
58
|
-
# Ignore double markings of the same offset
|
|
59
|
-
return true if (seek_offset - 1) == message.offset
|
|
60
|
-
return false if revoked?
|
|
61
|
-
return revoked? unless client.mark_as_consumed(message)
|
|
62
|
-
|
|
63
|
-
self.seek_offset = message.offset + 1
|
|
64
|
-
|
|
65
|
-
true
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
# Marks message as consumed in a sync way.
|
|
69
|
-
#
|
|
70
|
-
# @param message [Messages::Message] last successfully processed message.
|
|
71
|
-
# @return [Boolean] true if we were able to mark the offset, false otherwise.
|
|
72
|
-
# False indicates that we were not able and that we have lost the partition.
|
|
73
|
-
def mark_as_consumed!(message)
|
|
74
|
-
# seek offset can be nil only in case `#seek` was invoked with offset reset request
|
|
75
|
-
# In case like this we ignore marking
|
|
76
|
-
return true if seek_offset.nil?
|
|
77
|
-
# Ignore double markings of the same offset
|
|
78
|
-
return true if (seek_offset - 1) == message.offset
|
|
79
|
-
return false if revoked?
|
|
80
|
-
|
|
81
|
-
return revoked? unless client.mark_as_consumed!(message)
|
|
82
|
-
|
|
83
|
-
self.seek_offset = message.offset + 1
|
|
84
|
-
|
|
85
|
-
true
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
# Triggers an async offset commit
|
|
89
|
-
#
|
|
90
|
-
# @param async [Boolean] should we use async (default) or sync commit
|
|
91
|
-
# @return [Boolean] true if we still own the partition.
|
|
92
|
-
# @note Due to its async nature, this may not fully represent the offset state in some
|
|
93
|
-
# edge cases (like for example going beyond max.poll.interval)
|
|
94
|
-
def commit_offsets(async: true)
|
|
95
|
-
# Do not commit if we already lost the assignment
|
|
96
|
-
return false if revoked?
|
|
97
|
-
return true if client.commit_offsets(async: async)
|
|
98
|
-
|
|
99
|
-
# This will once more check the librdkafka revocation status and will revoke the
|
|
100
|
-
# coordinator in case it was not revoked
|
|
101
|
-
revoked?
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# Triggers a synchronous offsets commit to Kafka
|
|
105
|
-
#
|
|
106
|
-
# @return [Boolean] true if we still own the partition, false otherwise.
|
|
107
|
-
# @note This is fully synchronous, hence the result of this can be used in DB transactions
|
|
108
|
-
# etc as a way of making sure, that we still own the partition.
|
|
109
|
-
def commit_offsets!
|
|
110
|
-
commit_offsets(async: false)
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
# Increment number of attempts
|
|
114
|
-
def handle_before_consume
|
|
115
|
-
coordinator.pause_tracker.increment
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
# Runs the wrapping to execute appropriate action wrapped with the wrapper method code
|
|
119
|
-
#
|
|
120
|
-
# @param action [Symbol]
|
|
121
|
-
# @param block [Proc]
|
|
122
|
-
def handle_wrap(action, &block)
|
|
123
|
-
monitor.instrument("consumer.wrap", caller: self)
|
|
124
|
-
monitor.instrument("consumer.wrapped", caller: self) do
|
|
125
|
-
wrap(action, &block)
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
# Run the user consumption code
|
|
130
|
-
def handle_consume
|
|
131
|
-
monitor.instrument("consumer.consume", caller: self)
|
|
132
|
-
monitor.instrument("consumer.consumed", caller: self) do
|
|
133
|
-
consume
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
# Mark job as successful
|
|
137
|
-
coordinator.success!(self)
|
|
138
|
-
rescue => e
|
|
139
|
-
coordinator.failure!(self, e)
|
|
140
|
-
|
|
141
|
-
# Re-raise so reported in the consumer
|
|
142
|
-
raise e
|
|
143
|
-
ensure
|
|
144
|
-
# We need to decrease number of jobs that this coordinator coordinates as it has finished
|
|
145
|
-
coordinator.decrement(:consume)
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
# Standard flow marks work as consumed and moves on if everything went ok.
|
|
149
|
-
# If there was a processing error, we will pause and continue from the next message
|
|
150
|
-
# (next that is +1 from the last one that was successfully marked as consumed)
|
|
151
|
-
def handle_after_consume
|
|
152
|
-
return if revoked?
|
|
153
|
-
|
|
154
|
-
if coordinator.success?
|
|
155
|
-
coordinator.pause_tracker.reset
|
|
156
|
-
|
|
157
|
-
# We should not move the offset automatically when the partition was paused
|
|
158
|
-
# If we would not do this upon a revocation during the pause time, a different process
|
|
159
|
-
# would pick not from the place where we paused but from the offset that would be
|
|
160
|
-
# automatically committed here
|
|
161
|
-
return if coordinator.manual_pause?
|
|
162
|
-
|
|
163
|
-
mark_as_consumed(messages.last)
|
|
164
|
-
else
|
|
165
|
-
retry_after_pause
|
|
166
|
-
end
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
# Code that should run on idle runs without messages available
|
|
170
|
-
def handle_idle
|
|
171
|
-
nil
|
|
172
|
-
ensure
|
|
173
|
-
coordinator.decrement(:idle)
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
# Runs the consumer `#eofed` method with reporting
|
|
177
|
-
def handle_eofed
|
|
178
|
-
monitor.instrument("consumer.eof", caller: self)
|
|
179
|
-
monitor.instrument("consumer.eofed", caller: self) do
|
|
180
|
-
eofed
|
|
181
|
-
end
|
|
182
|
-
ensure
|
|
183
|
-
coordinator.decrement(:eofed)
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
# We need to always un-pause the processing in case we have lost a given partition.
|
|
187
|
-
# Otherwise the underlying librdkafka would not know we may want to continue processing and
|
|
188
|
-
# the pause could in theory last forever
|
|
189
|
-
def handle_revoked
|
|
190
|
-
resume
|
|
191
|
-
|
|
192
|
-
coordinator.revoke
|
|
193
|
-
|
|
194
|
-
monitor.instrument("consumer.revoke", caller: self)
|
|
195
|
-
monitor.instrument("consumer.revoked", caller: self) do
|
|
196
|
-
revoked
|
|
197
|
-
end
|
|
198
|
-
ensure
|
|
199
|
-
coordinator.decrement(:revoked)
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
# Runs the shutdown code
|
|
203
|
-
def handle_shutdown
|
|
204
|
-
monitor.instrument("consumer.shutting_down", caller: self)
|
|
205
|
-
monitor.instrument("consumer.shutdown", caller: self) do
|
|
206
|
-
shutdown
|
|
207
|
-
end
|
|
208
|
-
ensure
|
|
209
|
-
coordinator.decrement(:shutdown)
|
|
210
|
-
end
|
|
211
|
-
end
|
|
212
|
-
end
|
|
213
|
-
end
|
|
214
|
-
end
|