karafka 2.0.15 → 2.0.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/.github/workflows/ci.yml +1 -1
  4. data/.rspec +2 -0
  5. data/CHANGELOG.md +78 -0
  6. data/Gemfile.lock +14 -14
  7. data/LICENSE +1 -1
  8. data/README.md +2 -1
  9. data/bin/integrations +3 -2
  10. data/bin/rspecs +4 -0
  11. data/config/errors.yml +10 -4
  12. data/lib/active_job/karafka.rb +0 -6
  13. data/lib/karafka/active_job/consumer.rb +1 -0
  14. data/lib/karafka/admin.rb +2 -2
  15. data/lib/karafka/base_consumer.rb +31 -21
  16. data/lib/karafka/connection/listener.rb +6 -4
  17. data/lib/karafka/contracts/consumer_group.rb +0 -14
  18. data/lib/karafka/contracts/{consumer_group_topic.rb → topic.rb} +2 -3
  19. data/lib/karafka/errors.rb +6 -4
  20. data/lib/karafka/instrumentation/logger_listener.rb +25 -11
  21. data/lib/karafka/instrumentation/notifications.rb +2 -0
  22. data/lib/karafka/instrumentation/vendors/datadog/dashboard.json +1 -1
  23. data/lib/karafka/instrumentation/vendors/datadog/listener.rb +37 -32
  24. data/lib/karafka/instrumentation/vendors/datadog/logger_listener.rb +153 -0
  25. data/lib/karafka/pro/active_job/consumer.rb +3 -1
  26. data/lib/karafka/pro/active_job/dispatcher.rb +3 -1
  27. data/lib/karafka/pro/active_job/job_options_contract.rb +3 -1
  28. data/lib/karafka/pro/base_consumer.rb +3 -85
  29. data/lib/karafka/pro/loader.rb +31 -24
  30. data/lib/karafka/pro/performance_tracker.rb +3 -1
  31. data/lib/karafka/pro/processing/coordinator.rb +16 -1
  32. data/lib/karafka/pro/processing/jobs/consume_non_blocking.rb +3 -1
  33. data/lib/karafka/pro/processing/jobs_builder.rb +3 -1
  34. data/lib/karafka/pro/processing/partitioner.rb +3 -1
  35. data/lib/karafka/pro/processing/scheduler.rb +3 -1
  36. data/lib/karafka/pro/processing/strategies/aj_dlq_lrj_mom.rb +40 -0
  37. data/lib/karafka/pro/processing/strategies/aj_dlq_mom.rb +62 -0
  38. data/lib/karafka/pro/processing/strategies/aj_lrj_mom.rb +35 -0
  39. data/lib/karafka/pro/processing/strategies/aj_lrj_mom_vp.rb +69 -0
  40. data/lib/karafka/pro/processing/strategies/aj_mom.rb +33 -0
  41. data/lib/karafka/pro/processing/strategies/aj_mom_vp.rb +58 -0
  42. data/lib/karafka/pro/processing/strategies/base.rb +26 -0
  43. data/lib/karafka/pro/processing/strategies/default.rb +69 -0
  44. data/lib/karafka/pro/processing/strategies/dlq.rb +88 -0
  45. data/lib/karafka/pro/processing/strategies/dlq_lrj.rb +64 -0
  46. data/lib/karafka/pro/processing/strategies/dlq_lrj_mom.rb +60 -0
  47. data/lib/karafka/pro/processing/strategies/dlq_mom.rb +58 -0
  48. data/lib/karafka/pro/processing/strategies/lrj.rb +76 -0
  49. data/lib/karafka/pro/processing/strategies/lrj_mom.rb +68 -0
  50. data/lib/karafka/pro/processing/strategies/lrj_vp.rb +33 -0
  51. data/lib/karafka/pro/processing/strategies/mom.rb +43 -0
  52. data/lib/karafka/pro/processing/strategies/vp.rb +32 -0
  53. data/lib/karafka/pro/processing/strategy_selector.rb +58 -0
  54. data/lib/karafka/pro/{contracts → routing/features}/base.rb +8 -5
  55. data/lib/karafka/pro/routing/features/dead_letter_queue/contract.rb +49 -0
  56. data/lib/karafka/pro/routing/{builder_extensions.rb → features/dead_letter_queue.rb} +9 -12
  57. data/lib/karafka/pro/routing/features/long_running_job/config.rb +28 -0
  58. data/lib/karafka/pro/routing/features/long_running_job/contract.rb +37 -0
  59. data/lib/karafka/pro/routing/features/long_running_job/topic.rb +42 -0
  60. data/lib/karafka/pro/routing/features/long_running_job.rb +28 -0
  61. data/lib/karafka/pro/routing/features/virtual_partitions/config.rb +30 -0
  62. data/lib/karafka/pro/routing/features/virtual_partitions/contract.rb +69 -0
  63. data/lib/karafka/pro/routing/features/virtual_partitions/topic.rb +56 -0
  64. data/lib/karafka/pro/routing/features/virtual_partitions.rb +27 -0
  65. data/lib/karafka/processing/coordinator.rb +1 -1
  66. data/lib/karafka/processing/executor.rb +6 -0
  67. data/lib/karafka/processing/strategies/aj_dlq_mom.rb +44 -0
  68. data/lib/karafka/processing/strategies/aj_mom.rb +21 -0
  69. data/lib/karafka/processing/strategies/base.rb +37 -0
  70. data/lib/karafka/processing/strategies/default.rb +52 -0
  71. data/lib/karafka/processing/strategies/dlq.rb +77 -0
  72. data/lib/karafka/processing/strategies/dlq_mom.rb +42 -0
  73. data/lib/karafka/processing/strategies/mom.rb +29 -0
  74. data/lib/karafka/processing/strategy_selector.rb +30 -0
  75. data/lib/karafka/railtie.rb +9 -8
  76. data/lib/karafka/routing/builder.rb +6 -0
  77. data/lib/karafka/routing/features/active_job/builder.rb +33 -0
  78. data/lib/karafka/routing/features/active_job/config.rb +15 -0
  79. data/lib/karafka/routing/features/active_job/contract.rb +41 -0
  80. data/lib/karafka/routing/features/active_job/topic.rb +33 -0
  81. data/lib/karafka/routing/features/active_job.rb +13 -0
  82. data/lib/karafka/routing/features/base/expander.rb +53 -0
  83. data/lib/karafka/routing/features/base.rb +34 -0
  84. data/lib/karafka/routing/features/dead_letter_queue/config.rb +19 -0
  85. data/lib/karafka/routing/features/dead_letter_queue/contract.rb +40 -0
  86. data/lib/karafka/routing/features/dead_letter_queue/topic.rb +40 -0
  87. data/lib/karafka/routing/features/dead_letter_queue.rb +16 -0
  88. data/lib/karafka/routing/features/manual_offset_management/config.rb +15 -0
  89. data/lib/karafka/routing/features/manual_offset_management/contract.rb +24 -0
  90. data/lib/karafka/routing/features/manual_offset_management/topic.rb +35 -0
  91. data/lib/karafka/routing/features/manual_offset_management.rb +18 -0
  92. data/lib/karafka/routing/topic.rb +2 -10
  93. data/lib/karafka/server.rb +4 -2
  94. data/lib/karafka/setup/attributes_map.rb +5 -0
  95. data/lib/karafka/setup/config.rb +4 -4
  96. data/lib/karafka/time_trackers/pause.rb +21 -12
  97. data/lib/karafka/version.rb +1 -1
  98. data/lib/karafka.rb +7 -11
  99. data.tar.gz.sig +0 -0
  100. metadata +57 -9
  101. metadata.gz.sig +0 -0
  102. data/lib/karafka/active_job/routing/extensions.rb +0 -33
  103. data/lib/karafka/pro/contracts/consumer_group.rb +0 -34
  104. data/lib/karafka/pro/contracts/consumer_group_topic.rb +0 -69
  105. data/lib/karafka/pro/routing/topic_extensions.rb +0 -74
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: karafka
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.15
4
+ version: 2.0.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maciej Mensfeld
@@ -35,7 +35,7 @@ cert_chain:
35
35
  Qf04B9ceLUaC4fPVEz10FyobjaFoY4i32xRto3XnrzeAgfEe4swLq8bQsR3w/EF3
