karafka 1.1.2 → 1.2.0.beta1

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 (67) hide show
  1. checksums.yaml +5 -5
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +1 -0
  4. data/CHANGELOG.md +34 -0
  5. data/Gemfile +1 -2
  6. data/Gemfile.lock +35 -22
  7. data/README.md +4 -3
  8. data/karafka.gemspec +5 -3
  9. data/lib/karafka.rb +4 -5
  10. data/lib/karafka/app.rb +8 -15
  11. data/lib/karafka/attributes_map.rb +1 -1
  12. data/lib/karafka/backends/inline.rb +1 -2
  13. data/lib/karafka/{base_controller.rb → base_consumer.rb} +19 -11
  14. data/lib/karafka/base_responder.rb +33 -14
  15. data/lib/karafka/callbacks.rb +30 -0
  16. data/lib/karafka/callbacks/config.rb +22 -0
  17. data/lib/karafka/callbacks/dsl.rb +16 -0
  18. data/lib/karafka/cli/install.rb +2 -3
  19. data/lib/karafka/cli/server.rb +0 -1
  20. data/lib/karafka/connection/{consumer.rb → client.rb} +25 -33
  21. data/lib/karafka/connection/config_adapter.rb +14 -6
  22. data/lib/karafka/connection/delegator.rb +46 -0
  23. data/lib/karafka/connection/listener.rb +22 -13
  24. data/lib/karafka/{controllers → consumers}/callbacks.rb +9 -9
  25. data/lib/karafka/consumers/includer.rb +51 -0
  26. data/lib/karafka/consumers/responders.rb +24 -0
  27. data/lib/karafka/{controllers → consumers}/single_params.rb +3 -3
  28. data/lib/karafka/errors.rb +10 -3
  29. data/lib/karafka/fetcher.rb +30 -34
  30. data/lib/karafka/helpers/class_matcher.rb +8 -8
  31. data/lib/karafka/helpers/config_retriever.rb +2 -2
  32. data/lib/karafka/instrumentation/listener.rb +97 -0
  33. data/lib/karafka/instrumentation/logger.rb +55 -0
  34. data/lib/karafka/instrumentation/monitor.rb +62 -0
  35. data/lib/karafka/loader.rb +0 -1
  36. data/lib/karafka/params/{params.rb → dsl.rb} +69 -44
  37. data/lib/karafka/params/params_batch.rb +2 -2
  38. data/lib/karafka/patches/dry_configurable.rb +6 -2
  39. data/lib/karafka/patches/ruby_kafka.rb +10 -10
  40. data/lib/karafka/persistence/client.rb +25 -0
  41. data/lib/karafka/persistence/consumer.rb +27 -14
  42. data/lib/karafka/persistence/topic.rb +29 -0
  43. data/lib/karafka/process.rb +5 -4
  44. data/lib/karafka/responders/builder.rb +15 -14
  45. data/lib/karafka/routing/builder.rb +1 -1
  46. data/lib/karafka/routing/consumer_mapper.rb +3 -2
  47. data/lib/karafka/routing/router.rb +1 -1
  48. data/lib/karafka/routing/topic.rb +5 -5
  49. data/lib/karafka/schemas/config.rb +3 -0
  50. data/lib/karafka/schemas/consumer_group.rb +14 -2
  51. data/lib/karafka/schemas/consumer_group_topic.rb +1 -1
  52. data/lib/karafka/server.rb +33 -5
  53. data/lib/karafka/setup/config.rb +45 -21
  54. data/lib/karafka/setup/configurators/base.rb +6 -12
  55. data/lib/karafka/setup/configurators/params.rb +25 -0
  56. data/lib/karafka/setup/configurators/water_drop.rb +6 -3
  57. data/lib/karafka/setup/dsl.rb +22 -0
  58. data/lib/karafka/templates/{application_controller.rb.example → application_consumer.rb.example} +2 -3
  59. data/lib/karafka/templates/karafka.rb.example +14 -3
  60. data/lib/karafka/version.rb +1 -1
  61. metadata +58 -23
  62. data/lib/karafka/connection/processor.rb +0 -61
  63. data/lib/karafka/controllers/includer.rb +0 -51
  64. data/lib/karafka/controllers/responders.rb +0 -19
  65. data/lib/karafka/logger.rb +0 -53
  66. data/lib/karafka/monitor.rb +0 -98
  67. data/lib/karafka/persistence/controller.rb +0 -38
