karafka 2.4.18 → 2.5.0

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.
Files changed (159) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +3 -0
  3. data/.github/workflows/ci.yml +59 -15
  4. data/.github/workflows/push.yml +35 -0
  5. data/.github/workflows/verify-action-pins.yml +16 -0
  6. data/.ruby-version +1 -1
  7. data/CHANGELOG.md +75 -0
  8. data/Gemfile +2 -2
  9. data/Gemfile.lock +72 -53
  10. data/LICENSE-COMM +2 -2
  11. data/README.md +1 -1
  12. data/Rakefile +4 -0
  13. data/bin/clean_kafka +43 -0
  14. data/bin/integrations +20 -6
  15. data/bin/rspecs +15 -3
  16. data/bin/verify_kafka_warnings +35 -0
  17. data/bin/verify_topics_naming +27 -0
  18. data/config/locales/errors.yml +5 -1
  19. data/config/locales/pro_errors.yml +13 -2
  20. data/docker-compose.yml +1 -1
  21. data/examples/payloads/avro/.gitkeep +0 -0
  22. data/examples/payloads/json/sample_set_01/enrollment_event.json +579 -0
  23. data/examples/payloads/json/sample_set_01/ingestion_event.json +30 -0
  24. data/examples/payloads/json/sample_set_01/transaction_event.json +17 -0
  25. data/examples/payloads/json/sample_set_01/user_event.json +11 -0
  26. data/karafka.gemspec +3 -8
  27. data/lib/karafka/active_job/current_attributes.rb +1 -1
  28. data/lib/karafka/active_job/job_extensions.rb +4 -1
  29. data/lib/karafka/admin/acl.rb +5 -1
  30. data/lib/karafka/admin/configs.rb +5 -1
  31. data/lib/karafka/admin.rb +89 -42
  32. data/lib/karafka/base_consumer.rb +17 -8
  33. data/lib/karafka/cli/base.rb +8 -2
  34. data/lib/karafka/cli/topics/align.rb +7 -4
  35. data/lib/karafka/cli/topics/base.rb +17 -0
  36. data/lib/karafka/cli/topics/create.rb +9 -7
  37. data/lib/karafka/cli/topics/delete.rb +4 -2
  38. data/lib/karafka/cli/topics/help.rb +39 -0
  39. data/lib/karafka/cli/topics/repartition.rb +4 -2
  40. data/lib/karafka/cli/topics.rb +10 -3
  41. data/lib/karafka/cli.rb +2 -0
  42. data/lib/karafka/connection/client.rb +39 -9
  43. data/lib/karafka/connection/listener.rb +24 -12
  44. data/lib/karafka/connection/messages_buffer.rb +1 -1
  45. data/lib/karafka/connection/proxy.rb +4 -1
  46. data/lib/karafka/constraints.rb +3 -3
  47. data/lib/karafka/contracts/base.rb +3 -2
  48. data/lib/karafka/contracts/config.rb +5 -1
  49. data/lib/karafka/contracts/topic.rb +1 -1
  50. data/lib/karafka/errors.rb +46 -2
  51. data/lib/karafka/helpers/async.rb +3 -1
  52. data/lib/karafka/helpers/interval_runner.rb +8 -0
  53. data/lib/karafka/instrumentation/callbacks/rebalance.rb +5 -1
  54. data/lib/karafka/instrumentation/logger_listener.rb +95 -32
  55. data/lib/karafka/instrumentation/proctitle_listener.rb +5 -1
  56. data/lib/karafka/instrumentation/vendors/datadog/metrics_listener.rb +2 -2
  57. data/lib/karafka/instrumentation/vendors/kubernetes/base_listener.rb +17 -2
  58. data/lib/karafka/instrumentation/vendors/kubernetes/liveness_listener.rb +29 -6
  59. data/lib/karafka/instrumentation/vendors/kubernetes/swarm_liveness_listener.rb +9 -0
  60. data/lib/karafka/messages/builders/batch_metadata.rb +1 -1
  61. data/lib/karafka/pro/cleaner.rb +8 -0
  62. data/lib/karafka/pro/cli/parallel_segments/base.rb +89 -0
  63. data/lib/karafka/pro/cli/parallel_segments/collapse.rb +164 -0
  64. data/lib/karafka/pro/cli/parallel_segments/distribute.rb +164 -0
  65. data/lib/karafka/pro/cli/parallel_segments.rb +60 -0
  66. data/lib/karafka/pro/connection/manager.rb +5 -8
  67. data/lib/karafka/pro/encryption.rb +12 -1
  68. data/lib/karafka/pro/instrumentation/performance_tracker.rb +1 -1
  69. data/lib/karafka/pro/iterator/expander.rb +5 -3
  70. data/lib/karafka/pro/iterator/tpl_builder.rb +23 -0
  71. data/lib/karafka/pro/loader.rb +10 -0
  72. data/lib/karafka/pro/processing/coordinator.rb +4 -1
  73. data/lib/karafka/pro/processing/coordinators/errors_tracker.rb +32 -3
  74. data/lib/karafka/pro/processing/coordinators/filters_applier.rb +11 -0
  75. data/lib/karafka/pro/processing/filters/base.rb +10 -2
  76. data/lib/karafka/pro/processing/filters/expirer.rb +5 -0
  77. data/lib/karafka/pro/processing/filters/inline_insights_delayer.rb +2 -2
  78. data/lib/karafka/pro/processing/filters/virtual_limiter.rb +5 -0
  79. data/lib/karafka/pro/processing/parallel_segments/filters/base.rb +73 -0
  80. data/lib/karafka/pro/processing/parallel_segments/filters/default.rb +85 -0
  81. data/lib/karafka/pro/processing/parallel_segments/filters/mom.rb +66 -0
  82. data/lib/karafka/pro/processing/partitioner.rb +1 -13
  83. data/lib/karafka/pro/processing/piping/consumer.rb +13 -13
  84. data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_lrj_mom.rb +1 -1
  85. data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_lrj_mom_vp.rb +1 -1
  86. data/lib/karafka/pro/processing/strategies/aj/dlq_lrj_mom.rb +1 -1
  87. data/lib/karafka/pro/processing/strategies/aj/dlq_lrj_mom_vp.rb +1 -1
  88. data/lib/karafka/pro/processing/strategies/aj/ftr_lrj_mom_vp.rb +1 -1
  89. data/lib/karafka/pro/processing/strategies/aj/lrj_mom_vp.rb +1 -1
  90. data/lib/karafka/pro/processing/strategies/default.rb +36 -8
  91. data/lib/karafka/pro/processing/strategies/dlq/default.rb +15 -10
  92. data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj.rb +1 -1
  93. data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj_mom.rb +1 -1
  94. data/lib/karafka/pro/processing/strategies/dlq/lrj.rb +3 -1
  95. data/lib/karafka/pro/processing/strategies/dlq/lrj_mom.rb +1 -1
  96. data/lib/karafka/pro/processing/strategies/ftr/default.rb +1 -1
  97. data/lib/karafka/pro/processing/strategies/lrj/default.rb +4 -1
  98. data/lib/karafka/pro/processing/strategies/lrj/ftr.rb +1 -1
  99. data/lib/karafka/pro/processing/strategies/lrj/ftr_mom.rb +1 -1
  100. data/lib/karafka/pro/processing/strategies/lrj/mom.rb +1 -1
  101. data/lib/karafka/pro/processing/virtual_partitions/distributors/balanced.rb +50 -0
  102. data/lib/karafka/pro/processing/virtual_partitions/distributors/base.rb +29 -0
  103. data/lib/karafka/pro/processing/virtual_partitions/distributors/consistent.rb +27 -0
  104. data/lib/karafka/pro/recurring_tasks/contracts/config.rb +8 -4
  105. data/lib/karafka/pro/recurring_tasks/dispatcher.rb +3 -3
  106. data/lib/karafka/pro/recurring_tasks/setup/config.rb +7 -2
  107. data/lib/karafka/pro/recurring_tasks.rb +21 -2
  108. data/lib/karafka/pro/routing/features/dead_letter_queue/topic.rb +1 -1
  109. data/lib/karafka/pro/routing/features/multiplexing/config.rb +1 -0
  110. data/lib/karafka/pro/routing/features/multiplexing/contracts/topic.rb +17 -0
  111. data/lib/karafka/pro/routing/features/multiplexing/proxy.rb +5 -2
  112. data/lib/karafka/pro/routing/features/multiplexing/subscription_group.rb +8 -1
  113. data/lib/karafka/pro/routing/features/parallel_segments/builder.rb +47 -0
  114. data/lib/karafka/pro/routing/features/parallel_segments/config.rb +27 -0
  115. data/lib/karafka/pro/routing/features/parallel_segments/consumer_group.rb +83 -0
  116. data/lib/karafka/pro/routing/features/parallel_segments/contracts/consumer_group.rb +49 -0
  117. data/lib/karafka/pro/routing/features/parallel_segments/topic.rb +43 -0
  118. data/lib/karafka/pro/routing/features/parallel_segments.rb +24 -0
  119. data/lib/karafka/pro/routing/features/patterns/pattern.rb +1 -1
  120. data/lib/karafka/pro/routing/features/recurring_tasks/builder.rb +2 -2
  121. data/lib/karafka/pro/routing/features/scheduled_messages/builder.rb +10 -6
  122. data/lib/karafka/pro/routing/features/swarm/contracts/routing.rb +3 -2
  123. data/lib/karafka/pro/routing/features/swarm.rb +4 -1
  124. data/lib/karafka/pro/routing/features/virtual_partitions/config.rb +20 -2
  125. data/lib/karafka/pro/routing/features/virtual_partitions/contracts/topic.rb +1 -0
  126. data/lib/karafka/pro/routing/features/virtual_partitions/topic.rb +8 -2
  127. data/lib/karafka/pro/scheduled_messages/consumer.rb +61 -26
  128. data/lib/karafka/pro/scheduled_messages/daily_buffer.rb +9 -6
  129. data/lib/karafka/pro/scheduled_messages/deserializers/headers.rb +7 -1
  130. data/lib/karafka/pro/scheduled_messages/dispatcher.rb +2 -1
  131. data/lib/karafka/pro/scheduled_messages/max_epoch.rb +15 -6
  132. data/lib/karafka/pro/scheduled_messages/proxy.rb +15 -3
  133. data/lib/karafka/pro/scheduled_messages/serializer.rb +2 -4
  134. data/lib/karafka/pro/scheduled_messages/state.rb +20 -23
  135. data/lib/karafka/pro/scheduled_messages/tracker.rb +34 -8
  136. data/lib/karafka/pro/scheduled_messages.rb +17 -1
  137. data/lib/karafka/processing/coordinators_buffer.rb +1 -0
  138. data/lib/karafka/processing/strategies/default.rb +4 -4
  139. data/lib/karafka/routing/builder.rb +12 -3
  140. data/lib/karafka/routing/features/base/expander.rb +8 -2
  141. data/lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb +1 -0
  142. data/lib/karafka/routing/subscription_group.rb +1 -1
  143. data/lib/karafka/runner.rb +7 -1
  144. data/lib/karafka/server.rb +21 -18
  145. data/lib/karafka/setup/attributes_map.rb +2 -0
  146. data/lib/karafka/setup/config.rb +40 -7
  147. data/lib/karafka/setup/defaults_injector.rb +26 -1
  148. data/lib/karafka/status.rb +6 -1
  149. data/lib/karafka/swarm/node.rb +31 -0
  150. data/lib/karafka/swarm/supervisor.rb +9 -2
  151. data/lib/karafka/templates/karafka.rb.erb +14 -1
  152. data/lib/karafka/version.rb +1 -1
  153. data/lib/karafka.rb +17 -9
  154. data/renovate.json +14 -2
  155. metadata +41 -40
  156. checksums.yaml.gz.sig +0 -0
  157. data/certs/cert.pem +0 -26
  158. data.tar.gz.sig +0 -0
  159. metadata.gz.sig +0 -0