36
36
  MGU0FeSV2Yj7Xc2x/7BzLK8xQn5l7Yy75iPF+KP3vVmDHnNl
37
37
  -----END CERTIFICATE-----
38
- date: 2022-10-20 00:00:00.000000000 Z
38
+ date: 2022-11-09 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: karafka-core
@@ -150,6 +150,7 @@ files:
150
150
  - bin/create_token
151
151
  - bin/integrations
152
152
  - bin/karafka
153
+ - bin/rspecs
153
154
  - bin/scenario
154
155
  - bin/stress_many
155
156
  - bin/stress_one
@@ -165,7 +166,6 @@ files:
165
166
  - lib/karafka/active_job/dispatcher.rb
166
167
  - lib/karafka/active_job/job_extensions.rb
167
168
  - lib/karafka/active_job/job_options_contract.rb
168
- - lib/karafka/active_job/routing/extensions.rb
169
169
  - lib/karafka/admin.rb
170
170
  - lib/karafka/app.rb
171
171
  - lib/karafka/base_consumer.rb
@@ -186,8 +186,8 @@ files:
186
186
  - lib/karafka/contracts/base.rb
187
187
  - lib/karafka/contracts/config.rb
188
188
  - lib/karafka/contracts/consumer_group.rb
189
- - lib/karafka/contracts/consumer_group_topic.rb
190
189
  - lib/karafka/contracts/server_cli_options.rb