@@ -13,6 +13,7 @@ module Karafka
13
13
  # @see Karafka::Setup::Configurators::Base for more details about configurators api
14
14
  class Config
15
15
  extend Dry::Configurable
16
+ extend Callbacks::Config
16
17
 
17
18
  # Available settings
18
19
  # option client_id [String] kafka client_id - used to provide
@@ -21,9 +22,9 @@ module Karafka
21
22
  # What backend do we want to use to process messages
22
23
  setting :backend, :inline
23
24
  # option logger [Instance] logger that we want to use
24
- setting :logger, -> { ::Karafka::Logger.instance }
25
+ setting :logger, -> { ::Karafka::Instrumentation::Logger.instance }
25
26
  # option monitor [Instance] monitor that we will to use (defaults to Karafka::Monitor)
26
- setting :monitor, -> { ::Karafka::Monitor.instance }
27
+ setting :monitor, -> { ::Karafka::Instrumentation::Monitor.instance }
27
28
  # Mapper used to remap consumer groups ids, so in case users migrate from other tools
28
29
  # or they need to maintain their own internal consumer group naming conventions, they
29
30
  # can easily do it, replacing the default client_id + consumer name pattern concept
@@ -43,12 +44,24 @@ module Karafka
43
44
  # #params_batch will contain params received from Kafka (may be more than 1) so we can
44
45
  # process them in batches
45
46
  setting :batch_consuming, false
46
- # Should we operate in a single controller instance across multiple batches of messages,
47
- # from the same partition or should we build a new instance for each incoming batch.
48
- # Disabling that can be useful when you want to build a new controller instance for each
49
- # incoming batch. It's disabled by default, not to create more objects that needed on
50
- # each batch
47
+ # Should we operate in a single consumer instance across multiple batches of messages,
48
+ # from the same partition or should we build a new one for each incoming batch.
49
+ # Disabling that can be useful when you want to create a new consumer instance for each
50
+ # incoming batch. It's disabled by default, not to create more objects that needed
51
+ # on each batch
51
52
  setting :persistent, true
53
+ # option shutdown_timeout [Integer, nil] the number of seconds after which Karafka no
54
+ # longer wait for the consumers to stop gracefully but instead we force
55
+ # terminate everything.
56
+ # @note Keep in mind, that if your business logic
57
+ # @note If set to nil, it won't forcefully shutdown the process at all.
58
+ setting :shutdown_timeout, 60
59
+ # option params_base_class [Class] base class for params class initialization
60
+ # This can be either a Hash or a HashWithIndifferentAccess depending on your
61
+ # requirements. Note, that by using HashWithIndifferentAccess, you remove some of the
62
+ # performance in favor of convenience. This can be useful especially if you already use
63
+ # it with Rails, etc
64
+ setting :params_base_class, Hash
52
65
 
53
66
  # option kafka [Hash] - optional - kafka configuration options
54
67
  setting :kafka do
@@ -81,6 +94,9 @@ module Karafka
81
94
  # returning messages from the server; if `max_wait_time` is reached, this
82
95
  # is ignored.
83
96
  setting :min_bytes, 1
97
+ # option max_bytes [Integer] the maximum number of bytes to read before returning messages
98
+ # from each broker.
99
+ setting :max_bytes, 10_485_760
84
100
  # option max_wait_time [Integer, Float] max_wait_time is the maximum number of seconds to
85
101
  # wait before returning data from a single message fetch. By setting this high you also
86
102
  # increase the fetching throughput - and by setting it low you set a bound on latency.