@@ -27,6 +27,18 @@ module Karafka
27
27
  # @return [Integer] pid of the node
28
28
  attr_reader :pid
29
29
 
30
+ # When re-creating a producer in the fork, those are not attributes we want to inherit
31
+ # from the parent process because they are updated in the fork. If user wants to take those
32
+ # from the parent process, he should redefine them by overwriting the whole producer.
33
+ SKIPPABLE_NEW_PRODUCER_ATTRIBUTES = %i[
34
+ id
35
+ kafka
36
+ logger
37
+ oauth
38
+ ].freeze
39
+
40
+ private_constant :SKIPPABLE_NEW_PRODUCER_ATTRIBUTES
41
+
30
42
  # @param id [Integer] number of the fork. Used for uniqueness setup for group client ids and
31
43
  # other stuff where we need to know a unique reference of the fork in regards to the rest
32
44
  # of them.
@@ -52,15 +64,32 @@ module Karafka
52
64
  # an attempt to close it when finalized, meaning it would be kept in memory.
53
65
  config.producer.close
54
66
 
67
+ old_producer = config.producer
68
+ old_producer_config = old_producer.config
69
+
55
70
  # Supervisor producer is closed, hence we need a new one here
56
71
  config.producer = ::WaterDrop::Producer.new do |p_config|