190
+ - lib/karafka/contracts/topic.rb
191
191
  - lib/karafka/embedded.rb
192
192
  - lib/karafka/env.rb
193
193
  - lib/karafka/errors.rb
@@ -204,6 +204,7 @@ files:
204
204
  - lib/karafka/instrumentation/proctitle_listener.rb
205
205
  - lib/karafka/instrumentation/vendors/datadog/dashboard.json
206
206
  - lib/karafka/instrumentation/vendors/datadog/listener.rb
207
+ - lib/karafka/instrumentation/vendors/datadog/logger_listener.rb
207
208
  - lib/karafka/licenser.rb
208
209
  - lib/karafka/messages/batch_metadata.rb
209
210
  - lib/karafka/messages/builders/batch_metadata.rb
@@ -220,9 +221,6 @@ files:
220
221
  - lib/karafka/pro/active_job/dispatcher.rb
221
222
  - lib/karafka/pro/active_job/job_options_contract.rb
222
223
  - lib/karafka/pro/base_consumer.rb
223
- - lib/karafka/pro/contracts/base.rb
224
- - lib/karafka/pro/contracts/consumer_group.rb
225
- - lib/karafka/pro/contracts/consumer_group_topic.rb
226
224
  - lib/karafka/pro/loader.rb
227
225
  - lib/karafka/pro/performance_tracker.rb
228
226
  - lib/karafka/pro/processing/coordinator.rb
@@ -230,8 +228,35 @@ files:
230
228
  - lib/karafka/pro/processing/jobs_builder.rb
231
229
  - lib/karafka/pro/processing/partitioner.rb
232
230
  - lib/karafka/pro/processing/scheduler.rb
