karafka 2.2.14 → 2.3.0.alpha1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/.github/workflows/ci.yml +38 -12
- data/.ruby-version +1 -1
- data/CHANGELOG.md +23 -0
- data/Gemfile.lock +12 -12
- data/README.md +0 -2
- data/SECURITY.md +23 -0
- data/config/locales/errors.yml +7 -1
- data/config/locales/pro_errors.yml +22 -0
- data/docker-compose.yml +1 -1
- data/karafka.gemspec +2 -2
- data/lib/karafka/admin/acl.rb +287 -0
- data/lib/karafka/admin.rb +9 -13
- data/lib/karafka/app.rb +5 -3
- data/lib/karafka/base_consumer.rb +9 -1
- data/lib/karafka/cli/base.rb +1 -1
- data/lib/karafka/connection/client.rb +83 -76
- data/lib/karafka/connection/conductor.rb +28 -0
- data/lib/karafka/connection/listener.rb +159 -42
- data/lib/karafka/connection/listeners_batch.rb +5 -11
- data/lib/karafka/connection/manager.rb +72 -0
- data/lib/karafka/connection/messages_buffer.rb +12 -0
- data/lib/karafka/connection/proxy.rb +17 -0
- data/lib/karafka/connection/status.rb +75 -0
- data/lib/karafka/contracts/config.rb +14 -10
- data/lib/karafka/contracts/consumer_group.rb +9 -1
- data/lib/karafka/contracts/topic.rb +3 -1
- data/lib/karafka/errors.rb +13 -0
- data/lib/karafka/instrumentation/logger_listener.rb +3 -0
- data/lib/karafka/instrumentation/notifications.rb +13 -5
- data/lib/karafka/instrumentation/vendors/appsignal/metrics_listener.rb +31 -28
- data/lib/karafka/instrumentation/vendors/datadog/logger_listener.rb +20 -1
- data/lib/karafka/instrumentation/vendors/datadog/metrics_listener.rb +15 -12
- data/lib/karafka/instrumentation/vendors/kubernetes/liveness_listener.rb +39 -36
- data/lib/karafka/pro/base_consumer.rb +47 -0
- data/lib/karafka/pro/connection/manager.rb +300 -0
- data/lib/karafka/pro/connection/multiplexing/listener.rb +40 -0
- data/lib/karafka/pro/iterator/tpl_builder.rb +1 -1
- data/lib/karafka/pro/iterator.rb +1 -6
- data/lib/karafka/pro/loader.rb +14 -0
- data/lib/karafka/pro/processing/coordinator.rb +2 -1
- data/lib/karafka/pro/processing/executor.rb +37 -0
- data/lib/karafka/pro/processing/expansions_selector.rb +32 -0
- data/lib/karafka/pro/processing/jobs/periodic.rb +41 -0
- data/lib/karafka/pro/processing/jobs/periodic_non_blocking.rb +32 -0
- data/lib/karafka/pro/processing/jobs_builder.rb +14 -3
- data/lib/karafka/pro/processing/offset_metadata/consumer.rb +44 -0
- data/lib/karafka/pro/processing/offset_metadata/fetcher.rb +131 -0
- data/lib/karafka/pro/processing/offset_metadata/listener.rb +46 -0
- data/lib/karafka/pro/processing/schedulers/base.rb +39 -23
- data/lib/karafka/pro/processing/schedulers/default.rb +12 -14
- data/lib/karafka/pro/processing/strategies/default.rb +134 -1
- data/lib/karafka/pro/processing/strategies/dlq/default.rb +35 -0
- data/lib/karafka/pro/processing/strategies/vp/default.rb +59 -25
- data/lib/karafka/pro/processing/virtual_offset_manager.rb +41 -11
- data/lib/karafka/pro/routing/features/long_running_job/topic.rb +2 -0
- data/lib/karafka/pro/routing/features/multiplexing/config.rb +38 -0
- data/lib/karafka/pro/routing/features/multiplexing/contracts/topic.rb +114 -0
- data/lib/karafka/pro/routing/features/multiplexing/patches/contracts/consumer_group.rb +42 -0
- data/lib/karafka/pro/routing/features/multiplexing/proxy.rb +38 -0
- data/lib/karafka/pro/routing/features/multiplexing/subscription_group.rb +42 -0
- data/lib/karafka/pro/routing/features/multiplexing/subscription_groups_builder.rb +40 -0
- data/lib/karafka/pro/routing/features/multiplexing.rb +59 -0
- data/lib/karafka/pro/routing/features/non_blocking_job/topic.rb +32 -0
- data/lib/karafka/pro/routing/features/non_blocking_job.rb +37 -0
- data/lib/karafka/pro/routing/features/offset_metadata/config.rb +33 -0
- data/lib/karafka/pro/routing/features/offset_metadata/contracts/topic.rb +42 -0
- data/lib/karafka/pro/routing/features/offset_metadata/topic.rb +65 -0
- data/lib/karafka/pro/routing/features/offset_metadata.rb +40 -0
- data/lib/karafka/pro/routing/features/patterns/contracts/consumer_group.rb +4 -0
- data/lib/karafka/pro/routing/features/patterns/detector.rb +18 -10
- data/lib/karafka/pro/routing/features/periodic_job/config.rb +37 -0
- data/lib/karafka/pro/routing/features/periodic_job/contracts/topic.rb +44 -0
- data/lib/karafka/pro/routing/features/periodic_job/topic.rb +94 -0
- data/lib/karafka/pro/routing/features/periodic_job.rb +27 -0
- data/lib/karafka/pro/routing/features/virtual_partitions/config.rb +1 -0
- data/lib/karafka/pro/routing/features/virtual_partitions/contracts/topic.rb +1 -0
- data/lib/karafka/pro/routing/features/virtual_partitions/topic.rb +7 -2
- data/lib/karafka/process.rb +5 -3
- data/lib/karafka/processing/coordinator.rb +5 -1
- data/lib/karafka/processing/executor.rb +16 -10
- data/lib/karafka/processing/executors_buffer.rb +19 -4
- data/lib/karafka/processing/schedulers/default.rb +3 -2
- data/lib/karafka/processing/strategies/default.rb +6 -0
- data/lib/karafka/processing/strategies/dlq.rb +36 -0
- data/lib/karafka/routing/builder.rb +12 -2
- data/lib/karafka/routing/consumer_group.rb +5 -5
- data/lib/karafka/routing/features/base.rb +44 -8
- data/lib/karafka/routing/features/dead_letter_queue/config.rb +6 -1
- data/lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb +1 -0
- data/lib/karafka/routing/features/dead_letter_queue/topic.rb +9 -2
- data/lib/karafka/routing/subscription_group.rb +2 -2
- data/lib/karafka/routing/subscription_groups_builder.rb +11 -2
- data/lib/karafka/routing/topic.rb +8 -10
- data/lib/karafka/runner.rb +13 -3
- data/lib/karafka/server.rb +5 -9
- data/lib/karafka/setup/config.rb +17 -0
- data/lib/karafka/status.rb +23 -14
- data/lib/karafka/templates/karafka.rb.erb +7 -0
- data/lib/karafka/time_trackers/partition_usage.rb +56 -0
- data/lib/karafka/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +42 -10
- metadata.gz.sig +0 -0
- data/lib/karafka/connection/consumer_group_coordinator.rb +0 -48
data/lib/karafka/setup/config.rb
CHANGED
@@ -184,8 +184,23 @@ module Karafka
|
|
184
184
|
|
185
185
|
# Namespace for internal connection related settings
|
186
186
|
setting :connection do
|
187
|
+
# Manages starting up and stopping Kafka connections
|
188
|
+
setting :manager, default: Connection::Manager.new
|
189
|
+
# Controls frequency of connections management checks
|
190
|
+
setting :conductor, default: Connection::Conductor.new
|
191
|
+
|
187
192
|
# Settings that are altered by our client proxy layer
|
188
193
|
setting :proxy do
|
194
|
+
# Committed offsets for given CG query
|
195
|
+
setting :committed do
|
196
|
+
# timeout for this request. For busy or remote clusters, this should be high enough
|
197
|
+
setting :timeout, default: 5_000
|
198
|
+
# How many times should we try to run this call before raising an error
|
199
|
+
setting :max_attempts, default: 3
|
200
|
+
# How long should we wait before next attempt in case of a failure
|
201
|
+
setting :wait_time, default: 1_000
|
202
|
+
end
|
203
|
+
|
189
204
|
# Watermark offsets request settings
|
190
205
|
setting :query_watermark_offsets do
|
191
206
|
# timeout for this request. For busy or remote clusters, this should be high enough
|
@@ -222,6 +237,8 @@ module Karafka
|
|
222
237
|
setting :strategy_selector, default: Processing::StrategySelector.new
|
223
238
|
# option expansions_selector [Object] processing expansions selector to be used
|
224
239
|
setting :expansions_selector, default: Processing::ExpansionsSelector.new
|
240
|
+
# option [Class] executor class
|
241
|
+
setting :executor_class, default: Processing::Executor
|
225
242
|
end
|
226
243
|
|
227
244
|
# Things related to operating on messages
|
data/lib/karafka/status.rb
CHANGED
@@ -42,25 +42,34 @@ module Karafka
|
|
42
42
|
end
|
43
43
|
|
44
44
|
STATES.each do |state, transition|
|
45
|
-
|
46
|
-
|
47
|
-
|
45
|
+
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
46
|
+
def #{state}?
|
47
|
+
@status == :#{state}
|
48
|
+
end
|
49
|
+
|
50
|
+
def #{transition}
|
51
|
+
MUTEX.synchronize do
|
52
|
+
# Do not allow reverse state transitions (we always go one way) or transition to the same
|
53
|
+
# state as currently
|
54
|
+
return if @status && STATES.keys.index(:#{state}) <= STATES.keys.index(@status)
|
48
55
|
|
49
|
-
|
50
|
-
MUTEX.synchronize do
|
51
|
-
# Do not allow reverse state transitions (we always go one way) or transition to the same
|
52
|
-
# state as currently
|
53
|
-
return if @status && STATES.keys.index(state) <= STATES.keys.index(@status)
|
56
|
+
@status = :#{state}
|
54
57
|
|
55
|
-
|
58
|
+
# Skip on creation (initializing)
|
59
|
+
# We skip as during this state we do not have yet a monitor
|
60
|
+
return if initializing?
|
56
61
|
|
57
|
-
|
58
|
-
|
59
|
-
|
62
|
+
# We do not set conductor in the initializer because this status object is created
|
63
|
+
# before the configuration kicks in
|
64
|
+
# We need to signal conductor on each state change as those may be relevant to
|
65
|
+
# listeners operations
|
66
|
+
@conductor ||= Karafka::App.config.internal.connection.conductor
|
67
|
+
@conductor.signal
|
60
68
|
|
61
|
-
|
69
|
+
Karafka.monitor.instrument("app.#{state}")
|
70
|
+
end
|
62
71
|
end
|
63
|
-
|
72
|
+
RUBY
|
64
73
|
end
|
65
74
|
|
66
75
|
# @return [Boolean] true if we are in any of the status that would indicate we should no longer
|
@@ -68,3 +68,10 @@ class KarafkaApp < Karafka::App
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
end
|
71
|
+
|
72
|
+
# Karafka now features a Web UI!
|
73
|
+
# Visit the setup documentation to get started and enhance your experience.
|
74
|
+
#
|
75
|
+
# https://karafka.io/docs/Web-UI-Getting-Started
|
76
|
+
#
|
77
|
+
# Karafka::Web.enable!
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Karafka
|
4
|
+
module TimeTrackers
|
5
|
+
# Tracker used to keep time reference when we last time dispatched any job related to a given
|
6
|
+
# topic partition.
|
7
|
+
#
|
8
|
+
# We can use it to know when last time a job was scheduled
|
9
|
+
#
|
10
|
+
# @note We do not track revocation as on revocation we clear given topic partition reference
|
11
|
+
# not to have a potential memory leak
|
12
|
+
#
|
13
|
+
# @note We do not track shutdown jobs as shutdown is finishing the process, so no time
|
14
|
+
# sensitive operations remain that would use this
|
15
|
+
#
|
16
|
+
# @note We consider partition as active if we scheduled any job related to it within the tick
|
17
|
+
# interval. This has nothing to do whether a partition is assigned.
|
18
|
+
class PartitionUsage < Base
|
19
|
+
# Creates new partition usage time tracker
|
20
|
+
def initialize
|
21
|
+
super
|
22
|
+
|
23
|
+
@last_usage = Hash.new do |topics_hash, topic_name|
|
24
|
+
topics_hash[topic_name] = Hash.new do |partitions_hash, partition_id|
|
25
|
+
partitions_hash[partition_id] = 0
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# @param topic [String]
|
31
|
+
# @param partition [Integer]
|
32
|
+
# @param interval [Integer] minimum interval
|
33
|
+
# @return [Boolean] was this topic partition active
|
34
|
+
def active?(topic, partition, interval)
|
35
|
+
monotonic_now - @last_usage[topic][partition] < interval
|
36
|
+
end
|
37
|
+
|
38
|
+
# Marks usage of given partition
|
39
|
+
#
|
40
|
+
# @param topic [String]
|
41
|
+
# @param partition [Integer]
|
42
|
+
def track(topic, partition)
|
43
|
+
@last_usage[topic][partition] = monotonic_now
|
44
|
+
end
|
45
|
+
|
46
|
+
# Clears references about given partition. Useful on revocation so we do not store old
|
47
|
+
# unassigned partitions data
|
48
|
+
#
|
49
|
+
# @param topic [String]
|
50
|
+
# @param partition [Integer]
|
51
|
+
def revoke(topic, partition)
|
52
|
+
@last_usage[topic].delete(partition)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/lib/karafka/version.rb
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
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.
|
4
|
+
version: 2.3.0.alpha1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maciej Mensfeld
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
AnG1dJU+yL2BK7vaVytLTstJME5mepSZ46qqIJXMuWob/YPDmVaBF39TDSG9e34s
|
36
36
|
msG3BiCqgOgHAnL23+CN3Rt8MsuRfEtoTKpJVcCfoEoNHOkc
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
38
|
+
date: 2024-01-15 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: karafka-core
|
@@ -43,27 +43,27 @@ dependencies:
|
|
43
43
|
requirements:
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 2.
|
46
|
+
version: 2.3.0.alpha1
|
47
47
|
- - "<"
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: 2.
|
49
|
+
version: 2.4.0
|
50
50
|
type: :runtime
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
54
|
- - ">="
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: 2.
|
56
|
+
version: 2.3.0.alpha1
|
57
57
|
- - "<"
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: 2.
|
59
|
+
version: 2.4.0
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: waterdrop
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
64
64
|
- - ">="
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version: 2.6.
|
66
|
+
version: 2.6.12
|
67
67
|
- - "<"
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: 3.0.0
|
@@ -73,7 +73,7 @@ dependencies:
|
|
73
73
|
requirements:
|
74
74
|
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: 2.6.
|
76
|
+
version: 2.6.12
|
77
77
|
- - "<"
|
78
78
|
- !ruby/object:Gem::Version
|
79
79
|
version: 3.0.0
|
@@ -123,6 +123,7 @@ files:
|
|
123
123
|
- LICENSE-COMM
|
124
124
|
- LICENSE-LGPL
|
125
125
|
- README.md
|
126
|
+
- SECURITY.md
|
126
127
|
- bin/benchmarks
|
127
128
|
- bin/create_token
|
128
129
|
- bin/integrations
|
@@ -151,6 +152,7 @@ files:
|
|
151
152
|
- lib/karafka/active_job/job_extensions.rb
|
152
153
|
- lib/karafka/active_job/job_options_contract.rb
|
153
154
|
- lib/karafka/admin.rb
|
155
|
+
- lib/karafka/admin/acl.rb
|
154
156
|
- lib/karafka/app.rb
|
155
157
|
- lib/karafka/base_consumer.rb
|
156
158
|
- lib/karafka/cli.rb
|
@@ -162,14 +164,16 @@ files:
|
|
162
164
|
- lib/karafka/cli/server.rb
|
163
165
|
- lib/karafka/cli/topics.rb
|
164
166
|
- lib/karafka/connection/client.rb
|
165
|
-
- lib/karafka/connection/
|
167
|
+
- lib/karafka/connection/conductor.rb
|
166
168
|
- lib/karafka/connection/listener.rb
|
167
169
|
- lib/karafka/connection/listeners_batch.rb
|
170
|
+
- lib/karafka/connection/manager.rb
|
168
171
|
- lib/karafka/connection/messages_buffer.rb
|
169
172
|
- lib/karafka/connection/pauses_manager.rb
|
170
173
|
- lib/karafka/connection/proxy.rb
|
171
174
|
- lib/karafka/connection/raw_messages_buffer.rb
|
172
175
|
- lib/karafka/connection/rebalance_manager.rb
|
176
|
+
- lib/karafka/connection/status.rb
|
173
177
|
- lib/karafka/contracts.rb
|
174
178
|
- lib/karafka/contracts/base.rb
|
175
179
|
- lib/karafka/contracts/config.rb
|
@@ -217,10 +221,13 @@ files:
|
|
217
221
|
- lib/karafka/pro/active_job/consumer.rb
|
218
222
|
- lib/karafka/pro/active_job/dispatcher.rb
|
219
223
|
- lib/karafka/pro/active_job/job_options_contract.rb
|
224
|
+
- lib/karafka/pro/base_consumer.rb
|
220
225
|
- lib/karafka/pro/cleaner.rb
|
221
226
|
- lib/karafka/pro/cleaner/errors.rb
|
222
227
|
- lib/karafka/pro/cleaner/messages/message.rb
|
223
228
|
- lib/karafka/pro/cleaner/messages/messages.rb
|
229
|
+
- lib/karafka/pro/connection/manager.rb
|
230
|
+
- lib/karafka/pro/connection/multiplexing/listener.rb
|
224
231
|
- lib/karafka/pro/contracts/base.rb
|
225
232
|
- lib/karafka/pro/contracts/server_cli_options.rb
|
226
233
|
- lib/karafka/pro/encryption.rb
|
@@ -237,6 +244,8 @@ files:
|
|
237
244
|
- lib/karafka/pro/loader.rb
|
238
245
|
- lib/karafka/pro/processing/collapser.rb
|
239
246
|
- lib/karafka/pro/processing/coordinator.rb
|
247
|
+
- lib/karafka/pro/processing/executor.rb
|
248
|
+
- lib/karafka/pro/processing/expansions_selector.rb
|
240
249
|
- lib/karafka/pro/processing/filters/base.rb
|
241
250
|
- lib/karafka/pro/processing/filters/delayer.rb
|
242
251
|
- lib/karafka/pro/processing/filters/expirer.rb
|
@@ -245,9 +254,14 @@ files:
|
|
245
254
|
- lib/karafka/pro/processing/filters/virtual_limiter.rb
|
246
255
|
- lib/karafka/pro/processing/filters_applier.rb
|
247
256
|
- lib/karafka/pro/processing/jobs/consume_non_blocking.rb
|
257
|
+
- lib/karafka/pro/processing/jobs/periodic.rb
|
258
|
+
- lib/karafka/pro/processing/jobs/periodic_non_blocking.rb
|
248
259
|
- lib/karafka/pro/processing/jobs/revoked_non_blocking.rb
|
249
260
|
- lib/karafka/pro/processing/jobs_builder.rb
|
250
261
|
- lib/karafka/pro/processing/jobs_queue.rb
|
262
|
+
- lib/karafka/pro/processing/offset_metadata/consumer.rb
|
263
|
+
- lib/karafka/pro/processing/offset_metadata/fetcher.rb
|
264
|
+
- lib/karafka/pro/processing/offset_metadata/listener.rb
|
251
265
|
- lib/karafka/pro/processing/partitioner.rb
|
252
266
|
- lib/karafka/pro/processing/schedulers/base.rb
|
253
267
|
- lib/karafka/pro/processing/schedulers/default.rb
|
@@ -328,6 +342,19 @@ files:
|
|
328
342
|
- lib/karafka/pro/routing/features/long_running_job/config.rb
|
329
343
|
- lib/karafka/pro/routing/features/long_running_job/contracts/topic.rb
|
330
344
|
- lib/karafka/pro/routing/features/long_running_job/topic.rb
|
345
|
+
- lib/karafka/pro/routing/features/multiplexing.rb
|
346
|
+
- lib/karafka/pro/routing/features/multiplexing/config.rb
|
347
|
+
- lib/karafka/pro/routing/features/multiplexing/contracts/topic.rb
|
348
|
+
- lib/karafka/pro/routing/features/multiplexing/patches/contracts/consumer_group.rb
|
349
|
+
- lib/karafka/pro/routing/features/multiplexing/proxy.rb
|
350
|
+
- lib/karafka/pro/routing/features/multiplexing/subscription_group.rb
|
351
|
+
- lib/karafka/pro/routing/features/multiplexing/subscription_groups_builder.rb
|
352
|
+
- lib/karafka/pro/routing/features/non_blocking_job.rb
|
353
|
+
- lib/karafka/pro/routing/features/non_blocking_job/topic.rb
|
354
|
+
- lib/karafka/pro/routing/features/offset_metadata.rb
|
355
|
+
- lib/karafka/pro/routing/features/offset_metadata/config.rb
|
356
|
+
- lib/karafka/pro/routing/features/offset_metadata/contracts/topic.rb
|
357
|
+
- lib/karafka/pro/routing/features/offset_metadata/topic.rb
|
331
358
|
- lib/karafka/pro/routing/features/patterns.rb
|
332
359
|
- lib/karafka/pro/routing/features/patterns/builder.rb
|
333
360
|
- lib/karafka/pro/routing/features/patterns/config.rb
|
@@ -343,6 +370,10 @@ files:
|
|
343
370
|
- lib/karafka/pro/routing/features/pausing.rb
|
344
371
|
- lib/karafka/pro/routing/features/pausing/contracts/topic.rb
|
345
372
|
- lib/karafka/pro/routing/features/pausing/topic.rb
|
373
|
+
- lib/karafka/pro/routing/features/periodic_job.rb
|
374
|
+
- lib/karafka/pro/routing/features/periodic_job/config.rb
|
375
|
+
- lib/karafka/pro/routing/features/periodic_job/contracts/topic.rb
|
376
|
+
- lib/karafka/pro/routing/features/periodic_job/topic.rb
|
346
377
|
- lib/karafka/pro/routing/features/throttling.rb
|
347
378
|
- lib/karafka/pro/routing/features/throttling/config.rb
|
348
379
|
- lib/karafka/pro/routing/features/throttling/contracts/topic.rb
|
@@ -427,6 +458,7 @@ files:
|
|
427
458
|
- lib/karafka/templates/example_consumer.rb.erb
|
428
459
|
- lib/karafka/templates/karafka.rb.erb
|
429
460
|
- lib/karafka/time_trackers/base.rb
|
461
|
+
- lib/karafka/time_trackers/partition_usage.rb
|
430
462
|
- lib/karafka/time_trackers/pause.rb
|
431
463
|
- lib/karafka/time_trackers/poll.rb
|
432
464
|
- lib/karafka/version.rb
|
@@ -459,7 +491,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
459
491
|
- !ruby/object:Gem::Version
|
460
492
|
version: '0'
|
461
493
|
requirements: []
|
462
|
-
rubygems_version: 3.
|
494
|
+
rubygems_version: 3.5.3
|
463
495
|
signing_key:
|
464
496
|
specification_version: 4
|
465
497
|
summary: Karafka is Ruby and Rails efficient Kafka processing framework.
|
metadata.gz.sig
CHANGED
Binary file
|
@@ -1,48 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Karafka
|
4
|
-
module Connection
|
5
|
-
# This object represents a collective status of execution of group of listeners running inside
|
6
|
-
# of one consumer group but in separate subscription groups.
|
7
|
-
#
|
8
|
-
# There are cases when we do not want to close a given client when others from the same
|
9
|
-
# consumer group are running because it can cause instabilities due to early shutdown of some
|
10
|
-
# of the clients out of same consumer group.
|
11
|
-
#
|
12
|
-
# We also want to make sure, we close one consumer at a time while others can continue polling.
|
13
|
-
#
|
14
|
-
# This prevents a scenario, where a rebalance is not acknowledged and we loose assignment
|
15
|
-
# without having a chance to commit changes.
|
16
|
-
class ConsumerGroupCoordinator
|
17
|
-
# @param group_size [Integer] number of separate subscription groups in a consumer group
|
18
|
-
def initialize(group_size)
|
19
|
-
@shutdown_mutex = Mutex.new
|
20
|
-
@group_size = group_size
|
21
|
-
@finished = Set.new
|
22
|
-
end
|
23
|
-
|
24
|
-
# @return [Boolean] true if all the subscription groups from a given consumer group are
|
25
|
-
# finished
|
26
|
-
def finished?
|
27
|
-
@finished.size == @group_size
|
28
|
-
end
|
29
|
-
|
30
|
-
# @return [Boolean] can we start shutdown on a given listener
|
31
|
-
# @note If true, will also obtain a lock so no-one else will be closing the same time we do
|
32
|
-
def shutdown?
|
33
|
-
finished? && @shutdown_mutex.try_lock
|
34
|
-
end
|
35
|
-
|
36
|
-
# Unlocks the shutdown lock
|
37
|
-
def unlock
|
38
|
-
@shutdown_mutex.unlock if @shutdown_mutex.owned?
|
39
|
-
end
|
40
|
-
|
41
|
-
# Marks given listener as finished
|
42
|
-
# @param listener_id [String]
|
43
|
-
def finish_work(listener_id)
|
44
|
-
@finished << listener_id
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|