57
72
  p_config.kafka = Setup::AttributesMap.producer(kafka.dup)
58
73
  p_config.logger = config.logger
74
+
75
+ old_producer_config.to_h.each do |key, value|
76
+ next if SKIPPABLE_NEW_PRODUCER_ATTRIBUTES.include?(key)
77
+
78
+ p_config.public_send("#{key}=", value)
79
+ end
80
+
81
+ # Namespaced attributes need to be migrated directly on their config node
82
+ old_producer_config.oauth.to_h.each do |key, value|
83
+ p_config.oauth.public_send("#{key}=", value)
84
+ end
59
85
  end
60
86
 
61
87
  @pid = ::Process.pid
62
88
  @reader.close
63
89
 
90
+ # Certain features need to be reconfigured / reinitialized after fork in Pro
91
+ Pro::Loader.post_fork(config, old_producer) if Karafka.pro?
92
+
64
93
  # Indicate we are alive right after start
65
94
  healthy
66
95
 
@@ -69,6 +98,8 @@ module Karafka
69
98
  monitor.instrument('swarm.node.after_fork', caller: self)
70
99
 
71
100
  Karafka::Process.tags.add(:execution_mode, 'mode:swarm')
101
+ Karafka::Process.tags.add(:swarm_nodeid, "node:#{@id}")
102
+
72
103
  Server.execution_mode = :swarm