@@ -109,24 +125,33 @@ module Karafka
109
125
  setting :socket_timeout, 30
110
126
 
111
127
  # SSL authentication related settings
112
- # option ca_cert [String] SSL CA certificate
128
+ # option ca_cert [String, nil] SSL CA certificate
113
129
  setting :ssl_ca_cert, nil
114
- # option ssl_ca_cert_file_path [String] SSL CA certificate file path
130
+ # option ssl_ca_cert_file_path [String, nil] SSL CA certificate file path
115
131
  setting :ssl_ca_cert_file_path, nil
116
- # option ssl_client_cert [String] SSL client certificate
132
+ # option ssl_ca_certs_from_system [Boolean] Use the CA certs from your system's default
133
+ # certificate store
134
+ setting :ssl_ca_certs_from_system, false
135
+ # option ssl_client_cert [String, nil] SSL client certificate
117
136
  setting :ssl_client_cert, nil
118
- # option ssl_client_cert_key [String] SSL client certificate password
137
+ # option ssl_client_cert_key [String, nil] SSL client certificate password
119
138
  setting :ssl_client_cert_key, nil
120
- # option sasl_gssapi_principal [String] sasl principal
139
+ # option sasl_gssapi_principal [String, nil] sasl principal
121
140
  setting :sasl_gssapi_principal, nil
122
- # option sasl_gssapi_keytab [String] sasl keytab
141
+ # option sasl_gssapi_keytab [String, nil] sasl keytab
123
142
  setting :sasl_gssapi_keytab, nil
124
143
  # option sasl_plain_authzid [String] The authorization identity to use
125
144
  setting :sasl_plain_authzid, ''
126
- # option sasl_plain_username [String] The username used to authenticate
145
+ # option sasl_plain_username [String, nil] The username used to authenticate
127
146
  setting :sasl_plain_username, nil
128
- # option sasl_plain_password [String] The password used to authenticate
147
+ # option sasl_plain_password [String, nil] The password used to authenticate
129
148
  setting :sasl_plain_password, nil
149
+ # option sasl_scram_username [String, nil] The username used to authenticate
150
+ setting :sasl_scram_username, nil
151
+ # option sasl_scram_password [String, nil] The password used to authenticate
152
+ setting :sasl_scram_password, nil
153
+ # option sasl_scram_mechanism [String, nil] Scram mechanism, either 'sha256' or 'sha512'
154
+ setting :sasl_scram_mechanism, nil
130
155
  end
131
156
 
132
157
  class << self
@@ -134,18 +159,17 @@ module Karafka
134
159
  # @yield Runs a block of code providing a config singleton instance to it
135
160
  # @yieldparam [Karafka::Setup::Config] Karafka config instance
136
161
  def setup
137
- configure do |config|
138
- yield(config)
139
- end
162
+ configure { |config| yield(config) }
140
163
  end
141
164
 
142
165
  # Everything that should be initialized after the setup
143
166
  # Components are in karafka/config directory and are all loaded one by one
144
167
  # If you want to configure a next component, please add a proper file to config dir
145
168
  def setup_components
146
- Configurators::Base.descendants.each do |klass|
147
- klass.new(config).setup
148
- end
169
+ [
170
+ Configurators::Params,
171
+ Configurators::WaterDrop
172
+ ].each { |klass| klass.setup(config) }
149
173
  end
150
174
 
151
175
  # Validate config based on ConfigurationSchema
@@ -3,10 +3,13 @@
3
3
  module Karafka
4
4
  module Setup
5
5
  # Configurators module is used to enclose all the external dependencies configurations
6
+ # upon which Karafka depents
6
7
  class Configurators
7
- # Karafka has come components that it relies on (like Sidekiq)
8
+ # Karafka has some components that it relies on (like Sidekiq)
8
9
  # We need to configure all of them only when the framework was set up.
9
10
  # Any class that descends from this one will be automatically invoked upon setup (after it)
