karafka 2.4.15 → 2.4.17
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
- checksums.yaml.gz.sig +0 -0
- data/.github/workflows/ci.yml +5 -5
- data/.ruby-version +1 -1
- data/CHANGELOG.md +15 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +17 -14
- data/LICENSE +7 -2
- data/config/locales/errors.yml +1 -0
- data/docker-compose.yml +0 -2
- data/lib/karafka/base_consumer.rb +70 -16
- data/lib/karafka/connection/client.rb +2 -16
- data/lib/karafka/connection/rebalance_manager.rb +24 -13
- data/lib/karafka/instrumentation/logger_listener.rb +3 -0
- data/lib/karafka/instrumentation/notifications.rb +4 -0
- data/lib/karafka/instrumentation/vendors/datadog/logger_listener.rb +1 -26
- data/lib/karafka/pro/active_job/consumer.rb +2 -10
- data/lib/karafka/pro/active_job/dispatcher.rb +2 -10
- data/lib/karafka/pro/active_job/job_options_contract.rb +2 -10
- data/lib/karafka/pro/base_consumer.rb +2 -10
- data/lib/karafka/pro/cleaner/errors.rb +2 -10
- data/lib/karafka/pro/cleaner/messages/message.rb +14 -12
- data/lib/karafka/pro/cleaner/messages/messages.rb +2 -10
- data/lib/karafka/pro/cleaner/messages/metadata.rb +41 -0
- data/lib/karafka/pro/cleaner.rb +3 -10
- data/lib/karafka/pro/connection/manager.rb +2 -10
- data/lib/karafka/pro/connection/multiplexing/listener.rb +2 -10
- data/lib/karafka/pro/contracts/base.rb +2 -10
- data/lib/karafka/pro/contracts/server_cli_options.rb +2 -10
- data/lib/karafka/pro/encryption/cipher.rb +2 -10
- data/lib/karafka/pro/encryption/contracts/config.rb +2 -10
- data/lib/karafka/pro/encryption/errors.rb +2 -10
- data/lib/karafka/pro/encryption/messages/middleware.rb +2 -10
- data/lib/karafka/pro/encryption/messages/parser.rb +2 -10
- data/lib/karafka/pro/encryption/setup/config.rb +2 -10
- data/lib/karafka/pro/encryption.rb +2 -10
- data/lib/karafka/pro/instrumentation/performance_tracker.rb +2 -10
- data/lib/karafka/pro/iterator/expander.rb +2 -10
- data/lib/karafka/pro/iterator/tpl_builder.rb +2 -10
- data/lib/karafka/pro/iterator.rb +2 -10
- data/lib/karafka/pro/loader.rb +2 -10
- data/lib/karafka/pro/processing/adaptive_iterator/consumer.rb +2 -10
- data/lib/karafka/pro/processing/adaptive_iterator/tracker.rb +2 -10
- data/lib/karafka/pro/processing/collapser.rb +2 -10
- data/lib/karafka/pro/processing/coordinator.rb +2 -10
- data/lib/karafka/pro/processing/coordinators/errors_tracker.rb +2 -10
- data/lib/karafka/pro/processing/coordinators/filters_applier.rb +2 -10
- data/lib/karafka/pro/processing/coordinators/virtual_offset_manager.rb +2 -10
- data/lib/karafka/pro/processing/executor.rb +2 -10
- data/lib/karafka/pro/processing/expansions_selector.rb +2 -10
- data/lib/karafka/pro/processing/filters/base.rb +2 -10
- data/lib/karafka/pro/processing/filters/delayer.rb +2 -10
- data/lib/karafka/pro/processing/filters/expirer.rb +2 -10
- data/lib/karafka/pro/processing/filters/inline_insights_delayer.rb +2 -10
- data/lib/karafka/pro/processing/filters/throttler.rb +2 -10
- data/lib/karafka/pro/processing/filters/virtual_limiter.rb +2 -10
- data/lib/karafka/pro/processing/jobs/consume_non_blocking.rb +4 -10
- data/lib/karafka/pro/processing/jobs/eofed_non_blocking.rb +4 -10
- data/lib/karafka/pro/processing/jobs/periodic.rb +4 -10
- data/lib/karafka/pro/processing/jobs/periodic_non_blocking.rb +4 -10
- data/lib/karafka/pro/processing/jobs/revoked_non_blocking.rb +4 -10
- data/lib/karafka/pro/processing/jobs_builder.rb +2 -10
- data/lib/karafka/pro/processing/jobs_queue.rb +2 -10
- data/lib/karafka/pro/processing/offset_metadata/consumer.rb +2 -10
- data/lib/karafka/pro/processing/offset_metadata/fetcher.rb +2 -10
- data/lib/karafka/pro/processing/offset_metadata/listener.rb +2 -10
- data/lib/karafka/pro/processing/partitioner.rb +2 -10
- data/lib/karafka/pro/processing/periodic_job/consumer.rb +2 -10
- data/lib/karafka/pro/processing/piping/consumer.rb +2 -10
- data/lib/karafka/pro/processing/schedulers/base.rb +2 -10
- data/lib/karafka/pro/processing/schedulers/default.rb +2 -10
- data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_lrj_mom.rb +3 -11
- data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_lrj_mom_vp.rb +3 -11
- data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_mom.rb +2 -10
- data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_mom_vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/aj/dlq_lrj_mom.rb +3 -11
- data/lib/karafka/pro/processing/strategies/aj/dlq_lrj_mom_vp.rb +3 -11
- data/lib/karafka/pro/processing/strategies/aj/dlq_mom.rb +2 -10
- data/lib/karafka/pro/processing/strategies/aj/dlq_mom_vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/aj/ftr_lrj_mom.rb +2 -10
- data/lib/karafka/pro/processing/strategies/aj/ftr_lrj_mom_vp.rb +3 -11
- data/lib/karafka/pro/processing/strategies/aj/ftr_mom.rb +2 -10
- data/lib/karafka/pro/processing/strategies/aj/ftr_mom_vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/aj/lrj_mom.rb +2 -10
- data/lib/karafka/pro/processing/strategies/aj/lrj_mom_vp.rb +5 -13
- data/lib/karafka/pro/processing/strategies/aj/mom.rb +2 -10
- data/lib/karafka/pro/processing/strategies/aj/mom_vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/base.rb +2 -10
- data/lib/karafka/pro/processing/strategies/default.rb +135 -77
- data/lib/karafka/pro/processing/strategies/dlq/default.rb +6 -14
- data/lib/karafka/pro/processing/strategies/dlq/ftr.rb +2 -10
- data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj.rb +3 -11
- data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj_mom.rb +3 -11
- data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj_mom_vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj_vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/dlq/ftr_mom.rb +3 -11
- data/lib/karafka/pro/processing/strategies/dlq/ftr_mom_vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/dlq/ftr_vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/dlq/lrj.rb +3 -11
- data/lib/karafka/pro/processing/strategies/dlq/lrj_mom.rb +3 -11
- data/lib/karafka/pro/processing/strategies/dlq/lrj_mom_vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/dlq/lrj_vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/dlq/mom.rb +3 -11
- data/lib/karafka/pro/processing/strategies/dlq/mom_vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/dlq/vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/ftr/default.rb +4 -12
- data/lib/karafka/pro/processing/strategies/ftr/vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/lrj/default.rb +5 -13
- data/lib/karafka/pro/processing/strategies/lrj/ftr.rb +3 -11
- data/lib/karafka/pro/processing/strategies/lrj/ftr_mom.rb +2 -10
- data/lib/karafka/pro/processing/strategies/lrj/ftr_mom_vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/lrj/ftr_vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/lrj/mom.rb +4 -12
- data/lib/karafka/pro/processing/strategies/lrj/mom_vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/lrj/vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/mom/default.rb +2 -10
- data/lib/karafka/pro/processing/strategies/mom/ftr.rb +2 -10
- data/lib/karafka/pro/processing/strategies/mom/ftr_vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/mom/vp.rb +2 -10
- data/lib/karafka/pro/processing/strategies/vp/default.rb +5 -10
- data/lib/karafka/pro/processing/strategies.rb +2 -10
- data/lib/karafka/pro/processing/strategy_selector.rb +2 -10
- data/lib/karafka/pro/processing/subscription_groups_coordinator.rb +2 -10
- data/lib/karafka/pro/recurring_tasks/consumer.rb +2 -10
- data/lib/karafka/pro/recurring_tasks/contracts/config.rb +2 -10
- data/lib/karafka/pro/recurring_tasks/contracts/task.rb +2 -10
- data/lib/karafka/pro/recurring_tasks/deserializer.rb +2 -10
- data/lib/karafka/pro/recurring_tasks/dispatcher.rb +2 -10
- data/lib/karafka/pro/recurring_tasks/errors.rb +2 -10
- data/lib/karafka/pro/recurring_tasks/executor.rb +2 -10
- data/lib/karafka/pro/recurring_tasks/listener.rb +2 -10
- data/lib/karafka/pro/recurring_tasks/matcher.rb +2 -10
- data/lib/karafka/pro/recurring_tasks/schedule.rb +2 -10
- data/lib/karafka/pro/recurring_tasks/serializer.rb +2 -10
- data/lib/karafka/pro/recurring_tasks/setup/config.rb +2 -10
- data/lib/karafka/pro/recurring_tasks/task.rb +2 -10
- data/lib/karafka/pro/recurring_tasks.rb +2 -10
- data/lib/karafka/pro/routing/features/active_job/builder.rb +2 -10
- data/lib/karafka/pro/routing/features/active_job.rb +2 -10
- data/lib/karafka/pro/routing/features/adaptive_iterator/config.rb +2 -10
- data/lib/karafka/pro/routing/features/adaptive_iterator/contracts/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/adaptive_iterator/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/adaptive_iterator.rb +2 -10
- data/lib/karafka/pro/routing/features/base.rb +2 -10
- data/lib/karafka/pro/routing/features/dead_letter_queue/contracts/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/dead_letter_queue/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/dead_letter_queue.rb +2 -10
- data/lib/karafka/pro/routing/features/delaying/config.rb +2 -10
- data/lib/karafka/pro/routing/features/delaying/contracts/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/delaying/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/delaying.rb +2 -10
- data/lib/karafka/pro/routing/features/direct_assignments/config.rb +2 -10
- data/lib/karafka/pro/routing/features/direct_assignments/contracts/consumer_group.rb +2 -10
- data/lib/karafka/pro/routing/features/direct_assignments/contracts/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/direct_assignments/subscription_group.rb +2 -10
- data/lib/karafka/pro/routing/features/direct_assignments/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/direct_assignments.rb +2 -10
- data/lib/karafka/pro/routing/features/expiring/config.rb +2 -10
- data/lib/karafka/pro/routing/features/expiring/contracts/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/expiring/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/expiring.rb +2 -10
- data/lib/karafka/pro/routing/features/filtering/config.rb +2 -10
- data/lib/karafka/pro/routing/features/filtering/contracts/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/filtering/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/filtering.rb +2 -10
- data/lib/karafka/pro/routing/features/inline_insights/config.rb +2 -10
- data/lib/karafka/pro/routing/features/inline_insights/contracts/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/inline_insights/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/inline_insights.rb +2 -10
- data/lib/karafka/pro/routing/features/long_running_job/config.rb +2 -10
- data/lib/karafka/pro/routing/features/long_running_job/contracts/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/long_running_job/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/long_running_job.rb +2 -10
- data/lib/karafka/pro/routing/features/multiplexing/config.rb +2 -10
- data/lib/karafka/pro/routing/features/multiplexing/contracts/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/multiplexing/patches/contracts/consumer_group.rb +2 -10
- data/lib/karafka/pro/routing/features/multiplexing/proxy.rb +2 -10
- data/lib/karafka/pro/routing/features/multiplexing/subscription_group.rb +2 -10
- data/lib/karafka/pro/routing/features/multiplexing/subscription_groups_builder.rb +2 -10
- data/lib/karafka/pro/routing/features/multiplexing.rb +2 -10
- data/lib/karafka/pro/routing/features/non_blocking_job/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/non_blocking_job.rb +2 -10
- data/lib/karafka/pro/routing/features/offset_metadata/config.rb +2 -10
- data/lib/karafka/pro/routing/features/offset_metadata/contracts/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/offset_metadata/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/offset_metadata.rb +2 -10
- data/lib/karafka/pro/routing/features/patterns/builder.rb +2 -10
- data/lib/karafka/pro/routing/features/patterns/config.rb +2 -10
- data/lib/karafka/pro/routing/features/patterns/consumer_group.rb +2 -10
- data/lib/karafka/pro/routing/features/patterns/contracts/consumer_group.rb +2 -10
- data/lib/karafka/pro/routing/features/patterns/contracts/pattern.rb +2 -10
- data/lib/karafka/pro/routing/features/patterns/contracts/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/patterns/detector.rb +2 -10
- data/lib/karafka/pro/routing/features/patterns/pattern.rb +2 -10
- data/lib/karafka/pro/routing/features/patterns/patterns.rb +2 -10
- data/lib/karafka/pro/routing/features/patterns/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/patterns/topics.rb +2 -10
- data/lib/karafka/pro/routing/features/patterns.rb +2 -10
- data/lib/karafka/pro/routing/features/pausing/contracts/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/pausing/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/pausing.rb +2 -10
- data/lib/karafka/pro/routing/features/periodic_job/config.rb +2 -10
- data/lib/karafka/pro/routing/features/periodic_job/contracts/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/periodic_job/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/periodic_job.rb +2 -10
- data/lib/karafka/pro/routing/features/recurring_tasks/builder.rb +2 -10
- data/lib/karafka/pro/routing/features/recurring_tasks/config.rb +2 -10
- data/lib/karafka/pro/routing/features/recurring_tasks/contracts/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/recurring_tasks/proxy.rb +2 -10
- data/lib/karafka/pro/routing/features/recurring_tasks/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/recurring_tasks.rb +2 -10
- data/lib/karafka/pro/routing/features/scheduled_messages/builder.rb +2 -10
- data/lib/karafka/pro/routing/features/scheduled_messages/config.rb +2 -10
- data/lib/karafka/pro/routing/features/scheduled_messages/contracts/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/scheduled_messages/proxy.rb +2 -10
- data/lib/karafka/pro/routing/features/scheduled_messages/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/scheduled_messages.rb +2 -10
- data/lib/karafka/pro/routing/features/swarm/config.rb +2 -10
- data/lib/karafka/pro/routing/features/swarm/contracts/routing.rb +2 -10
- data/lib/karafka/pro/routing/features/swarm/contracts/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/swarm/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/swarm.rb +2 -10
- data/lib/karafka/pro/routing/features/throttling/config.rb +2 -10
- data/lib/karafka/pro/routing/features/throttling/contracts/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/throttling/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/throttling.rb +2 -10
- data/lib/karafka/pro/routing/features/virtual_partitions/config.rb +2 -10
- data/lib/karafka/pro/routing/features/virtual_partitions/contracts/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/virtual_partitions/topic.rb +2 -10
- data/lib/karafka/pro/routing/features/virtual_partitions.rb +2 -10
- data/lib/karafka/pro/scheduled_messages/consumer.rb +2 -10
- data/lib/karafka/pro/scheduled_messages/contracts/config.rb +2 -10
- data/lib/karafka/pro/scheduled_messages/contracts/message.rb +2 -10
- data/lib/karafka/pro/scheduled_messages/daily_buffer.rb +2 -10
- data/lib/karafka/pro/scheduled_messages/day.rb +2 -10
- data/lib/karafka/pro/scheduled_messages/deserializers/headers.rb +2 -10
- data/lib/karafka/pro/scheduled_messages/deserializers/payload.rb +2 -10
- data/lib/karafka/pro/scheduled_messages/dispatcher.rb +2 -10
- data/lib/karafka/pro/scheduled_messages/errors.rb +2 -10
- data/lib/karafka/pro/scheduled_messages/max_epoch.rb +2 -10
- data/lib/karafka/pro/scheduled_messages/proxy.rb +2 -10
- data/lib/karafka/pro/scheduled_messages/schema_validator.rb +2 -10
- data/lib/karafka/pro/scheduled_messages/serializer.rb +2 -10
- data/lib/karafka/pro/scheduled_messages/setup/config.rb +2 -10
- data/lib/karafka/pro/scheduled_messages/state.rb +2 -10
- data/lib/karafka/pro/scheduled_messages/tracker.rb +2 -10
- data/lib/karafka/pro/scheduled_messages.rb +2 -10
- data/lib/karafka/pro/swarm/liveness_listener.rb +2 -10
- data/lib/karafka/processing/executor.rb +7 -0
- data/lib/karafka/processing/jobs/base.rb +13 -0
- data/lib/karafka/processing/jobs/consume.rb +2 -0
- data/lib/karafka/processing/jobs/eofed.rb +2 -0
- data/lib/karafka/processing/jobs/idle.rb +2 -0
- data/lib/karafka/processing/jobs/revoked.rb +2 -0
- data/lib/karafka/processing/jobs/shutdown.rb +2 -0
- data/lib/karafka/processing/strategies/aj_dlq_mom.rb +1 -1
- data/lib/karafka/processing/strategies/default.rb +28 -17
- data/lib/karafka/processing/strategies/dlq.rb +4 -4
- data/lib/karafka/processing/strategies/dlq_mom.rb +2 -2
- data/lib/karafka/processing/worker.rb +21 -18
- data/lib/karafka/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +4 -6
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a26065fae7fe2d8f878b56e497d3551f3f0277b27ed3356b59fd478f017b4144
|
4
|
+
data.tar.gz: 356d0e078a32f0b22dc7d06d0f0e896d17b55e7a52866acf92933aeb6a611548
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1043bb3ff799cc5294de4936552f4dcc3a78f9aabca275fd35259c87dfdc257cc63a778722d833c8a1f3e9449084e6266e6cd507d396cd92457b8e6078ced631
|
7
|
+
data.tar.gz: 57fe56b280f460be5f3fe2a734587d75ad08e25ae96363da68d5791fe62b6427402de400e6cae2e38660bbcefdb314be45d0299d15c50131a1ebe15f44c23c96
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/.github/workflows/ci.yml
CHANGED
@@ -27,7 +27,7 @@ jobs:
|
|
27
27
|
- name: Set up Ruby
|
28
28
|
uses: ruby/setup-ruby@v1
|
29
29
|
with:
|
30
|
-
ruby-version: 3.
|
30
|
+
ruby-version: 3.4
|
31
31
|
bundler-cache: true
|
32
32
|
|
33
33
|
- name: Install Diffend plugin
|
@@ -73,12 +73,12 @@ jobs:
|
|
73
73
|
fail-fast: false
|
74
74
|
matrix:
|
75
75
|
ruby:
|
76
|
-
- '3.4
|
76
|
+
- '3.4'
|
77
77
|
- '3.3'
|
78
78
|
- '3.2'
|
79
79
|
- '3.1'
|
80
80
|
include:
|
81
|
-
- ruby: '3.
|
81
|
+
- ruby: '3.4'
|
82
82
|
coverage: 'true'
|
83
83
|
steps:
|
84
84
|
- uses: actions/checkout@v4
|
@@ -120,7 +120,7 @@ jobs:
|
|
120
120
|
fail-fast: false
|
121
121
|
matrix:
|
122
122
|
ruby:
|
123
|
-
- '3.4
|
123
|
+
- '3.4'
|
124
124
|
- '3.3'
|
125
125
|
- '3.2'
|
126
126
|
- '3.1'
|
@@ -178,7 +178,7 @@ jobs:
|
|
178
178
|
fail-fast: false
|
179
179
|
matrix:
|
180
180
|
ruby:
|
181
|
-
- '3.4
|
181
|
+
- '3.4'
|
182
182
|
- '3.3'
|
183
183
|
- '3.2'
|
184
184
|
- '3.1'
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.4.1
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
# Karafka Framework Changelog
|
2
2
|
|
3
|
+
## 2.4.17 (2025-01-15)
|
4
|
+
- [Enhancement] Clean message key and headers when cleaning messages via the cleaner API (Pro).
|
5
|
+
- [Enhancement] Allow for setting `metadata: false` in the cleaner API for granular cleaning control (Pro)
|
6
|
+
- [Enhancement] Instrument successful transaction via `consumer.consuming.transaction` event (Pro).
|
7
|
+
|
8
|
+
## 2.4.16 (2024-12-27)
|
9
|
+
- [Enhancement] Improve post-rebalance revocation messages filtering.
|
10
|
+
- [Enhancement] Introduce `Consumer#wrap` for connection pooling management and other wrapped operations.
|
11
|
+
- [Enhancement] Guard transactional operations from marking beyond assignment ownership under some extreme edge-cases.
|
12
|
+
- [Enhancement] Improve VPs work with transactional producers.
|
13
|
+
- [Enhancement] Prevent non-transactional operations leakage into transactional managed offset management consumers.
|
14
|
+
- [Fix] Prevent transactions from being marked with a non-transactional default producer when automatic offset management and other advanced features are on.
|
15
|
+
- [Fix] Fix `kafka_format` `KeyError` that occurs when a non-hash is assigned to the kafka scope of the settings.
|
16
|
+
- [Fix] Non cooperative-sticky transactional offset management can refetch reclaimed partitions.
|
17
|
+
|
3
18
|
## 2.4.15 (2024-12-04)
|
4
19
|
- [Fix] Assignment tracker current state fetch during a rebalance loop can cause an error on multi CG setup.
|
5
20
|
- [Fix] Prevent double post-transaction offset dispatch to Kafka.
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
karafka (2.4.
|
4
|
+
karafka (2.4.17)
|
5
5
|
base64 (~> 0.2)
|
6
6
|
karafka-core (>= 2.4.4, < 2.5.0)
|
7
7
|
karafka-rdkafka (>= 0.17.2)
|
@@ -11,10 +11,10 @@ PATH
|
|
11
11
|
GEM
|
12
12
|
remote: https://rubygems.org/
|
13
13
|
specs:
|
14
|
-
activejob (8.0.
|
15
|
-
activesupport (= 8.0.
|
14
|
+
activejob (8.0.1)
|
15
|
+
activesupport (= 8.0.1)
|
16
16
|
globalid (>= 0.3.6)
|
17
|
-
activesupport (8.0.
|
17
|
+
activesupport (8.0.1)
|
18
18
|
base64
|
19
19
|
benchmark (>= 0.3)
|
20
20
|
bigdecimal
|
@@ -49,9 +49,10 @@ GEM
|
|
49
49
|
activesupport (>= 6.1)
|
50
50
|
i18n (1.14.6)
|
51
51
|
concurrent-ruby (~> 1.0)
|
52
|
-
karafka-core (2.4.
|
53
|
-
karafka-rdkafka (>= 0.17.6, < 0.
|
54
|
-
|
52
|
+
karafka-core (2.4.8)
|
53
|
+
karafka-rdkafka (>= 0.17.6, < 0.19.0)
|
54
|
+
logger (>= 1.6.0)
|
55
|
+
karafka-rdkafka (0.18.1)
|
55
56
|
ffi (~> 1.15)
|
56
57
|
mini_portile2 (~> 2.6)
|
57
58
|
rake (> 12)
|
@@ -64,9 +65,9 @@ GEM
|
|
64
65
|
karafka-core (>= 2.4.0, < 2.5.0)
|
65
66
|
roda (~> 3.68, >= 3.69)
|
66
67
|
tilt (~> 2.0)
|
67
|
-
logger (1.6.
|
68
|
+
logger (1.6.3)
|
68
69
|
mini_portile2 (2.8.8)
|
69
|
-
minitest (5.25.
|
70
|
+
minitest (5.25.4)
|
70
71
|
ostruct (0.6.1)
|
71
72
|
raabro (1.4.0)
|
72
73
|
rack (3.1.8)
|
@@ -86,22 +87,23 @@ GEM
|
|
86
87
|
diff-lcs (>= 1.2.0, < 2.0)
|
87
88
|
rspec-support (~> 3.13.0)
|
88
89
|
rspec-support (3.13.1)
|
89
|
-
securerandom (0.3.
|
90
|
+
securerandom (0.3.2)
|
90
91
|
simplecov (0.22.0)
|
91
92
|
docile (~> 1.1)
|
92
93
|
simplecov-html (~> 0.11)
|
93
94
|
simplecov_json_formatter (~> 0.1)
|
94
95
|
simplecov-html (0.12.3)
|
95
96
|
simplecov_json_formatter (0.1.4)
|
97
|
+
stringio (3.1.2)
|
96
98
|
tilt (2.4.0)
|
97
99
|
tzinfo (2.0.6)
|
98
100
|
concurrent-ruby (~> 1.0)
|
99
|
-
uri (1.0.
|
100
|
-
waterdrop (2.8.
|
101
|
+
uri (1.0.2)
|
102
|
+
waterdrop (2.8.1)
|
101
103
|
karafka-core (>= 2.4.3, < 3.0.0)
|
102
104
|
karafka-rdkafka (>= 0.17.5)
|
103
105
|
zeitwerk (~> 2.3)
|
104
|
-
zeitwerk (2.
|
106
|
+
zeitwerk (2.7.1)
|
105
107
|
|
106
108
|
PLATFORMS
|
107
109
|
ruby
|
@@ -118,6 +120,7 @@ DEPENDENCIES
|
|
118
120
|
ostruct
|
119
121
|
rspec
|
120
122
|
simplecov
|
123
|
+
stringio
|
121
124
|
|
122
125
|
BUNDLED WITH
|
123
|
-
2.
|
126
|
+
2.6.2
|
data/LICENSE
CHANGED
@@ -6,8 +6,13 @@ for license text.
|
|
6
6
|
|
7
7
|
Karafka has also commercial-friendly license, commercial support and commercial components.
|
8
8
|
|
9
|
-
All of the commercial components are present in the
|
10
|
-
|
9
|
+
All of the commercial components are present in the:
|
10
|
+
|
11
|
+
- `lib/karafka/pro`
|
12
|
+
- `spec/lib/karafka/pro`
|
13
|
+
- `spec/integrations/pro`
|
14
|
+
|
15
|
+
directories of this repository and their usage requires commercial license agreement.
|
11
16
|
|
12
17
|
By sending a pull request to the pro components, you are agreeing to transfer the copyright of your
|
13
18
|
code to Maciej Mensfeld.
|
data/config/locales/errors.yml
CHANGED
@@ -95,6 +95,7 @@ en:
|
|
95
95
|
|
96
96
|
topic:
|
97
97
|
kafka: needs to be a hash with kafka scope settings details
|
98
|
+
kafka_format: needs to be a filled hash
|
98
99
|
missing: needs to be present
|
99
100
|
max_messages_format: 'needs to be an integer bigger than 0'
|
100
101
|
max_wait_time_format: 'needs to be an integer bigger than 0'
|
data/docker-compose.yml
CHANGED
@@ -6,10 +6,13 @@ module Karafka
|
|
6
6
|
class BaseConsumer
|
7
7
|
# Allow for consumer instance tagging for instrumentation
|
8
8
|
include ::Karafka::Core::Taggable
|
9
|
+
include Helpers::ConfigImporter.new(
|
10
|
+
monitor: %i[monitor]
|
11
|
+
)
|
9
12
|
|
10
13
|
extend Forwardable
|
11
14
|
|
12
|
-
def_delegators :@coordinator, :topic, :partition, :eofed
|
15
|
+
def_delegators :@coordinator, :topic, :partition, :eofed?, :seek_offset, :seek_offset=
|
13
16
|
|
14
17
|
def_delegators :producer, :produce_async, :produce_sync, :produce_many_async,
|
15
18
|
:produce_many_sync
|
@@ -39,7 +42,7 @@ module Karafka
|
|
39
42
|
def on_initialized
|
40
43
|
handle_initialized
|
41
44
|
rescue StandardError => e
|
42
|
-
|
45
|
+
monitor.instrument(
|
43
46
|
'error.occurred',
|
44
47
|
error: e,
|
45
48
|
caller: self,
|
@@ -73,6 +76,23 @@ module Karafka
|
|
73
76
|
handle_before_consume
|
74
77
|
end
|
75
78
|
|
79
|
+
# Executes the default wrapping flow
|
80
|
+
#
|
81
|
+
# @private
|
82
|
+
#
|
83
|
+
# @param action [Symbol]
|
84
|
+
# @param block [Proc]
|
85
|
+
def on_wrap(action, &block)
|
86
|
+
handle_wrap(action, &block)
|
87
|
+
rescue StandardError => e
|
88
|
+
monitor.instrument(
|
89
|
+
'error.occurred',
|
90
|
+
error: e,
|
91
|
+
caller: self,
|
92
|
+
type: 'consumer.wrap.error'
|
93
|
+
)
|
94
|
+
end
|
95
|
+
|
76
96
|
# Executes the default consumer flow.
|
77
97
|
#
|
78
98
|
# @private
|
@@ -85,11 +105,11 @@ module Karafka
|
|
85
105
|
def on_consume
|
86
106
|
handle_consume
|
87
107
|
rescue StandardError => e
|
88
|
-
|
108
|
+
monitor.instrument(
|
89
109
|
'error.occurred',
|
90
110
|
error: e,
|
91
111
|
caller: self,
|
92
|
-
seek_offset:
|
112
|
+
seek_offset: seek_offset,
|
93
113
|
type: 'consumer.consume.error'
|
94
114
|
)
|
95
115
|
end
|
@@ -105,11 +125,11 @@ module Karafka
|
|
105
125
|
def on_after_consume
|
106
126
|
handle_after_consume
|
107
127
|
rescue StandardError => e
|
108
|
-
|
128
|
+
monitor.instrument(
|
109
129
|
'error.occurred',
|
110
130
|
error: e,
|
111
131
|
caller: self,
|
112
|
-
seek_offset:
|
132
|
+
seek_offset: seek_offset,
|
113
133
|
type: 'consumer.after_consume.error'
|
114
134
|
)
|
115
135
|
|
@@ -125,11 +145,11 @@ module Karafka
|
|
125
145
|
def on_eofed
|
126
146
|
handle_eofed
|
127
147
|
rescue StandardError => e
|
128
|
-
|
148
|
+
monitor.instrument(
|
129
149
|
'error.occurred',
|
130
150
|
error: e,
|
131
151
|
caller: self,
|
132
|
-
seek_offset:
|
152
|
+
seek_offset: seek_offset,
|
133
153
|
type: 'consumer.eofed.error'
|
134
154
|
)
|
135
155
|
end
|
@@ -161,7 +181,7 @@ module Karafka
|
|
161
181
|
def on_revoked
|
162
182
|
handle_revoked
|
163
183
|
rescue StandardError => e
|
164
|
-
|
184
|
+
monitor.instrument(
|
165
185
|
'error.occurred',
|
166
186
|
error: e,
|
167
187
|
caller: self,
|
@@ -182,7 +202,7 @@ module Karafka
|
|
182
202
|
def on_shutdown
|
183
203
|
handle_shutdown
|
184
204
|
rescue StandardError => e
|
185
|
-
|
205
|
+
monitor.instrument(
|
186
206
|
'error.occurred',
|
187
207
|
error: e,
|
188
208
|
caller: self,
|
@@ -209,6 +229,40 @@ module Karafka
|
|
209
229
|
raise NotImplementedError, 'Implement this in a subclass'
|
210
230
|
end
|
211
231
|
|
232
|
+
# This method can be redefined to build a wrapping API around user code + karafka flow control
|
233
|
+
# code starting from the user code (operations prior to that are not part of this).
|
234
|
+
# The wrapping relates to a single job flow.
|
235
|
+
#
|
236
|
+
# Karafka framework may require user configured "state" like for example a selected
|
237
|
+
# transactional producer that should be used not only by the user but also by the framework.
|
238
|
+
# By using this API user can checkout a producer and return it to the pool.
|
239
|
+
#
|
240
|
+
# @param _action [Symbol] what action are we wrapping. Useful if we want for example to only
|
241
|
+
# wrap the `:consume` action.
|
242
|
+
# @yield Runs the execution block
|
243
|
+
#
|
244
|
+
# @note User related errors should not leak to this level of execution. This should not be used
|
245
|
+
# for anything consumption related but only for setting up state that that Karafka code
|
246
|
+
# may need outside of user code.
|
247
|
+
#
|
248
|
+
# @example Redefine to use a producer from a pool for consume
|
249
|
+
# def wrap(action)
|
250
|
+
# # Do not checkout producer for any other actions
|
251
|
+
# return yield unless action == :consume
|
252
|
+
#
|
253
|
+
# default_producer = self.producer
|
254
|
+
#
|
255
|
+
# $producers.with do |producer|
|
256
|
+
# self.producer = producer
|
257
|
+
# yield
|
258
|
+
# end
|
259
|
+
#
|
260
|
+
# self.producer = default_producer
|
261
|
+
# end
|
262
|
+
def wrap(_action)
|
263
|
+
yield
|
264
|
+
end
|
265
|
+
|
212
266
|
# Method that will be executed when a given topic partition reaches eof without any new
|
213
267
|
# incoming messages alongside
|
214
268
|
def eofed; end
|
@@ -255,7 +309,7 @@ module Karafka
|
|
255
309
|
# Indicate, that user took a manual action of pausing
|
256
310
|
coordinator.manual_pause if manual_pause
|
257
311
|
|
258
|
-
|
312
|
+
monitor.instrument(
|
259
313
|
'consumer.consuming.pause',
|
260
314
|
caller: self,
|
261
315
|
manual: manual_pause,
|
@@ -291,7 +345,7 @@ module Karafka
|
|
291
345
|
# @note Please note, that if you are seeking to a time offset, getting the offset is blocking
|
292
346
|
def seek(offset, manual_seek = true, reset_offset: false)
|
293
347
|
coordinator.manual_seek if manual_seek
|
294
|
-
|
348
|
+
self.seek_offset = nil if reset_offset
|
295
349
|
|
296
350
|
message = Karafka::Messages::Seek.new(
|
297
351
|
topic.name,
|
@@ -299,7 +353,7 @@ module Karafka
|
|
299
353
|
offset
|
300
354
|
)
|
301
355
|
|
302
|
-
|
356
|
+
monitor.instrument(
|
303
357
|
'consumer.consuming.seek',
|
304
358
|
caller: self,
|
305
359
|
topic: topic.name,
|
@@ -343,16 +397,16 @@ module Karafka
|
|
343
397
|
# Pauses the processing from the last offset to retry on given message
|
344
398
|
# @private
|
345
399
|
def retry_after_pause
|
346
|
-
pause(
|
400
|
+
pause(seek_offset, nil, false)
|
347
401
|
|
348
402
|
# Instrumentation needs to run **after** `#pause` invocation because we rely on the states
|
349
403
|
# set by `#pause`
|
350
|
-
|
404
|
+
monitor.instrument(
|
351
405
|
'consumer.consuming.retry',
|
352
406
|
caller: self,
|
353
407
|
topic: topic.name,
|
354
408
|
partition: partition,
|
355
|
-
offset:
|
409
|
+
offset: seek_offset,
|
356
410
|
timeout: coordinator.pause_tracker.current_timeout,
|
357
411
|
attempt: attempt
|
358
412
|
)
|
@@ -66,7 +66,7 @@ module Karafka
|
|
66
66
|
@subscription_group = subscription_group
|
67
67
|
@buffer = RawMessagesBuffer.new
|
68
68
|
@tick_interval = ::Karafka::App.config.internal.tick_interval
|
69
|
-
@rebalance_manager = RebalanceManager.new(@subscription_group.id)
|
69
|
+
@rebalance_manager = RebalanceManager.new(@subscription_group.id, @buffer)
|
70
70
|
@rebalance_callback = Instrumentation::Callbacks::Rebalance.new(@subscription_group)
|
71
71
|
|
72
72
|
@interval_runner = Helpers::IntervalRunner.new do
|
@@ -141,7 +141,7 @@ module Karafka
|
|
141
141
|
# Since rebalances do not occur often, we can run events polling as well without
|
142
142
|
# any throttling
|
143
143
|
events_poll
|
144
|
-
|
144
|
+
|
145
145
|
break
|
146
146
|
end
|
147
147
|
|
@@ -717,20 +717,6 @@ module Karafka
|
|
717
717
|
consumer
|
718
718
|
end
|
719
719
|
|
720
|
-
# We may have a case where in the middle of data polling, we've lost a partition.
|
721
|
-
# In a case like this we should remove all the pre-buffered messages from list partitions as
|
722
|
-
# we are no longer responsible in a given process for processing those messages and they
|
723
|
-
# should have been picked up by a different process.
|
724
|
-
def remove_revoked_and_duplicated_messages
|
725
|
-
@rebalance_manager.lost_partitions.each do |topic, partitions|
|
726
|
-
partitions.each do |partition|
|
727
|
-
@buffer.delete(topic, partition)
|
728
|
-
end
|
729
|
-
end
|
730
|
-
|
731
|
-
@buffer.uniq!
|
732
|
-
end
|
733
|
-
|
734
720
|
# @return [Rdkafka::Consumer] librdkafka consumer instance
|
735
721
|
def kafka
|
736
722
|
return @kafka if @kafka
|
@@ -2,7 +2,9 @@
|
|
2
2
|
|
3
3
|
module Karafka
|
4
4
|
module Connection
|
5
|
-
# Manager for tracking changes in the partitions assignment after the assignment is done
|
5
|
+
# Manager for tracking changes in the partitions assignment after the assignment is done and
|
6
|
+
# for ensuring, that proper buffer related operations that may be impacted by the rebalance
|
7
|
+
# state are applied.
|
6
8
|
#
|
7
9
|
# We need tracking of those to clean up consumers that will no longer process given partitions
|
8
10
|
# as they were taken away.
|
@@ -30,13 +32,15 @@ module Karafka
|
|
30
32
|
private_constant :EMPTY_ARRAY
|
31
33
|
|
32
34
|
# @param subscription_group_id [String] subscription group id
|
35
|
+
# @param buffer [Karafka::Connection::RawMessagesBuffer]
|
33
36
|
# @return [RebalanceManager]
|
34
|
-
def initialize(subscription_group_id)
|
37
|
+
def initialize(subscription_group_id, buffer)
|
35
38
|
@assigned_partitions = {}
|
36
39
|
@revoked_partitions = {}
|
37
40
|
@changed = false
|
38
41
|
@active = false
|
39
42
|
@subscription_group_id = subscription_group_id
|
43
|
+
@buffer = buffer
|
40
44
|
|
41
45
|
# Connects itself to the instrumentation pipeline so rebalances can be tracked
|
42
46
|
::Karafka.monitor.subscribe(self)
|
@@ -64,17 +68,6 @@ module Karafka
|
|
64
68
|
@active
|
65
69
|
end
|
66
70
|
|
67
|
-
# We consider as lost only partitions that were taken away and not re-assigned back to us
|
68
|
-
def lost_partitions
|
69
|
-
lost_partitions = {}
|
70
|
-
|
71
|
-
revoked_partitions.each do |topic, partitions|
|
72
|
-
lost_partitions[topic] = partitions - assigned_partitions.fetch(topic, EMPTY_ARRAY)
|
73
|
-
end
|
74
|
-
|
75
|
-
lost_partitions
|
76
|
-
end
|
77
|
-
|
78
71
|
# Callback that kicks in inside of rdkafka, when new partitions were assigned.
|
79
72
|
#
|
80
73
|
# @private
|
@@ -99,6 +92,24 @@ module Karafka
|
|
99
92
|
@active = true
|
100
93
|
@revoked_partitions = event[:tpl].to_h.transform_values { |part| part.map(&:partition) }
|
101
94
|
@changed = true
|
95
|
+
|
96
|
+
remove_revoked_and_duplicated_messages
|
97
|
+
end
|
98
|
+
|
99
|
+
private
|
100
|
+
|
101
|
+
# We may have a case where in the middle of data polling, we've lost a partition.
|
102
|
+
# In a case like this we should remove all the pre-buffered messages from list partitions as
|
103
|
+
# we are no longer responsible in a given process for processing those messages and they
|
104
|
+
# should have been picked up by a different process.
|
105
|
+
def remove_revoked_and_duplicated_messages
|
106
|
+
@revoked_partitions.each do |topic, partitions|
|
107
|
+
partitions.each do |partition|
|
108
|
+
@buffer.delete(topic, partition)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
@buffer.uniq!
|
102
113
|
end
|
103
114
|
end
|
104
115
|
end
|
@@ -293,6 +293,9 @@ module Karafka
|
|
293
293
|
when 'consumer.initialized.error'
|
294
294
|
error "Consumer initialized error: #{error}"
|
295
295
|
error details
|
296
|
+
when 'consumer.wrap.error'
|
297
|
+
error "Consumer wrap failed due to an error: #{error}"
|
298
|
+
error details
|
296
299
|
when 'consumer.consume.error'
|
297
300
|
error "Consumer consuming error: #{error}"
|
298
301
|
error details
|
@@ -57,6 +57,7 @@ module Karafka
|
|
57
57
|
consumer.consuming.pause
|
58
58
|
consumer.consuming.retry
|
59
59
|
consumer.consuming.seek
|
60
|
+
consumer.consuming.transaction
|
60
61
|
|
61
62
|
consumer.before_schedule_idle
|
62
63
|
consumer.idle
|
@@ -77,6 +78,9 @@ module Karafka
|
|
77
78
|
consumer.shutting_down
|
78
79
|
consumer.shutdown
|
79
80
|
|
81
|
+
consumer.wrap
|
82
|
+
consumer.wrapped
|
83
|
+
|
80
84
|
dead_letter_queue.dispatched
|
81
85
|
|
82
86
|
filtering.throttled
|
@@ -56,32 +56,7 @@ module Karafka
|
|
56
56
|
consumer = job.executor.topic.consumer
|
57
57
|
topic = job.executor.topic.name
|
58
58
|
|
59
|
-
|
60
|
-
when 'Periodic'
|
61
|
-
'tick'
|
62
|
-
when 'PeriodicNonBlocking'
|
63
|
-
'tick'
|
64
|
-
when 'Shutdown'
|
65
|
-
'shutdown'
|
66
|
-
when 'Revoked'
|
67
|
-
'revoked'
|
68
|
-
when 'RevokedNonBlocking'
|
69
|
-
'revoked'
|
70
|
-
when 'Idle'
|
71
|
-
'idle'
|
72
|
-
when 'Eofed'
|
73
|
-
'eofed'
|
74
|
-
when 'EofedNonBlocking'
|
75
|
-
'eofed'
|
76
|
-
when 'ConsumeNonBlocking'
|
77
|
-
'consume'
|
78
|
-
when 'Consume'
|
79
|
-
'consume'
|
80
|
-
else
|
81
|
-
raise Errors::UnsupportedCaseError, job_type
|
82
|
-
end
|
83
|
-
|
84
|
-
current_span.resource = "#{consumer}##{action}"
|
59
|
+
current_span.resource = "#{consumer}##{job.class.action}"
|
85
60
|
info "[#{job.id}] #{job_type} job for #{consumer} on #{topic} started"
|
86
61
|
|
87
62
|
pop_tags
|
@@ -1,15 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# This
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# All of the commercial components are present in the lib/karafka/pro directory of this
|
7
|
-
# repository and their usage requires commercial license agreement.
|
8
|
-
#
|
9
|
-
# Karafka has also commercial-friendly license, commercial support and commercial components.
|
10
|
-
#
|
11
|
-
# By sending a pull request to the pro components, you are agreeing to transfer the copyright of
|
12
|
-
# your code to Maciej Mensfeld.
|
3
|
+
# This code is part of Karafka Pro, a commercial component not licensed under LGPL.
|
4
|
+
# See LICENSE for details.
|
13
5
|
|
14
6
|
module Karafka
|
15
7
|
module Pro
|
@@ -1,15 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# This
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# All of the commercial components are present in the lib/karafka/pro directory of this
|
7
|
-
# repository and their usage requires commercial license agreement.
|
8
|
-
#
|
9
|
-
# Karafka has also commercial-friendly license, commercial support and commercial components.
|
10
|
-
#
|
11
|
-
# By sending a pull request to the pro components, you are agreeing to transfer the copyright of
|
12
|
-
# your code to Maciej Mensfeld.
|
3
|
+
# This code is part of Karafka Pro, a commercial component not licensed under LGPL.
|
4
|
+
# See LICENSE for details.
|
13
5
|
|
14
6
|
module Karafka
|
15
7
|
module Pro
|
@@ -1,15 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# This
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# All of the commercial components are present in the lib/karafka/pro directory of this
|
7
|
-
# repository and their usage requires commercial license agreement.
|
8
|
-
#
|
9
|
-
# Karafka has also commercial-friendly license, commercial support and commercial components.
|
10
|
-
#
|
11
|
-
# By sending a pull request to the pro components, you are agreeing to transfer the copyright of
|
12
|
-
# your code to Maciej Mensfeld.
|
3
|
+
# This code is part of Karafka Pro, a commercial component not licensed under LGPL.
|
4
|
+
# See LICENSE for details.
|
13
5
|
|
14
6
|
module Karafka
|
15
7
|
module Pro
|
@@ -1,15 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# This
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# All of the commercial components are present in the lib/karafka/pro directory of this
|
7
|
-
# repository and their usage requires commercial license agreement.
|
8
|
-
#
|
9
|
-
# Karafka has also commercial-friendly license, commercial support and commercial components.
|
10
|
-
#
|
11
|
-
# By sending a pull request to the pro components, you are agreeing to transfer the copyright of
|
12
|
-
# your code to Maciej Mensfeld.
|
3
|
+
# This code is part of Karafka Pro, a commercial component not licensed under LGPL.
|
4
|
+
# See LICENSE for details.
|
13
5
|
|
14
6
|
module Karafka
|
15
7
|
module Pro
|
@@ -1,15 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# This
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# All of the commercial components are present in the lib/karafka/pro directory of this
|
7
|
-
# repository and their usage requires commercial license agreement.
|
8
|
-
#
|
9
|
-
# Karafka has also commercial-friendly license, commercial support and commercial components.
|
10
|
-
#
|
11
|
-
# By sending a pull request to the pro components, you are agreeing to transfer the copyright of
|
12
|
-
# your code to Maciej Mensfeld.
|
3
|
+
# This code is part of Karafka Pro, a commercial component not licensed under LGPL.
|
4
|
+
# See LICENSE for details.
|
13
5
|
|
14
6
|
module Karafka
|
15
7
|
module Pro
|