73
104
  Server.run
74
105
 
@@ -42,7 +42,10 @@ module Karafka
42
42
  # Creates needed number of forks, installs signals and starts supervision
43
43
  def run
44
44
  # Validate the CLI provided options the same way as we do for the regular server
45
- cli_contract.validate!(activity_manager.to_h)
45
+ cli_contract.validate!(
46
+ activity_manager.to_h,
47
+ scope: %w[swarm cli]
48
+ )
46
49
 
47
50
  # Close producer just in case. While it should not be used, we do not want even a
48
51
  # theoretical case since librdkafka is not thread-safe.
@@ -50,6 +53,10 @@ module Karafka
50
53
  # producer (should not be initialized but just in case)
51
54
  Karafka.producer.close
52
55
 
56
+ # Ensure rdkafka stuff is loaded into memory pre-fork. This will ensure, that we save
57
+ # few MB on forking as this will be already in memory.
58
+ Rdkafka::Bindings.rd_kafka_global_init
59
+
53
60
  Karafka::App.warmup
54
61
 
55
62
  manager.start
@@ -150,7 +157,7 @@ module Karafka
150
157
  # Run forceful kill
151
158
  manager.terminate
152
159
  # And wait until linux kills them
153
- # This prevents us from existing forcefully with any dead child process still existing
160
+ # This prevents us from exiting forcefully with any dead child process still existing
154
161
  # Since we have sent the `KILL` signal, it must die, so we can wait until all dead
155
162
  sleep(supervision_sleep) until manager.stopped?
156
163
 
@@ -25,7 +25,20 @@ APP_LOADER.eager_load
25
25
  class KarafkaApp < Karafka::App
26
26
  setup do |config|
27
27
  config.kafka = { 'bootstrap.servers': '127.0.0.1:9092' }
28
- config.client_id = 'example_app'
28
+ config.client_id = 'YOUR_APP_NAME'
29
+
30
+ # IMPORTANT: Customize this group_id with your application name.
31
+ # The group_id should be unique per application to properly track message consumption.
32
+ # Example: config.group_id = 'inventory_service_consumer'
33
+ #
34
+ # Note: Advanced features and custom routing configurations may define their own consumer
35
+ # groups. These should also be uniquely named per application to avoid conflicts.
36
+ # For the advanced features, subscription groups and consumer groups in your routing
37
+ # configuration, follow the same uniqueness principle.
38
+ #
39
+ # For more details on consumer groups and routing configuration, please refer to the
40
+ # Karafka documentation: https://karafka.io/docs
41
+ config.group_id = 'YOUR_APP_NAME_consumer'
29
42
  <% if rails? -%>
30
43
  # Recreate consumers with each batch. This will allow Rails code reload to work in the
31
44
  # development mode. Otherwise Karafka process would not be aware of code changes
@@ -3,5 +3,5 @@
3
3
  # Main module namespace
4
4
  module Karafka
5
5
  # Current Karafka version
6
- VERSION = '2.4.18'
6
+ VERSION = '2.5.0'
7
7
  end
data/lib/karafka.rb CHANGED
@@ -16,6 +16,7 @@
16
16
  singleton
17
17
  digest
18
18
  zeitwerk
19
+ logger
19
20
  ].each(&method(:require))
20
21
 
21
22
  # Karafka framework main namespace
@@ -65,16 +66,23 @@ module Karafka
65
66
  return @root
66
67
  end
67
68
 