233
- - lib/karafka/pro/routing/builder_extensions.rb
234
- - lib/karafka/pro/routing/topic_extensions.rb
231
+ - lib/karafka/pro/processing/strategies/aj_dlq_lrj_mom.rb
232
+ - lib/karafka/pro/processing/strategies/aj_dlq_mom.rb
233
+ - lib/karafka/pro/processing/strategies/aj_lrj_mom.rb
234
+ - lib/karafka/pro/processing/strategies/aj_lrj_mom_vp.rb
235
+ - lib/karafka/pro/processing/strategies/aj_mom.rb
236
+ - lib/karafka/pro/processing/strategies/aj_mom_vp.rb
237
+ - lib/karafka/pro/processing/strategies/base.rb
238
+ - lib/karafka/pro/processing/strategies/default.rb
239
+ - lib/karafka/pro/processing/strategies/dlq.rb
240
+ - lib/karafka/pro/processing/strategies/dlq_lrj.rb
241
+ - lib/karafka/pro/processing/strategies/dlq_lrj_mom.rb
242
+ - lib/karafka/pro/processing/strategies/dlq_mom.rb
243
+ - lib/karafka/pro/processing/strategies/lrj.rb
244
+ - lib/karafka/pro/processing/strategies/lrj_mom.rb
245
+ - lib/karafka/pro/processing/strategies/lrj_vp.rb
246
+ - lib/karafka/pro/processing/strategies/mom.rb
247
+ - lib/karafka/pro/processing/strategies/vp.rb
248
+ - lib/karafka/pro/processing/strategy_selector.rb
249
+ - lib/karafka/pro/routing/features/base.rb
250
+ - lib/karafka/pro/routing/features/dead_letter_queue.rb
251
+ - lib/karafka/pro/routing/features/dead_letter_queue/contract.rb
252
+ - lib/karafka/pro/routing/features/long_running_job.rb
253
+ - lib/karafka/pro/routing/features/long_running_job/config.rb
254
+ - lib/karafka/pro/routing/features/long_running_job/contract.rb
255
+ - lib/karafka/pro/routing/features/long_running_job/topic.rb
256
+ - lib/karafka/pro/routing/features/virtual_partitions.rb
257
+ - lib/karafka/pro/routing/features/virtual_partitions/config.rb
258
+ - lib/karafka/pro/routing/features/virtual_partitions/contract.rb
259
+ - lib/karafka/pro/routing/features/virtual_partitions/topic.rb
235
260
  - lib/karafka/process.rb
236
261
  - lib/karafka/processing/coordinator.rb
237
262
  - lib/karafka/processing/coordinators_buffer.rb
@@ -246,12 +271,35 @@ files:
246
271
  - lib/karafka/processing/partitioner.rb
247
272
  - lib/karafka/processing/result.rb
248
273
  - lib/karafka/processing/scheduler.rb
274
+ - lib/karafka/processing/strategies/aj_dlq_mom.rb
275
+ - lib/karafka/processing/strategies/aj_mom.rb
276
+ - lib/karafka/processing/strategies/base.rb
277
+ - lib/karafka/processing/strategies/default.rb
278
+ - lib/karafka/processing/strategies/dlq.rb
279
+ - lib/karafka/processing/strategies/dlq_mom.rb
280
+ - lib/karafka/processing/strategies/mom.rb
281
+ - lib/karafka/processing/strategy_selector.rb
249
282
  - lib/karafka/processing/worker.rb
250
283
  - lib/karafka/processing/workers_batch.rb
251
284
  - lib/karafka/railtie.rb
252
285
  - lib/karafka/routing/builder.rb
253
286
  - lib/karafka/routing/consumer_group.rb
254
287
  - lib/karafka/routing/consumer_mapper.rb
