karafka 1.1.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.
- checksums.yaml +7 -0
- data/.console_irbrc +13 -0
- data/.github/ISSUE_TEMPLATE.md +2 -0
- data/.gitignore +68 -0
- data/.rspec +1 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +17 -0
- data/CHANGELOG.md +371 -0
- data/CODE_OF_CONDUCT.md +46 -0
- data/CONTRIBUTING.md +42 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +111 -0
- data/MIT-LICENCE +18 -0
- data/README.md +95 -0
- data/bin/karafka +19 -0
- data/config/errors.yml +6 -0
- data/karafka.gemspec +35 -0
- data/lib/karafka.rb +68 -0
- data/lib/karafka/app.rb +52 -0
- data/lib/karafka/attributes_map.rb +67 -0
- data/lib/karafka/backends/inline.rb +17 -0
- data/lib/karafka/base_controller.rb +60 -0
- data/lib/karafka/base_responder.rb +185 -0
- data/lib/karafka/cli.rb +54 -0
- data/lib/karafka/cli/base.rb +78 -0
- data/lib/karafka/cli/console.rb +29 -0
- data/lib/karafka/cli/flow.rb +46 -0
- data/lib/karafka/cli/info.rb +29 -0
- data/lib/karafka/cli/install.rb +43 -0
- data/lib/karafka/cli/server.rb +67 -0
- data/lib/karafka/connection/config_adapter.rb +112 -0
- data/lib/karafka/connection/consumer.rb +121 -0
- data/lib/karafka/connection/listener.rb +51 -0
- data/lib/karafka/connection/processor.rb +61 -0
- data/lib/karafka/controllers/callbacks.rb +54 -0
- data/lib/karafka/controllers/includer.rb +51 -0
- data/lib/karafka/controllers/responders.rb +19 -0
- data/lib/karafka/controllers/single_params.rb +15 -0
- data/lib/karafka/errors.rb +43 -0
- data/lib/karafka/fetcher.rb +48 -0
- data/lib/karafka/helpers/class_matcher.rb +78 -0
- data/lib/karafka/helpers/config_retriever.rb +46 -0
- data/lib/karafka/helpers/multi_delegator.rb +33 -0
- data/lib/karafka/loader.rb +29 -0
- data/lib/karafka/logger.rb +53 -0
- data/lib/karafka/monitor.rb +98 -0
- data/lib/karafka/params/params.rb +128 -0
- data/lib/karafka/params/params_batch.rb +41 -0
- data/lib/karafka/parsers/json.rb +38 -0
- data/lib/karafka/patches/dry_configurable.rb +31 -0
- data/lib/karafka/patches/ruby_kafka.rb +34 -0
- data/lib/karafka/persistence/consumer.rb +25 -0
- data/lib/karafka/persistence/controller.rb +38 -0
- data/lib/karafka/process.rb +63 -0
- data/lib/karafka/responders/builder.rb +35 -0
- data/lib/karafka/responders/topic.rb +57 -0
- data/lib/karafka/routing/builder.rb +61 -0
- data/lib/karafka/routing/consumer_group.rb +61 -0
- data/lib/karafka/routing/consumer_mapper.rb +33 -0
- data/lib/karafka/routing/proxy.rb +37 -0
- data/lib/karafka/routing/router.rb +29 -0
- data/lib/karafka/routing/topic.rb +66 -0
- data/lib/karafka/routing/topic_mapper.rb +55 -0
- data/lib/karafka/schemas/config.rb +21 -0
- data/lib/karafka/schemas/consumer_group.rb +65 -0
- data/lib/karafka/schemas/consumer_group_topic.rb +18 -0
- data/lib/karafka/schemas/responder_usage.rb +39 -0
- data/lib/karafka/schemas/server_cli_options.rb +43 -0
- data/lib/karafka/server.rb +62 -0
- data/lib/karafka/setup/config.rb +163 -0
- data/lib/karafka/setup/configurators/base.rb +35 -0
- data/lib/karafka/setup/configurators/water_drop.rb +29 -0
- data/lib/karafka/status.rb +25 -0
- data/lib/karafka/templates/application_controller.rb.example +7 -0
- data/lib/karafka/templates/application_responder.rb.example +11 -0
- data/lib/karafka/templates/karafka.rb.example +41 -0
- data/lib/karafka/version.rb +7 -0
- data/log/.gitkeep +0 -0
- metadata +267 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Karafka
|
4
|
+
module Setup
|
5
|
+
# Configurators module is used to enclose all the external dependencies configurations
|
6
|
+
class Configurators
|
7
|
+
# Karafka has come components that it relies on (like Sidekiq)
|
8
|
+
# We need to configure all of them only when the framework was set up.
|
9
|
+
# Any class that descends from this one will be automatically invoked upon setup (after it)
|
10
|
+
# @example Configure an Example class
|
11
|
+
# class ExampleConfigurator < Base
|
12
|
+
# def setup
|
13
|
+
# ExampleClass.logger = Karafka.logger
|
14
|
+
# ExampleClass.redis = config.redis
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
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
|
+
|
28
|
+
# This method needs to be implemented in a subclass
|
29
|
+
def setup
|
30
|
+
raise NotImplementedError
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Karafka
|
4
|
+
module Setup
|
5
|
+
class Configurators
|
6
|
+
# Class responsible for setting up WaterDrop configuration
|
7
|
+
class WaterDrop < Base
|
8
|
+
# Sets up a WaterDrop settings
|
9
|
+
def setup
|
10
|
+
::WaterDrop.setup do |water_config|
|
11
|
+
water_config.deliver = true
|
12
|
+
|
13
|
+
Karafka::App.config.to_h.except(:kafka).each do |k, v|
|
14
|
+
key_assignment = :"#{k}="
|
15
|
+
next unless water_config.respond_to?(key_assignment)
|
16
|
+
water_config.public_send(key_assignment, v)
|
17
|
+
end
|
18
|
+
|
19
|
+
Karafka::App.config.kafka.to_h.each do |k, v|
|
20
|
+
key_assignment = :"#{k}="
|
21
|
+
next unless water_config.kafka.respond_to?(key_assignment)
|
22
|
+
water_config.kafka.public_send(key_assignment, v)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Karafka
|
4
|
+
# App status monitor
|
5
|
+
class Status
|
6
|
+
include Singleton
|
7
|
+
|
8
|
+
# Available states and their transitions
|
9
|
+
STATES = {
|
10
|
+
initializing: :initialize!,
|
11
|
+
running: :run!,
|
12
|
+
stopped: :stop!
|
13
|
+
}.freeze
|
14
|
+
|
15
|
+
STATES.each do |state, transition|
|
16
|
+
define_method :"#{state}?" do
|
17
|
+
@status == state
|
18
|
+
end
|
19
|
+
|
20
|
+
define_method transition do
|
21
|
+
@status = state
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Application controller from which all Karafka controllers should inherit
|
4
|
+
# You can rename it if it would conflict with your current code base (in case you're integrating
|
5
|
+
# Karafka with other frameworks)
|
6
|
+
class ApplicationController < Karafka::BaseController
|
7
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Application responder from which all Karafka responders should inherit
|
4
|
+
# You can rename it if it would conflict with your current code base (in case you're integrating
|
5
|
+
# Karafka with other frameworks)
|
6
|
+
class ApplicationResponder < Karafka::BaseResponder
|
7
|
+
# This method needs to be implemented in each of the responders
|
8
|
+
# def respond(data)
|
9
|
+
# respond_to :topic, data.to_json
|
10
|
+
# end
|
11
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Non Ruby on Rails setup
|
4
|
+
ENV['RACK_ENV'] ||= 'development'
|
5
|
+
ENV['KARAFKA_ENV'] ||= ENV['RACK_ENV']
|
6
|
+
Bundler.require(:default, ENV['KARAFKA_ENV'])
|
7
|
+
Karafka::Loader.load(Karafka::App.root)
|
8
|
+
|
9
|
+
# Ruby on Rails setup
|
10
|
+
# Remove whole non-Rails setup that is above and uncomment the 4 lines below
|
11
|
+
# ENV['RAILS_ENV'] ||= 'development'
|
12
|
+
# ENV['KARAFKA_ENV'] = ENV['RAILS_ENV']
|
13
|
+
# require ::File.expand_path('../config/environment', __FILE__)
|
14
|
+
# Rails.application.eager_load!
|
15
|
+
|
16
|
+
class KarafkaApp < Karafka::App
|
17
|
+
setup do |config|
|
18
|
+
config.kafka.seed_brokers = %w( 127.0.0.1:9092 )
|
19
|
+
config.client_id = 'example_app'
|
20
|
+
config.backend = :inline
|
21
|
+
config.batch_fetching = true
|
22
|
+
end
|
23
|
+
|
24
|
+
consumer_groups.draw do
|
25
|
+
# topic :example do
|
26
|
+
# controller ExampleController
|
27
|
+
# end
|
28
|
+
|
29
|
+
# consumer_group :bigger_group do
|
30
|
+
# topic :test do
|
31
|
+
# controller TestController
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# topic :test2 do
|
35
|
+
# controller Test2Controller
|
36
|
+
# end
|
37
|
+
# end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
KarafkaApp.boot!
|
data/log/.gitkeep
ADDED
File without changes
|
metadata
ADDED
@@ -0,0 +1,267 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: karafka
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Maciej Mensfeld
|
8
|
+
- Pavlo Vavruk
|
9
|
+
- Adam Gwozdowski
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2017-11-07 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: activesupport
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - ">="
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '5.0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '5.0'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: dry-configurable
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - "~>"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0.7'
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0.7'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: dry-validation
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0.11'
|
50
|
+
type: :runtime
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - "~>"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0.11'
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: envlogic
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - "~>"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '1.0'
|
64
|
+
type: :runtime
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - "~>"
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '1.0'
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: multi_json
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '1.12'
|
78
|
+
type: :runtime
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '1.12'
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: rake
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '11.3'
|
92
|
+
type: :runtime
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '11.3'
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: require_all
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '1.4'
|
106
|
+
type: :runtime
|
107
|
+
prerelease: false
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '1.4'
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: ruby-kafka
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0.5'
|
120
|
+
type: :runtime
|
121
|
+
prerelease: false
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0.5'
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
name: thor
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - "~>"
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0.19'
|
134
|
+
type: :runtime
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - "~>"
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '0.19'
|
141
|
+
- !ruby/object:Gem::Dependency
|
142
|
+
name: waterdrop
|
143
|
+
requirement: !ruby/object:Gem::Requirement
|
144
|
+
requirements:
|
145
|
+
- - ">="
|
146
|
+
- !ruby/object:Gem::Version
|
147
|
+
version: 1.0.1
|
148
|
+
type: :runtime
|
149
|
+
prerelease: false
|
150
|
+
version_requirements: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: 1.0.1
|
155
|
+
description: Framework used to simplify Apache Kafka based Ruby applications development
|
156
|
+
email:
|
157
|
+
- maciej@coditsu.io
|
158
|
+
- pavlo.vavruk@gmail.com
|
159
|
+
- adam99g@gmail.com
|
160
|
+
executables:
|
161
|
+
- karafka
|
162
|
+
extensions: []
|
163
|
+
extra_rdoc_files: []
|
164
|
+
files:
|
165
|
+
- ".console_irbrc"
|
166
|
+
- ".github/ISSUE_TEMPLATE.md"
|
167
|
+
- ".gitignore"
|
168
|
+
- ".rspec"
|
169
|
+
- ".ruby-gemset"
|
170
|
+
- ".ruby-version"
|
171
|
+
- ".travis.yml"
|
172
|
+
- CHANGELOG.md
|
173
|
+
- CODE_OF_CONDUCT.md
|
174
|
+
- CONTRIBUTING.md
|
175
|
+
- Gemfile
|
176
|
+
- Gemfile.lock
|
177
|
+
- MIT-LICENCE
|
178
|
+
- README.md
|
179
|
+
- bin/karafka
|
180
|
+
- config/errors.yml
|
181
|
+
- karafka.gemspec
|
182
|
+
- lib/karafka.rb
|
183
|
+
- lib/karafka/app.rb
|
184
|
+
- lib/karafka/attributes_map.rb
|
185
|
+
- lib/karafka/backends/inline.rb
|
186
|
+
- lib/karafka/base_controller.rb
|
187
|
+
- lib/karafka/base_responder.rb
|
188
|
+
- lib/karafka/cli.rb
|
189
|
+
- lib/karafka/cli/base.rb
|
190
|
+
- lib/karafka/cli/console.rb
|
191
|
+
- lib/karafka/cli/flow.rb
|
192
|
+
- lib/karafka/cli/info.rb
|
193
|
+
- lib/karafka/cli/install.rb
|
194
|
+
- lib/karafka/cli/server.rb
|
195
|
+
- lib/karafka/connection/config_adapter.rb
|
196
|
+
- lib/karafka/connection/consumer.rb
|
197
|
+
- lib/karafka/connection/listener.rb
|
198
|
+
- lib/karafka/connection/processor.rb
|
199
|
+
- lib/karafka/controllers/callbacks.rb
|
200
|
+
- lib/karafka/controllers/includer.rb
|
201
|
+
- lib/karafka/controllers/responders.rb
|
202
|
+
- lib/karafka/controllers/single_params.rb
|
203
|
+
- lib/karafka/errors.rb
|
204
|
+
- lib/karafka/fetcher.rb
|
205
|
+
- lib/karafka/helpers/class_matcher.rb
|
206
|
+
- lib/karafka/helpers/config_retriever.rb
|
207
|
+
- lib/karafka/helpers/multi_delegator.rb
|
208
|
+
- lib/karafka/loader.rb
|
209
|
+
- lib/karafka/logger.rb
|
210
|
+
- lib/karafka/monitor.rb
|
211
|
+
- lib/karafka/params/params.rb
|
212
|
+
- lib/karafka/params/params_batch.rb
|
213
|
+
- lib/karafka/parsers/json.rb
|
214
|
+
- lib/karafka/patches/dry_configurable.rb
|
215
|
+
- lib/karafka/patches/ruby_kafka.rb
|
216
|
+
- lib/karafka/persistence/consumer.rb
|
217
|
+
- lib/karafka/persistence/controller.rb
|
218
|
+
- lib/karafka/process.rb
|
219
|
+
- lib/karafka/responders/builder.rb
|
220
|
+
- lib/karafka/responders/topic.rb
|
221
|
+
- lib/karafka/routing/builder.rb
|
222
|
+
- lib/karafka/routing/consumer_group.rb
|
223
|
+
- lib/karafka/routing/consumer_mapper.rb
|
224
|
+
- lib/karafka/routing/proxy.rb
|
225
|
+
- lib/karafka/routing/router.rb
|
226
|
+
- lib/karafka/routing/topic.rb
|
227
|
+
- lib/karafka/routing/topic_mapper.rb
|
228
|
+
- lib/karafka/schemas/config.rb
|
229
|
+
- lib/karafka/schemas/consumer_group.rb
|
230
|
+
- lib/karafka/schemas/consumer_group_topic.rb
|
231
|
+
- lib/karafka/schemas/responder_usage.rb
|
232
|
+
- lib/karafka/schemas/server_cli_options.rb
|
233
|
+
- lib/karafka/server.rb
|
234
|
+
- lib/karafka/setup/config.rb
|
235
|
+
- lib/karafka/setup/configurators/base.rb
|
236
|
+
- lib/karafka/setup/configurators/water_drop.rb
|
237
|
+
- lib/karafka/status.rb
|
238
|
+
- lib/karafka/templates/application_controller.rb.example
|
239
|
+
- lib/karafka/templates/application_responder.rb.example
|
240
|
+
- lib/karafka/templates/karafka.rb.example
|
241
|
+
- lib/karafka/version.rb
|
242
|
+
- log/.gitkeep
|
243
|
+
homepage: https://github.com/karafka/karafka
|
244
|
+
licenses:
|
245
|
+
- MIT
|
246
|
+
metadata: {}
|
247
|
+
post_install_message:
|
248
|
+
rdoc_options: []
|
249
|
+
require_paths:
|
250
|
+
- lib
|
251
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
252
|
+
requirements:
|
253
|
+
- - ">="
|
254
|
+
- !ruby/object:Gem::Version
|
255
|
+
version: 2.3.0
|
256
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
257
|
+
requirements:
|
258
|
+
- - ">="
|
259
|
+
- !ruby/object:Gem::Version
|
260
|
+
version: '0'
|
261
|
+
requirements: []
|
262
|
+
rubyforge_project:
|
263
|
+
rubygems_version: 2.6.13
|
264
|
+
signing_key:
|
265
|
+
specification_version: 4
|
266
|
+
summary: Ruby based framework for working with Apache Kafka
|
267
|
+
test_files: []
|