karafka 2.0.41 → 2.1.4
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 +2 -2
- data/CHANGELOG.md +36 -1
- data/Gemfile.lock +17 -17
- data/README.md +2 -2
- data/config/locales/errors.yml +10 -0
- data/config/locales/pro_errors.yml +0 -2
- data/docker-compose.yml +2 -2
- data/karafka.gemspec +2 -2
- data/lib/karafka/active_job/consumer.rb +16 -11
- data/lib/karafka/active_job/current_attributes/loading.rb +36 -0
- data/lib/karafka/active_job/current_attributes/persistence.rb +28 -0
- data/lib/karafka/active_job/current_attributes.rb +42 -0
- data/lib/karafka/active_job/dispatcher.rb +8 -2
- data/lib/karafka/base_consumer.rb +1 -1
- data/lib/karafka/connection/client.rb +3 -1
- data/lib/karafka/errors.rb +3 -0
- data/lib/karafka/instrumentation/vendors/kubernetes/liveness_listener.rb +176 -0
- data/lib/karafka/messages/batch_metadata.rb +9 -2
- data/lib/karafka/pro/active_job/consumer.rb +1 -10
- data/lib/karafka/pro/active_job/dispatcher.rb +2 -2
- data/lib/karafka/pro/processing/coordinator.rb +20 -1
- data/lib/karafka/pro/processing/filters/virtual_limiter.rb +52 -0
- data/lib/karafka/pro/processing/filters_applier.rb +4 -0
- data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_mom_vp.rb +1 -1
- data/lib/karafka/pro/processing/strategies/aj/dlq_lrj_mom.rb +3 -1
- data/lib/karafka/pro/processing/strategies/aj/dlq_mom_vp.rb +2 -2
- data/lib/karafka/pro/processing/strategies/aj/lrj_mom_vp.rb +2 -0
- data/lib/karafka/pro/processing/strategies/aj/mom_vp.rb +1 -1
- data/lib/karafka/pro/processing/strategies/dlq/ftr.rb +1 -1
- data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj_mom.rb +3 -6
- data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj_mom_vp.rb +43 -0
- data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj_vp.rb +1 -0
- data/lib/karafka/pro/processing/strategies/dlq/ftr_mom.rb +3 -7
- data/lib/karafka/pro/processing/strategies/dlq/ftr_mom_vp.rb +41 -0
- data/lib/karafka/pro/processing/strategies/dlq/ftr_vp.rb +1 -0
- data/lib/karafka/pro/processing/strategies/dlq/lrj_mom.rb +3 -6
- data/lib/karafka/pro/processing/strategies/dlq/lrj_mom_vp.rb +36 -0
- data/lib/karafka/pro/processing/strategies/dlq/lrj_vp.rb +1 -0
- data/lib/karafka/pro/processing/strategies/dlq/mom.rb +8 -7
- data/lib/karafka/pro/processing/strategies/dlq/mom_vp.rb +37 -0
- data/lib/karafka/pro/processing/strategies/lrj/default.rb +2 -0
- data/lib/karafka/pro/processing/strategies/lrj/ftr_mom_vp.rb +40 -0
- data/lib/karafka/pro/processing/strategies/lrj/mom.rb +2 -0
- data/lib/karafka/pro/processing/strategies/lrj/mom_vp.rb +38 -0
- data/lib/karafka/pro/processing/strategies/mom/ftr_vp.rb +37 -0
- data/lib/karafka/pro/{base_consumer.rb → processing/strategies/mom/vp.rb} +17 -7
- data/lib/karafka/pro/processing/strategies/vp/default.rb +51 -0
- data/lib/karafka/pro/processing/virtual_offset_manager.rb +147 -0
- data/lib/karafka/pro/routing/features/virtual_partitions/contract.rb +0 -17
- data/lib/karafka/processing/strategies/default.rb +2 -0
- data/lib/karafka/processing/strategies/dlq_mom.rb +9 -7
- data/lib/karafka/version.rb +1 -1
- data/lib/karafka.rb +5 -0
- data.tar.gz.sig +0 -0
- metadata +20 -8
- metadata.gz.sig +0 -0
- data/lib/karafka/instrumentation/vendors/datadog/listener.rb +0 -16
@@ -35,18 +35,9 @@ module Karafka
|
|
35
35
|
# double-processing
|
36
36
|
break if Karafka::App.stopping? && !topic.virtual_partitions?
|
37
37
|
|
38
|
-
# Break if we already know, that one of virtual partitions has failed and we will
|
39
|
-
# be restarting processing all together after all VPs are done. This will minimize
|
40
|
-
# number of jobs that will be re-processed
|
41
|
-
break if topic.virtual_partitions? && failing?
|
42
|
-
|
43
38
|
consume_job(message)
|
44
39
|
|
45
|
-
# We
|
46
|
-
# this could create random markings.
|
47
|
-
# The exception here is the collapsed state where we can move one after another
|
48
|
-
next if topic.virtual_partitions? && !collapsed?
|
49
|
-
|
40
|
+
# We can always mark because of the virtual offset management that we have in VPs
|
50
41
|
mark_as_consumed(message)
|
51
42
|
end
|
52
43
|
end
|
@@ -39,7 +39,7 @@ module Karafka
|
|
39
39
|
fetch_option(job, :dispatch_method, DEFAULTS),
|
40
40
|
dispatch_details(job).merge!(
|
41
41
|
topic: job.queue_name,
|
42
|
-
payload: ::ActiveSupport::JSON.encode(job
|
42
|
+
payload: ::ActiveSupport::JSON.encode(serialize_job(job))
|
43
43
|
)
|
44
44
|
)
|
45
45
|
end
|
@@ -54,7 +54,7 @@ module Karafka
|
|
54
54
|
|
55
55
|
dispatches[d_method] << dispatch_details(job).merge!(
|
56
56
|
topic: job.queue_name,
|
57
|
-
payload: ::ActiveSupport::JSON.encode(job
|
57
|
+
payload: ::ActiveSupport::JSON.encode(serialize_job(job))
|
58
58
|
)
|
59
59
|
end
|
60
60
|
|
@@ -17,7 +17,7 @@ module Karafka
|
|
17
17
|
# Pro coordinator that provides extra orchestration methods useful for parallel processing
|
18
18
|
# within the same partition
|
19
19
|
class Coordinator < ::Karafka::Processing::Coordinator
|
20
|
-
attr_reader :filter
|
20
|
+
attr_reader :filter, :virtual_offset_manager
|
21
21
|
|
22
22
|
# @param args [Object] anything the base coordinator accepts
|
23
23
|
def initialize(*args)
|
@@ -27,6 +27,20 @@ module Karafka
|
|
27
27
|
@flow_lock = Mutex.new
|
28
28
|
@collapser = Collapser.new
|
29
29
|
@filter = FiltersApplier.new(self)
|
30
|
+
|
31
|
+
return unless topic.virtual_partitions?
|
32
|
+
|
33
|
+
@virtual_offset_manager = VirtualOffsetManager.new(
|
34
|
+
topic.name,
|
35
|
+
partition
|
36
|
+
)
|
37
|
+
|
38
|
+
# We register our own "internal" filter to support filtering of messages that were marked
|
39
|
+
# as consumed virtually
|
40
|
+
@filter.filters << Filters::VirtualLimiter.new(
|
41
|
+
@virtual_offset_manager,
|
42
|
+
@collapser
|
43
|
+
)
|
30
44
|
end
|
31
45
|
|
32
46
|
# Starts the coordination process
|
@@ -40,6 +54,11 @@ module Karafka
|
|
40
54
|
@filter.apply!(messages)
|
41
55
|
|
42
56
|
@executed.clear
|
57
|
+
|
58
|
+
# We keep the old processed offsets until the collapsing is done and regular processing
|
59
|
+
# with virtualization is restored
|
60
|
+
@virtual_offset_manager.clear if topic.virtual_partitions? && !@collapser.collapsed?
|
61
|
+
|
43
62
|
@last_message = messages.last
|
44
63
|
end
|
45
64
|
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This Karafka component is a Pro component under a commercial license.
|
4
|
+
# This Karafka component is NOT licensed under LGPL.
|
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.
|
13
|
+
|
14
|
+
module Karafka
|
15
|
+
module Pro
|
16
|
+
module Processing
|
17
|
+
module Filters
|
18
|
+
# Removes messages that are already marked as consumed in the virtual offset manager
|
19
|
+
# This should operate only when using virtual partitions.
|
20
|
+
#
|
21
|
+
# This cleaner prevents us from duplicated processing of messages that were virtually
|
22
|
+
# marked as consumed even if we could not mark them as consumed in Kafka. This allows us
|
23
|
+
# to limit reprocessing when errors occur drastically when operating with virtual
|
24
|
+
# partitions
|
25
|
+
#
|
26
|
+
# @note It should be registered only when VPs are used
|
27
|
+
class VirtualLimiter < Base
|
28
|
+
# @param manager [Processing::VirtualOffsetManager]
|
29
|
+
# @param collapser [Processing::Collapser]
|
30
|
+
def initialize(manager, collapser)
|
31
|
+
@manager = manager
|
32
|
+
@collapser = collapser
|
33
|
+
|
34
|
+
super()
|
35
|
+
end
|
36
|
+
|
37
|
+
# Remove messages that we already marked as virtually consumed. Does nothing if not in
|
38
|
+
# the collapsed mode.
|
39
|
+
#
|
40
|
+
# @param messages [Array<Karafka::Messages::Message>]
|
41
|
+
def apply!(messages)
|
42
|
+
return unless @collapser.collapsed?
|
43
|
+
|
44
|
+
marked = @manager.marked
|
45
|
+
|
46
|
+
messages.delete_if { |message| marked.include?(message.offset) }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -21,6 +21,10 @@ module Karafka
|
|
21
21
|
# This means that this is the API we expose as a single filter, allowing us to control
|
22
22
|
# the filtering via many filters easily.
|
23
23
|
class FiltersApplier
|
24
|
+
# @return [Array] registered filters array. Useful if we want to inject internal context
|
25
|
+
# aware filters.
|
26
|
+
attr_reader :filters
|
27
|
+
|
24
28
|
# @param coordinator [Pro::Coordinator] pro coordinator
|
25
29
|
def initialize(coordinator)
|
26
30
|
# Builds filters out of their factories
|
@@ -24,7 +24,9 @@ module Karafka
|
|
24
24
|
# This case is a bit of special. Please see the `AjDlqMom` for explanation on how the
|
25
25
|
# offset management works in this case.
|
26
26
|
module DlqLrjMom
|
27
|
-
include Strategies::
|
27
|
+
include Strategies::Default
|
28
|
+
include Strategies::Dlq::Default
|
29
|
+
include Strategies::Aj::LrjMom
|
28
30
|
|
29
31
|
# Features for this strategy
|
30
32
|
FEATURES = %i[
|
@@ -20,9 +20,9 @@ module Karafka
|
|
20
20
|
# Manual offset management enabled
|
21
21
|
# Virtual Partitions enabled
|
22
22
|
module DlqMomVp
|
23
|
-
include Strategies::Dlq::Default
|
24
|
-
include Strategies::Vp::Default
|
25
23
|
include Strategies::Default
|
24
|
+
include Strategies::Dlq::Vp
|
25
|
+
include Strategies::Vp::Default
|
26
26
|
|
27
27
|
# Features for this strategy
|
28
28
|
FEATURES = %i[
|
@@ -55,14 +55,11 @@ module Karafka
|
|
55
55
|
|
56
56
|
return resume if revoked?
|
57
57
|
|
58
|
-
skippable_message,
|
58
|
+
skippable_message, _marked = find_skippable_message
|
59
59
|
dispatch_to_dlq(skippable_message) if dispatch_to_dlq?
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
else
|
64
|
-
pause(skippable_message.offset + 1, nil, false)
|
65
|
-
end
|
61
|
+
coordinator.seek_offset = skippable_message.offset + 1
|
62
|
+
pause(coordinator.seek_offset, nil, false)
|
66
63
|
end
|
67
64
|
end
|
68
65
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This Karafka component is a Pro component under a commercial license.
|
4
|
+
# This Karafka component is NOT licensed under LGPL.
|
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.
|
13
|
+
|
14
|
+
module Karafka
|
15
|
+
module Pro
|
16
|
+
module Processing
|
17
|
+
module Strategies
|
18
|
+
module Dlq
|
19
|
+
# DLQ enabled
|
20
|
+
# Ftr enabled
|
21
|
+
# LRJ enabled
|
22
|
+
# MoM enabled
|
23
|
+
# VP enabled
|
24
|
+
module FtrLrjMomVp
|
25
|
+
include Strategies::Vp::Default
|
26
|
+
include Strategies::Dlq::Vp
|
27
|
+
# Same as non VP because of the coordinator post-execution lock
|
28
|
+
include Strategies::Dlq::FtrLrjMom
|
29
|
+
|
30
|
+
# Features for this strategy
|
31
|
+
FEATURES = %i[
|
32
|
+
dead_letter_queue
|
33
|
+
filtering
|
34
|
+
long_running_job
|
35
|
+
manual_offset_management
|
36
|
+
virtual_partitions
|
37
|
+
].freeze
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -53,15 +53,11 @@ module Karafka
|
|
53
53
|
# We reset the pause to indicate we will now consider it as "ok".
|
54
54
|
coordinator.pause_tracker.reset
|
55
55
|
|
56
|
-
skippable_message,
|
56
|
+
skippable_message, _marked = find_skippable_message
|
57
57
|
dispatch_to_dlq(skippable_message) if dispatch_to_dlq?
|
58
58
|
|
59
|
-
|
60
|
-
|
61
|
-
pause(coordinator.seek_offset, nil, false)
|
62
|
-
else
|
63
|
-
pause(skippable_message.offset + 1, nil, false)
|
64
|
-
end
|
59
|
+
coordinator.seek_offset = skippable_message.offset + 1
|
60
|
+
pause(coordinator.seek_offset, nil, false)
|
65
61
|
end
|
66
62
|
end
|
67
63
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This Karafka component is a Pro component under a commercial license.
|
4
|
+
# This Karafka component is NOT licensed under LGPL.
|
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.
|
13
|
+
|
14
|
+
module Karafka
|
15
|
+
module Pro
|
16
|
+
module Processing
|
17
|
+
module Strategies
|
18
|
+
module Dlq
|
19
|
+
# - DLQ
|
20
|
+
# - Ftr
|
21
|
+
# - Mom
|
22
|
+
# - VP
|
23
|
+
# We can use the `Strategies::FtrMom` because VPs collapse prior to DLQ
|
24
|
+
module FtrMomVp
|
25
|
+
include Strategies::Mom::Vp
|
26
|
+
include Strategies::Dlq::Vp
|
27
|
+
include Strategies::Dlq::FtrMom
|
28
|
+
|
29
|
+
# Features for this strategy
|
30
|
+
FEATURES = %i[
|
31
|
+
dead_letter_queue
|
32
|
+
filtering
|
33
|
+
manual_offset_management
|
34
|
+
virtual_partitions
|
35
|
+
].freeze
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -47,14 +47,11 @@ module Karafka
|
|
47
47
|
|
48
48
|
return resume if revoked?
|
49
49
|
|
50
|
-
skippable_message,
|
50
|
+
skippable_message, _marked = find_skippable_message
|
51
51
|
dispatch_to_dlq(skippable_message) if dispatch_to_dlq?
|
52
52
|
|
53
|
-
|
54
|
-
|
55
|
-
else
|
56
|
-
pause(skippable_message.offset + 1, nil, false)
|
57
|
-
end
|
53
|
+
coordinator.seek_offset = skippable_message.offset + 1
|
54
|
+
pause(coordinator.seek_offset, nil, false)
|
58
55
|
end
|
59
56
|
end
|
60
57
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This Karafka component is a Pro component under a commercial license.
|
4
|
+
# This Karafka component is NOT licensed under LGPL.
|
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.
|
13
|
+
|
14
|
+
module Karafka
|
15
|
+
module Pro
|
16
|
+
module Processing
|
17
|
+
module Strategies
|
18
|
+
module Dlq
|
19
|
+
# Strategy for supporting DLQ with Mom, LRJ and VP enabled
|
20
|
+
module LrjMomVp
|
21
|
+
# Feature set for this strategy
|
22
|
+
FEATURES = %i[
|
23
|
+
dead_letter_queue
|
24
|
+
long_running_job
|
25
|
+
manual_offset_management
|
26
|
+
virtual_partitions
|
27
|
+
].freeze
|
28
|
+
|
29
|
+
include Strategies::Dlq::Vp
|
30
|
+
include Strategies::Dlq::LrjMom
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -47,15 +47,16 @@ module Karafka
|
|
47
47
|
# We reset the pause to indicate we will now consider it as "ok".
|
48
48
|
coordinator.pause_tracker.reset
|
49
49
|
|
50
|
-
skippable_message,
|
50
|
+
skippable_message, = find_skippable_message
|
51
51
|
dispatch_to_dlq(skippable_message) if dispatch_to_dlq?
|
52
52
|
|
53
|
-
#
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
53
|
+
# Save the next offset we want to go with after moving given message to DLQ
|
54
|
+
# Without this, we would not be able to move forward and we would end up
|
55
|
+
# in an infinite loop trying to un-pause from the message we've already processed
|
56
|
+
# Of course, since it's a MoM a rebalance or kill, will move it back as no
|
57
|
+
# offsets are being committed
|
58
|
+
coordinator.seek_offset = skippable_message.offset + 1
|
59
|
+
pause(coordinator.seek_offset, nil, false)
|
59
60
|
end
|
60
61
|
end
|
61
62
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This Karafka component is a Pro component under a commercial license.
|
4
|
+
# This Karafka component is NOT licensed under LGPL.
|
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.
|
13
|
+
|
14
|
+
module Karafka
|
15
|
+
module Pro
|
16
|
+
module Processing
|
17
|
+
module Strategies
|
18
|
+
module Dlq
|
19
|
+
# Dead-Letter Queue enabled
|
20
|
+
# MoM enabled
|
21
|
+
# Virtual Partitions enabled
|
22
|
+
module MomVp
|
23
|
+
include Strategies::Dlq::Vp
|
24
|
+
include Strategies::Dlq::Mom
|
25
|
+
|
26
|
+
# Features for this strategy
|
27
|
+
FEATURES = %i[
|
28
|
+
dead_letter_queue
|
29
|
+
manual_offset_management
|
30
|
+
virtual_partitions
|
31
|
+
].freeze
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -30,6 +30,8 @@ module Karafka
|
|
30
30
|
|
31
31
|
# We always need to pause prior to doing any jobs for LRJ
|
32
32
|
def handle_before_enqueue
|
33
|
+
super
|
34
|
+
|
33
35
|
# This ensures that when running LRJ with VP, things operate as expected run only
|
34
36
|
# once for all the virtual partitions collectively
|
35
37
|
coordinator.on_enqueued do
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This Karafka component is a Pro component under a commercial license.
|
4
|
+
# This Karafka component is NOT licensed under LGPL.
|
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.
|
13
|
+
|
14
|
+
module Karafka
|
15
|
+
module Pro
|
16
|
+
module Processing
|
17
|
+
module Strategies
|
18
|
+
# Filtering related init strategies
|
19
|
+
module Lrj
|
20
|
+
# Filtering enabled
|
21
|
+
# LRJ enabled
|
22
|
+
# MoM enabled
|
23
|
+
# VPs enabled
|
24
|
+
module FtrMomVp
|
25
|
+
# Filtering + LRJ + Mom + VPs
|
26
|
+
FEATURES = %i[
|
27
|
+
filtering
|
28
|
+
long_running_job
|
29
|
+
manual_offset_management
|
30
|
+
virtual_partitions
|
31
|
+
].freeze
|
32
|
+
|
33
|
+
include Strategies::Lrj::MomVp
|
34
|
+
include Strategies::Lrj::FtrMom
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -30,6 +30,8 @@ module Karafka
|
|
30
30
|
|
31
31
|
# We always need to pause prior to doing any jobs for LRJ
|
32
32
|
def handle_before_enqueue
|
33
|
+
super
|
34
|
+
|
33
35
|
# This ensures that when running LRJ with VP, things operate as expected run only
|
34
36
|
# once for all the virtual partitions collectively
|
35
37
|
coordinator.on_enqueued do
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This Karafka component is a Pro component under a commercial license.
|
4
|
+
# This Karafka component is NOT licensed under LGPL.
|
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.
|
13
|
+
|
14
|
+
module Karafka
|
15
|
+
module Pro
|
16
|
+
module Processing
|
17
|
+
module Strategies
|
18
|
+
# Namespace for all the LRJ starting strategies
|
19
|
+
module Lrj
|
20
|
+
# Long-Running Job enabled
|
21
|
+
# Manual offset management enabled
|
22
|
+
# Virtual Partitions enabled
|
23
|
+
module MomVp
|
24
|
+
include Strategies::Mom::Vp
|
25
|
+
include Strategies::Lrj::Mom
|
26
|
+
|
27
|
+
# Features for this strategy
|
28
|
+
FEATURES = %i[
|
29
|
+
long_running_job
|
30
|
+
manual_offset_management
|
31
|
+
virtual_partitions
|
32
|
+
].freeze
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This Karafka component is a Pro component under a commercial license.
|
4
|
+
# This Karafka component is NOT licensed under LGPL.
|
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.
|
13
|
+
|
14
|
+
module Karafka
|
15
|
+
module Pro
|
16
|
+
module Processing
|
17
|
+
module Strategies
|
18
|
+
module Mom
|
19
|
+
# - Mom enabled
|
20
|
+
# - Ftr enabled
|
21
|
+
# - Vp enabled
|
22
|
+
module FtrVp
|
23
|
+
include Strategies::Mom::Vp
|
24
|
+
include Strategies::Mom::Ftr
|
25
|
+
|
26
|
+
# Features of this strategy
|
27
|
+
FEATURES = %i[
|
28
|
+
filtering
|
29
|
+
manual_offset_management
|
30
|
+
virtual_partitions
|
31
|
+
].freeze
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -13,13 +13,23 @@
|
|
13
13
|
|
14
14
|
module Karafka
|
15
15
|
module Pro
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
16
|
+
module Processing
|
17
|
+
module Strategies
|
18
|
+
module Mom
|
19
|
+
# - Mom enabled
|
20
|
+
# - Vp enabled
|
21
|
+
module Vp
|
22
|
+
include Strategies::Vp::Default
|
23
|
+
include Strategies::Mom::Default
|
24
|
+
|
25
|
+
# Features of this strategy
|
26
|
+
FEATURES = %i[
|
27
|
+
manual_offset_management
|
28
|
+
virtual_partitions
|
29
|
+
].freeze
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
23
33
|
end
|
24
34
|
end
|
25
35
|
end
|