288
+ - lib/karafka/routing/features/active_job.rb
289
+ - lib/karafka/routing/features/active_job/builder.rb
290
+ - lib/karafka/routing/features/active_job/config.rb
291
+ - lib/karafka/routing/features/active_job/contract.rb
292
+ - lib/karafka/routing/features/active_job/topic.rb
293
+ - lib/karafka/routing/features/base.rb
294
+ - lib/karafka/routing/features/base/expander.rb
295
+ - lib/karafka/routing/features/dead_letter_queue.rb
296
+ - lib/karafka/routing/features/dead_letter_queue/config.rb
297
+ - lib/karafka/routing/features/dead_letter_queue/contract.rb
298
+ - lib/karafka/routing/features/dead_letter_queue/topic.rb
299
+ - lib/karafka/routing/features/manual_offset_management.rb
300
+ - lib/karafka/routing/features/manual_offset_management/config.rb
301
+ - lib/karafka/routing/features/manual_offset_management/contract.rb
302
+ - lib/karafka/routing/features/manual_offset_management/topic.rb
255
303
  - lib/karafka/routing/proxy.rb
256
304
  - lib/karafka/routing/router.rb
257
305
  - lib/karafka/routing/subscription_group.rb
metadata.gz.sig CHANGED
Binary file
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Karafka
4
- # ActiveJob related Karafka stuff
5
- module ActiveJob
6
- # Karafka routing ActiveJob related components
7
- module Routing
8
- # Routing extensions for ActiveJob
9
- module Extensions
10
- # This method simplifies routes definition for ActiveJob topics / queues by auto-injecting
11
- # the consumer class
12
- # @param name [String, Symbol] name of the topic where ActiveJobs jobs should go
13
- # @param block [Proc] block that we can use for some extra configuration
14
- def active_job_topic(name, &block)
15
- topic(name) do
16
- consumer App.config.internal.active_job.consumer_class
17
-
18
- next unless block
19
-
20
- instance_eval(&block)
21
-
22
- target.tags << :active_job
23
-
24
- # This is handled by our custom ActiveJob consumer
25
- # Without this, default behaviour would cause messages to skip upon shutdown as the
26
- # offset would be committed for the last message
27
- manual_offset_management true
28
- end
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # This Karafka component is a Pro component.
4
- # All of the commercial components are present in the lib/karafka/pro directory of this
5
- # repository and their usage requires commercial license agreement.
6
- #
7
- # Karafka has also commercial-friendly license, commercial support and commercial components.
8
- #
9
- # By sending a pull request to the pro components, you are agreeing to transfer the copyright of
10
- # your code to Maciej Mensfeld.
11
-
12
- module Karafka
13
- module Pro
14
- module Contracts
15
- # Contract for validating correct Pro components setup on a consumer group and topic levels
16
- class ConsumerGroup < Base
17
- virtual do |data, errors|
18
- next unless errors.empty?
19
- next unless data.key?(:topics)
20
-
21
- fetched_errors = []
22
-
23
- data.fetch(:topics).each do |topic|
24
- ConsumerGroupTopic.new.call(topic).errors.each do |key, value|
25
- fetched_errors << [[topic, key].flatten, value]
26
- end
27
- end
28
-
29
- fetched_errors
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,69 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # This Karafka component is a Pro component.
4
- # All of the commercial components are present in the lib/karafka/pro directory of this
5
- # repository and their usage requires commercial license agreement.
6
- #
7
- # Karafka has also commercial-friendly license, commercial support and commercial components.
8
- #
9
- # By sending a pull request to the pro components, you are agreeing to transfer the copyright of
10
- # your code to Maciej Mensfeld.
11
-
12
- module Karafka
13
- module Pro
14
- module Contracts
15
- # Contract for validating correct Pro components setup on a topic levels
16
- class ConsumerGroupTopic < Base
17
- configure do |config|
18
- config.error_messages = YAML.safe_load(
19
- File.read(
20
- File.join(Karafka.gem_root, 'config', 'errors.yml')
21
- )
22
- ).fetch('en').fetch('validations').fetch('pro_consumer_group_topic')
23
- end
24
-
25
- nested(:virtual_partitions) do
26
- required(:active) { |val| [true, false].include?(val) }
27
- required(:partitioner) { |val| val.nil? || val.respond_to?(:call) }
28
- required(:max_partitions) { |val| val.is_a?(Integer) && val >= 1 }
29
- end
30
-
31
- virtual do |data, errors|
32
- next unless errors.empty?
33
- next if data[:consumer] < Karafka::Pro::BaseConsumer
34
-
35
- [[%i[consumer], :consumer_format]]
36
- end
37
-
38
- # When virtual partitions are defined, partitioner needs to respond to `#call` and it
39
- # cannot be nil
40
- virtual do |data, errors|
41
- next unless errors.empty?
42
-
43
- virtual_partitions = data[:virtual_partitions]
44
-
45
- next unless virtual_partitions[:active]
46
- next if virtual_partitions[:partitioner].respond_to?(:call)
47
-
48
- [[%i[virtual_partitions partitioner], :respond_to_call]]
49
- end
50
-
51
- # Make sure that manual offset management is not used together with Virtual Partitions
52
- # This would not make any sense as there would be edge cases related to skipping
53
- # messages even if there were errors.
54
- virtual do |data, errors|
55
- next unless errors.empty?
56
-
57
- virtual_partitions = data[:virtual_partitions]
58
- manual_offset_management = data[:manual_offset_management]
59
-
60
- next unless virtual_partitions[:active]
61
- next unless manual_offset_management
62
- next if data[:tags].include?(:active_job)
63
-
64
- [[%i[manual_offset_management], :not_with_virtual_partitions]]
65
- end
66
- end
67
- end
68
- end
69
- end
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # This Karafka component is a Pro component.
4
- # All of the commercial components are present in the lib/karafka/pro directory of this
5
- # repository and their usage requires commercial license agreement.
6
- #
7
- # Karafka has also commercial-friendly license, commercial support and commercial components.
8
- #
9
- # By sending a pull request to the pro components, you are agreeing to transfer the copyright of
10
- # your code to Maciej Mensfeld.
11
-
12
- module Karafka
13
- module Pro
14
- # Pro routing components
15
- module Routing
16
- # Routing extensions that allow to configure some extra PRO routing options
17
- module TopicExtensions
18
- # Internal representation of the virtual partitions settings and configuration
19
- # This allows us to abstract away things in a nice manner
20
- #
21
- # For features with more options than just on/off we use this approach as it simplifies
22
- # the code. We do not use it for all not to create unneeded complexity
23
- VirtualPartitions = Struct.new(
24
- :active,
25
- :partitioner,
26
- :max_partitions,
27
- keyword_init: true
28
- ) { alias_method :active?, :active }
29
-
30
- class << self
31
- # @param base [Class] class we extend
32
- def prepended(base)
33
- base.attr_accessor :long_running_job
34
- end
35
- end
36
-
37
- # @param max_partitions [Integer] max number of virtual partitions that can come out of the
38
- # single distribution flow. When set to more than the Karafka threading, will create
39
- # more work than workers. When less, can ensure we have spare resources to process other
40
- # things in parallel.
41
- # @param partitioner [nil, #call] nil or callable partitioner
42
- # @return [VirtualPartitions] method that allows to set the virtual partitions details
43
- # during the routing configuration and then allows to retrieve it
44
- def virtual_partitions(
45
- max_partitions: Karafka::App.config.concurrency,
46
- partitioner: nil
47
- )
48
- @virtual_partitions ||= VirtualPartitions.new(
49
- active: !partitioner.nil?,
50
- max_partitions: max_partitions,
51
- partitioner: partitioner
52
- )
53
- end
54
-
55
- # @return [Boolean] are virtual partitions enabled for given topic
56
- def virtual_partitions?
57
- virtual_partitions.active?
58
- end
59
-
60
- # @return [Boolean] is a given job on a topic a long-running one
61
- def long_running_job?
62
- @long_running_job || false
63
- end
64
-
65
- # @return [Hash] hash with topic details and the extensions details
66
- def to_h
67
- super.merge(
68
- virtual_partitions: virtual_partitions.to_h
69
- )
70
- end
71
- end
72
- end
73
- end
74
- end