11
+ # @note This should be used only for internal Karafka dependencies configuration
12
+ # End users configuration should go to the after_init block
10
13
  # @example Configure an Example class
11
14
  # class ExampleConfigurator < Base
12
15
  # def setup
@@ -15,18 +18,9 @@ module Karafka
15
18
  # end
16
19
  # end
17
20
  class Base
18
- extend ActiveSupport::DescendantsTracker
19
-
20
- attr_reader :config
21
-
22
- # @param config [Karafka::Config] config instance
23
- # @return [Karafka::Config::Base] configurator for a given component
24
- def initialize(config)
25
- @config = config
26
- end
27
-
21
+ # @param _config [Karafka::Config] config instance
28
22
  # This method needs to be implemented in a subclass
29
- def setup
23
+ def self.setup(_config)
30
24
  raise NotImplementedError
31
25
  end
32
26
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Karafka
4
+ module Setup
5
+ class Configurators
6
+ # Karafka::Params::Params are dynamically built based on user defined parent class
7
+ # so we cannot just require it, we need to initialize it after user is done with
8
+ # the framework configuration. This is a configurator that does exactly that.
9
+ class Params < Base
10
+ # Builds up Karafka::Params::Params class with user defined parent class
11
+ # @param config [Karafka::Setup::Config] Config we can user to setup things
12
+ def self.setup(config)
13
+ return if defined? Karafka::Params::Params
14
+
15
+ Karafka::Params.const_set(
16
+ 'Params',
17
+ Class
18
+ .new(config.params_base_class)
19
+ .tap { |klass| klass.include(Karafka::Params::Dsl) }
20
+ )
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -6,17 +6,20 @@ module Karafka
6
6
  # Class responsible for setting up WaterDrop configuration
7
7
  class WaterDrop < Base
8
8
  # Sets up a WaterDrop settings
9
- def setup
9
+ # @param config [Karafka::Setup::Config] Config we can user to setup things
10
+ # @note This will also inject Karafka monitor as a default monitor into WaterDrop,
11
+ # so we have the same monitor within whole Karafka framework (same with logger)
12
+ def self.setup(config)
10
13
  ::WaterDrop.setup do |water_config|
11
14
  water_config.deliver = true
12
15
 
13
- Karafka::App.config.to_h.except(:kafka).each do |k, v|
16
+ config.to_h.except(:kafka).each do |k, v|
14
17
  key_assignment = :"#{k}="
15
18
  next unless water_config.respond_to?(key_assignment)
16
19
  water_config.public_send(key_assignment, v)
17
20
  end
18
21
 
19
- Karafka::App.config.kafka.to_h.each do |k, v|
22
+ config.kafka.to_h.each do |k, v|
20
23
  key_assignment = :"#{k}="
21
24
  next unless water_config.kafka.respond_to?(key_assignment)
22
25
  water_config.kafka.public_send(key_assignment, v)
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Karafka
4
+ module Setup
5
+ # Dsl for allowing to work with the configuration from the Karafka::App
6
+ # @note Despite providing methods, everything is still persisted and fetched
7
+ # from the Karafka::Setup::Config
8
+ module Dsl
9
+ # Sets up the whole configuration
10
+ # @param [Block] block configuration block
11
+ def setup(&block)
12
+ Setup::Config.setup(&block)
13
+ initialize!
14
+ end
15
+
16
+ # @return [Karafka::Config] config instance
17
+ def config
18
+ Setup::Config.config
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Application controller from which all Karafka controllers should inherit
3
+ # Application consumer from which all Karafka consumers should inherit
4
4
  # You can rename it if it would conflict with your current code base (in case you're integrating
5
5
  # Karafka with other frameworks)
6
- class ApplicationController < Karafka::BaseController
7
- end
6
+ ApplicationConsumer = Class.new(Karafka::BaseConsumer)
@@ -21,18 +21,29 @@ class KarafkaApp < Karafka::App
21
21
  config.batch_fetching = true
22
22
  end
23
23
 