68
- # By default we infer the project root from bundler.
69
- # We cannot use the BUNDLE_GEMFILE env directly because it may be altered by things like
70
- # ruby-lsp. Instead we always fallback to the most outer Gemfile. In most of the cases, it
71
- # won't matter but in case of some automatic setup alterations like ruby-lsp, the location
72
- # from which the project starts may not match the original Gemfile.
73
- @root = Pathname.new(
74
- File.dirname(
75
- Bundler.with_unbundled_env { Bundler.default_gemfile }
69
+ if defined?(::Bundler)
70
+ # By default we infer the project root from bundler.
71
+ # We cannot use the BUNDLE_GEMFILE env directly because it may be altered by things like
72
+ # ruby-lsp. Instead we always fallback to the most outer Gemfile. In most of the cases, it
73
+ # won't matter but in case of some automatic setup alterations like ruby-lsp, the location
74
+ # from which the project starts may not match the original Gemfile.
75
+ @root = Pathname.new(
76
+ File.dirname(
77
+ Bundler.with_unbundled_env { Bundler.default_gemfile }
78
+ )
76
79
  )
77
- )
80
+ else
81
+ # Fallback when Bundler is not available: use current directory
82
+ @root = Pathname.new(Dir.pwd)
83
+ end
84
+
85
+ @root
78
86
  end
79
87
 
80
88
  # @return [Pathname] path to Karafka gem root core
data/renovate.json CHANGED
@@ -1,9 +1,21 @@
1
1
  {
2
2
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
3
  "extends": [
4
- "config:base"
4
+ "config:recommended"
5
5
  ],
6
6
  "ignorePaths": [
7
- "spec/integrations"
7
+ "spec/integrations"
8
+ ],
9
+ "github-actions": {
10
+ "enabled": true,
11
+ "pinDigests": true
12
+ },
13
+ "packageRules": [
14
+ {
15
+ "matchManagers": [
16
+ "github-actions"
17
+ ],
18
+ "minimumReleaseAge": "7 days"
19
+ }
8
20
  ]
9
21
  }
metadata CHANGED
@@ -1,40 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: karafka
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.18
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maciej Mensfeld
8
8
  bindir: bin
9
- cert_chain:
10
- - |
11
- -----BEGIN CERTIFICATE-----
12
- MIIEcDCCAtigAwIBAgIBATANBgkqhkiG9w0BAQsFADA/MRAwDgYDVQQDDAdjb250
13
- YWN0MRcwFQYKCZImiZPyLGQBGRYHa2FyYWZrYTESMBAGCgmSJomT8ixkARkWAmlv
14
- MB4XDTI0MDgyMzEwMTkyMFoXDTQ5MDgxNzEwMTkyMFowPzEQMA4GA1UEAwwHY29u
15
- dGFjdDEXMBUGCgmSJomT8ixkARkWB2thcmFma2ExEjAQBgoJkiaJk/IsZAEZFgJp
16
- bzCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAKjLhLjQqUlNayxkXnO+
17
- PsmCDs/KFIzhrsYMfLZRZNaWmzV3ujljMOdDjd4snM2X06C41iVdQPWjpe3j8vVe
18
- ZXEWR/twSbOP6Eeg8WVH2wCOo0x5i7yhVn4UBLH4JpfEMCbemVcWQ9ry9OMg4WpH
19
- Uu4dRwxFV7hzCz3p0QfNLRI4miAxnGWcnlD98IJRjBAksTuR1Llj0vbOrDGsL9ZT
20
- JeXP2gdRLd8SqzAFJEWrbeTBCBU7gfSh3oMg5SVDLjaqf7Kz5wC/8bDZydzanOxB
21
- T6CDXPsCnllmvTNx2ei2T5rGYJOzJeNTmJLLK6hJWUlAvaQSvCwZRvFJ0tVGLEoS
22
- flqSr6uGyyl1eMUsNmsH4BqPEYcAV6P2PKTv2vUR8AP0raDvZ3xL1TKvfRb8xRpo
23
- vPopCGlY5XBWEc6QERHfVLTIVsjnls2/Ujj4h8/TSfqqYnaHKefIMLbuD/tquMjD
24
- iWQsW2qStBV0T+U7FijKxVfrfqZP7GxQmDAc9o1iiyAa3QIDAQABo3cwdTAJBgNV
25
- HRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU3O4dTXmvE7YpAkszGzR9DdL9
26
- sbEwHQYDVR0RBBYwFIESY29udGFjdEBrYXJhZmthLmlvMB0GA1UdEgQWMBSBEmNv
27
- bnRhY3RAa2FyYWZrYS5pbzANBgkqhkiG9w0BAQsFAAOCAYEAVKTfoLXn7mqdSxIR
28
- eqxcR6Huudg1jes81s1+X0uiRTR3hxxKZ3Y82cPsee9zYWyBrN8TA4KA0WILTru7
29
- Ygxvzha0SRPsSiaKLmgOJ+61ebI4+bOORzIJLpD6GxCxu1r7MI4+0r1u1xe0EWi8
30
- agkVo1k4Vi8cKMLm6Gl9b3wG9zQBw6fcgKwmpjKiNnOLP+OytzUANrIUJjoq6oal
31
- TC+f/Uc0TLaRqUaW/bejxzDWWHoM3SU6aoLPuerglzp9zZVzihXwx3jPLUVKDFpF
32
- Rl2lcBDxlpYGueGo0/oNzGJAAy6js8jhtHC9+19PD53vk7wHtFTZ/0ugDQYnwQ+x
33
- oml2fAAuVWpTBCgOVFe6XCQpMKopzoxQ1PjKztW2KYxgJdIBX87SnL3aWuBQmhRd
34
- i9zWxov0mr44TWegTVeypcWGd/0nxu1+QHVNHJrpqlPBRvwQsUm7fwmRInGpcaB8
35
- ap8wNYvryYzrzvzUxIVFBVM5PacgkFqRmolCa8I7tdKQN+R1
36
- -----END CERTIFICATE-----
37
- date: 2025-04-09 00:00:00.000000000 Z
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
38
11
  dependencies:
39
12
  - !ruby/object:Gem::Dependency
40
13
  name: base64
@@ -56,41 +29,41 @@ dependencies:
56
29
  requirements:
57
30
  - - ">="
58
31
  - !ruby/object:Gem::Version
59
- version: 2.4.4
32
+ version: 2.5.2
60
33
  - - "<"
61
34
  - !ruby/object:Gem::Version
62
- version: 2.5.0
35
+ version: 2.6.0
63
36
  type: :runtime
64
37
  prerelease: false
65
38
  version_requirements: !ruby/object:Gem::Requirement
66
39
  requirements:
67
40
  - - ">="
68
41
  - !ruby/object:Gem::Version
69
- version: 2.4.4
42
+ version: 2.5.2
70
43
  - - "<"
71
44
  - !ruby/object:Gem::Version
72
- version: 2.5.0
45
+ version: 2.6.0
73
46
  - !ruby/object:Gem::Dependency
74
47
  name: karafka-rdkafka
75
48
  requirement: !ruby/object:Gem::Requirement
76
49
  requirements:
77
50
  - - ">="
78
51
  - !ruby/object:Gem::Version
79
- version: 0.17.2
52
+ version: 0.19.5
80
53
  type: :runtime
81
54
  prerelease: false
82
55
  version_requirements: !ruby/object:Gem::Requirement
83
56
  requirements:
84
57
  - - ">="
85
58
  - !ruby/object:Gem::Version
86
- version: 0.17.2
59
+ version: 0.19.5
87
60
  - !ruby/object:Gem::Dependency
88
61
  name: waterdrop
89
62
  requirement: !ruby/object:Gem::Requirement
90
63
  requirements:
91
64
  - - ">="
92
65
  - !ruby/object:Gem::Version
93
- version: 2.7.3
66
+ version: 2.8.3
94
67
  - - "<"
95
68
  - !ruby/object:Gem::Version
96
69
  version: 3.0.0
@@ -100,7 +73,7 @@ dependencies:
100
73
  requirements:
101
74
  - - ">="
102
75
  - !ruby/object:Gem::Version
103
- version: 2.7.3
76
+ version: 2.8.3
104
77
  - - "<"
105
78
  - !ruby/object:Gem::Version
106
79
  version: 3.0.0
@@ -133,10 +106,13 @@ files:
133
106
  - ".coditsu/ci.yml"
134
107
  - ".console_irbrc"
135
108
  - ".diffend.yml"
109
+ - ".github/CODEOWNERS"
136
110
  - ".github/FUNDING.yml"
137
111
  - ".github/ISSUE_TEMPLATE/bug_report.md"
138
112
  - ".github/ISSUE_TEMPLATE/feature_request.md"
139
113
  - ".github/workflows/ci.yml"
114
+ - ".github/workflows/push.yml"
115
+ - ".github/workflows/verify-action-pins.yml"
140
116
  - ".gitignore"
141
117
  - ".rspec"
142
118
  - ".ruby-gemset"
@@ -150,8 +126,10 @@ files:
150
126
  - LICENSE-COMM
151
127
  - LICENSE-LGPL
152
128
  - README.md
129
+ - Rakefile
153
130
  - SECURITY.md
154
131
  - bin/benchmarks
132
+ - bin/clean_kafka
155
133
  - bin/create_token
156
134
  - bin/integrations
157
135
  - bin/karafka
@@ -160,13 +138,19 @@ files:
160
138
  - bin/scenario
161
139
  - bin/stress_many
162
140
  - bin/stress_one
141
+ - bin/verify_kafka_warnings
163
142
  - bin/verify_license_integrity
143
+ - bin/verify_topics_naming
164
144
  - bin/wait_for_kafka
165
- - certs/cert.pem
166
145
  - certs/karafka-pro.pem
167
146
  - config/locales/errors.yml
168
147
  - config/locales/pro_errors.yml
169
148
  - docker-compose.yml
149
+ - examples/payloads/avro/.gitkeep
150
+ - examples/payloads/json/sample_set_01/enrollment_event.json
151
+ - examples/payloads/json/sample_set_01/ingestion_event.json
152
+ - examples/payloads/json/sample_set_01/transaction_event.json
153
+ - examples/payloads/json/sample_set_01/user_event.json
170
154
  - karafka.gemspec
171
155
  - lib/active_job/karafka.rb
172
156
  - lib/active_job/queue_adapters/karafka_adapter.rb
@@ -198,6 +182,7 @@ files:
198
182
  - lib/karafka/cli/topics/base.rb
199
183
  - lib/karafka/cli/topics/create.rb
200
184
  - lib/karafka/cli/topics/delete.rb
185
+ - lib/karafka/cli/topics/help.rb
201
186
  - lib/karafka/cli/topics/migrate.rb
202
187
  - lib/karafka/cli/topics/plan.rb
203
188
  - lib/karafka/cli/topics/repartition.rb
@@ -275,6 +260,10 @@ files:
275
260
  - lib/karafka/pro/cleaner/messages/message.rb
276
261
  - lib/karafka/pro/cleaner/messages/messages.rb
277
262
  - lib/karafka/pro/cleaner/messages/metadata.rb
263
+ - lib/karafka/pro/cli/parallel_segments.rb
264
+ - lib/karafka/pro/cli/parallel_segments/base.rb
265
+ - lib/karafka/pro/cli/parallel_segments/collapse.rb
266
+ - lib/karafka/pro/cli/parallel_segments/distribute.rb
278
267
  - lib/karafka/pro/connection/manager.rb
279
268
  - lib/karafka/pro/connection/multiplexing/listener.rb
280
269
  - lib/karafka/pro/contracts/base.rb
@@ -316,6 +305,9 @@ files:
316
305
  - lib/karafka/pro/processing/offset_metadata/consumer.rb
317
306
  - lib/karafka/pro/processing/offset_metadata/fetcher.rb
318
307
  - lib/karafka/pro/processing/offset_metadata/listener.rb
308
+ - lib/karafka/pro/processing/parallel_segments/filters/base.rb
309
+ - lib/karafka/pro/processing/parallel_segments/filters/default.rb
310
+ - lib/karafka/pro/processing/parallel_segments/filters/mom.rb
319
311
  - lib/karafka/pro/processing/partitioner.rb
320
312
  - lib/karafka/pro/processing/periodic_job/consumer.rb
321
313
  - lib/karafka/pro/processing/piping/consumer.rb
@@ -373,6 +365,9 @@ files:
373
365
  - lib/karafka/pro/processing/strategies/vp/default.rb
374
366
  - lib/karafka/pro/processing/strategy_selector.rb
375
367
  - lib/karafka/pro/processing/subscription_groups_coordinator.rb
368
+ - lib/karafka/pro/processing/virtual_partitions/distributors/balanced.rb
369
+ - lib/karafka/pro/processing/virtual_partitions/distributors/base.rb
370
+ - lib/karafka/pro/processing/virtual_partitions/distributors/consistent.rb
376
371
  - lib/karafka/pro/recurring_tasks.rb
377
372
  - lib/karafka/pro/recurring_tasks/consumer.rb
378
373
  - lib/karafka/pro/recurring_tasks/contracts/config.rb
@@ -436,6 +431,12 @@ files:
436
431
  - lib/karafka/pro/routing/features/offset_metadata/config.rb
437
432
  - lib/karafka/pro/routing/features/offset_metadata/contracts/topic.rb
438
433
  - lib/karafka/pro/routing/features/offset_metadata/topic.rb
434
+ - lib/karafka/pro/routing/features/parallel_segments.rb
435
+ - lib/karafka/pro/routing/features/parallel_segments/builder.rb
436
+ - lib/karafka/pro/routing/features/parallel_segments/config.rb
437
+ - lib/karafka/pro/routing/features/parallel_segments/consumer_group.rb
438
+ - lib/karafka/pro/routing/features/parallel_segments/contracts/consumer_group.rb
439
+ - lib/karafka/pro/routing/features/parallel_segments/topic.rb
439
440
  - lib/karafka/pro/routing/features/patterns.rb
440
441
  - lib/karafka/pro/routing/features/patterns/builder.rb
441
442
  - lib/karafka/pro/routing/features/patterns/config.rb
@@ -619,7 +620,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
619
620
  - !ruby/object:Gem::Version
620
621
  version: '0'
621
622
  requirements: []
622
- rubygems_version: 3.6.2
623
+ rubygems_version: 3.6.7
623
624
  specification_version: 4
624
625
  summary: Karafka is Ruby and Rails efficient Kafka processing framework.
625
626
  test_files: []
checksums.yaml.gz.sig DELETED
Binary file
data/certs/cert.pem DELETED
@@ -1,26 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIEcDCCAtigAwIBAgIBATANBgkqhkiG9w0BAQsFADA/MRAwDgYDVQQDDAdjb250
3
- YWN0MRcwFQYKCZImiZPyLGQBGRYHa2FyYWZrYTESMBAGCgmSJomT8ixkARkWAmlv
4
- MB4XDTI0MDgyMzEwMTkyMFoXDTQ5MDgxNzEwMTkyMFowPzEQMA4GA1UEAwwHY29u
5
- dGFjdDEXMBUGCgmSJomT8ixkARkWB2thcmFma2ExEjAQBgoJkiaJk/IsZAEZFgJp
6
- bzCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAKjLhLjQqUlNayxkXnO+
7
- PsmCDs/KFIzhrsYMfLZRZNaWmzV3ujljMOdDjd4snM2X06C41iVdQPWjpe3j8vVe
8
- ZXEWR/twSbOP6Eeg8WVH2wCOo0x5i7yhVn4UBLH4JpfEMCbemVcWQ9ry9OMg4WpH
9
- Uu4dRwxFV7hzCz3p0QfNLRI4miAxnGWcnlD98IJRjBAksTuR1Llj0vbOrDGsL9ZT
10
- JeXP2gdRLd8SqzAFJEWrbeTBCBU7gfSh3oMg5SVDLjaqf7Kz5wC/8bDZydzanOxB
11
- T6CDXPsCnllmvTNx2ei2T5rGYJOzJeNTmJLLK6hJWUlAvaQSvCwZRvFJ0tVGLEoS
12
- flqSr6uGyyl1eMUsNmsH4BqPEYcAV6P2PKTv2vUR8AP0raDvZ3xL1TKvfRb8xRpo
13
- vPopCGlY5XBWEc6QERHfVLTIVsjnls2/Ujj4h8/TSfqqYnaHKefIMLbuD/tquMjD
14
- iWQsW2qStBV0T+U7FijKxVfrfqZP7GxQmDAc9o1iiyAa3QIDAQABo3cwdTAJBgNV
15
- HRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU3O4dTXmvE7YpAkszGzR9DdL9
16
- sbEwHQYDVR0RBBYwFIESY29udGFjdEBrYXJhZmthLmlvMB0GA1UdEgQWMBSBEmNv
17
- bnRhY3RAa2FyYWZrYS5pbzANBgkqhkiG9w0BAQsFAAOCAYEAVKTfoLXn7mqdSxIR
18
- eqxcR6Huudg1jes81s1+X0uiRTR3hxxKZ3Y82cPsee9zYWyBrN8TA4KA0WILTru7
19
- Ygxvzha0SRPsSiaKLmgOJ+61ebI4+bOORzIJLpD6GxCxu1r7MI4+0r1u1xe0EWi8
20
- agkVo1k4Vi8cKMLm6Gl9b3wG9zQBw6fcgKwmpjKiNnOLP+OytzUANrIUJjoq6oal
21
- TC+f/Uc0TLaRqUaW/bejxzDWWHoM3SU6aoLPuerglzp9zZVzihXwx3jPLUVKDFpF
22
- Rl2lcBDxlpYGueGo0/oNzGJAAy6js8jhtHC9+19PD53vk7wHtFTZ/0ugDQYnwQ+x
23
- oml2fAAuVWpTBCgOVFe6XCQpMKopzoxQ1PjKztW2KYxgJdIBX87SnL3aWuBQmhRd
24
- i9zWxov0mr44TWegTVeypcWGd/0nxu1+QHVNHJrpqlPBRvwQsUm7fwmRInGpcaB8
25
- ap8wNYvryYzrzvzUxIVFBVM5PacgkFqRmolCa8I7tdKQN+R1
26
- -----END CERTIFICATE-----
data.tar.gz.sig DELETED
Binary file
metadata.gz.sig DELETED
Binary file