24
+ after_init do |config|
25
+ # Put here all the things you want to do after the Karafka framework
26
+ # initialization
27
+ end
28
+
29
+ # Comment out this part if you are not using instrumentation and/or you are not
30
+ # interested in logging events for certain environments. Since instrumentation
31
+ # notifications add extra boilerplate, if you want to achieve max performance,
32
+ # listen to only what you really need for given environment.
33
+ Karafka.monitor.subscribe(Karafka::Instrumentation::Listener)
34
+
24
35
  consumer_groups.draw do
25
36
  # topic :example do
26
- # controller ExampleController
37
+ # consumer ExampleConsumer
27
38
  # end
28
39
 
29
40
  # consumer_group :bigger_group do
30
41
  # topic :test do
31
- # controller TestController
42
+ # consumer TestConsumer
32
43
  # end
33
44
  #
34
45
  # topic :test2 do
35
- # controller Test2Controller
46
+ # consumer Test2Consumer
36
47
  # end
37
48
  # end
38
49
  end
@@ -3,5 +3,5 @@
3
3
  # Main module namespace
4
4
  module Karafka
5
5
  # Current Karafka version
6
- VERSION = '1.1.2'
6
+ VERSION = '1.2.0.beta1'
7
7
  end
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: 1.1.2
4
+ version: 1.2.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maciej Mensfeld
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-11-28 00:00:00.000000000 Z
13
+ date: 2018-02-16 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -18,14 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: '5.0'
21
+ version: '4.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - ">="
27
27
  - !ruby/object:Gem::Version
28
- version: '5.0'
28
+ version: '4.0'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: dry-configurable
31
31
  requirement: !ruby/object:Gem::Requirement
@@ -40,6 +40,34 @@ dependencies:
40
40
  - - "~>"
41
41
  - !ruby/object:Gem::Version
42
42
  version: '0.7'
43
+ - !ruby/object:Gem::Dependency
44
+ name: dry-inflector
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: 0.1.1
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: 0.1.1
57
+ - !ruby/object:Gem::Dependency
58
+ name: dry-monitor
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '0.1'
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '0.1'
43
71
  - !ruby/object:Gem::Dependency
44
72
  name: dry-validation
45
73
  requirement: !ruby/object:Gem::Requirement
@@ -116,14 +144,14 @@ dependencies:
116
144
  requirements:
117
145
  - - ">="
118
146
  - !ruby/object:Gem::Version
119
- version: '0.5'
147
+ version: 0.5.3
120
148
  type: :runtime
121
149
  prerelease: false
122
150
  version_requirements: !ruby/object:Gem::Requirement
123
151
  requirements:
124
152
  - - ">="
125
153
  - !ruby/object:Gem::Version
126
- version: '0.5'
154
+ version: 0.5.3
127
155
  - !ruby/object:Gem::Dependency
128
156
  name: thor
129
157
  requirement: !ruby/object:Gem::Requirement
@@ -144,14 +172,14 @@ dependencies:
144
172
  requirements:
145
173
  - - ">="
146
174
  - !ruby/object:Gem::Version
147
- version: 1.0.1
175
+ version: 1.2.0.beta1
148
176
  type: :runtime
149
177
  prerelease: false
150
178
  version_requirements: !ruby/object:Gem::Requirement
151
179
  requirements:
152
180
  - - ">="
153
181
  - !ruby/object:Gem::Version
154
- version: 1.0.1
182
+ version: 1.2.0.beta1
155
183
  description: Framework used to simplify Apache Kafka based Ruby applications development
156
184
  email:
157
185
  - maciej@coditsu.io
@@ -182,8 +210,11 @@ files:
182
210
  - lib/karafka/app.rb
183
211
  - lib/karafka/attributes_map.rb
184
212
  - lib/karafka/backends/inline.rb
185
- - lib/karafka/base_controller.rb
213
+ - lib/karafka/base_consumer.rb
186
214
  - lib/karafka/base_responder.rb
215
+ - lib/karafka/callbacks.rb
216
+ - lib/karafka/callbacks/config.rb
217
+ - lib/karafka/callbacks/dsl.rb
187
218
  - lib/karafka/cli.rb
188
219
  - lib/karafka/cli/base.rb
189
220
  - lib/karafka/cli/console.rb
@@ -191,29 +222,31 @@ files:
191
222
  - lib/karafka/cli/info.rb
192
223
  - lib/karafka/cli/install.rb
193
224
  - lib/karafka/cli/server.rb
225
+ - lib/karafka/connection/client.rb
194
226
  - lib/karafka/connection/config_adapter.rb
195
- - lib/karafka/connection/consumer.rb
227
+ - lib/karafka/connection/delegator.rb
196
228
  - lib/karafka/connection/listener.rb
197
- - lib/karafka/connection/processor.rb
198
- - lib/karafka/controllers/callbacks.rb
199
- - lib/karafka/controllers/includer.rb
200
- - lib/karafka/controllers/responders.rb
201
- - lib/karafka/controllers/single_params.rb
229
+ - lib/karafka/consumers/callbacks.rb
230
+ - lib/karafka/consumers/includer.rb
231
+ - lib/karafka/consumers/responders.rb
232
+ - lib/karafka/consumers/single_params.rb
202
233
  - lib/karafka/errors.rb
203
234
  - lib/karafka/fetcher.rb
204
235
  - lib/karafka/helpers/class_matcher.rb
205
236
  - lib/karafka/helpers/config_retriever.rb
206
237
  - lib/karafka/helpers/multi_delegator.rb
238
+ - lib/karafka/instrumentation/listener.rb
239
+ - lib/karafka/instrumentation/logger.rb
240
+ - lib/karafka/instrumentation/monitor.rb
207
241
  - lib/karafka/loader.rb
208
- - lib/karafka/logger.rb
209
- - lib/karafka/monitor.rb
210
- - lib/karafka/params/params.rb
242
+ - lib/karafka/params/dsl.rb
211
243
  - lib/karafka/params/params_batch.rb
212
244
  - lib/karafka/parsers/json.rb
213
245
  - lib/karafka/patches/dry_configurable.rb
214
246
  - lib/karafka/patches/ruby_kafka.rb
247
+ - lib/karafka/persistence/client.rb
215
248
  - lib/karafka/persistence/consumer.rb
216
- - lib/karafka/persistence/controller.rb
249
+ - lib/karafka/persistence/topic.rb
217
250
  - lib/karafka/process.rb
218
251
  - lib/karafka/responders/builder.rb
219
252
  - lib/karafka/responders/topic.rb
@@ -232,9 +265,11 @@ files:
232
265
  - lib/karafka/server.rb
233
266
  - lib/karafka/setup/config.rb
234
267
  - lib/karafka/setup/configurators/base.rb
268
+ - lib/karafka/setup/configurators/params.rb
235
269
  - lib/karafka/setup/configurators/water_drop.rb
270
+ - lib/karafka/setup/dsl.rb
236
271
  - lib/karafka/status.rb
237
- - lib/karafka/templates/application_controller.rb.example
272
+ - lib/karafka/templates/application_consumer.rb.example
238
273
  - lib/karafka/templates/application_responder.rb.example
239
274
  - lib/karafka/templates/karafka.rb.example
240
275
  - lib/karafka/version.rb
@@ -254,12 +289,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
254
289
  version: 2.3.0
255
290
  required_rubygems_version: !ruby/object:Gem::Requirement
256
291
  requirements:
257
- - - ">="
292
+ - - ">"
258
293
  - !ruby/object:Gem::Version
259
- version: '0'
294
+ version: 1.3.1
260
295
  requirements: []
261
296
  rubyforge_project:
262
- rubygems_version: 2.6.13
297
+ rubygems_version: 2.7.3
263
298
  signing_key:
264
299
  specification_version: 4
265
300
  summary: Ruby based framework for working with Apache Kafka