karafka 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +7 -0
  2. data/.console_irbrc +13 -0
  3. data/.gitignore +68 -0
  4. data/.rspec +1 -0
  5. data/.ruby-gemset +1 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +18 -0
  8. data/CHANGELOG.md +415 -0
  9. data/CODE_OF_CONDUCT.md +46 -0
  10. data/CONTRIBUTING.md +41 -0
  11. data/Gemfile +11 -0
  12. data/Gemfile.lock +123 -0
  13. data/MIT-LICENCE +18 -0
  14. data/README.md +89 -0
  15. data/bin/karafka +19 -0
  16. data/config/errors.yml +6 -0
  17. data/karafka.gemspec +37 -0
  18. data/lib/karafka.rb +78 -0
  19. data/lib/karafka/app.rb +45 -0
  20. data/lib/karafka/attributes_map.rb +67 -0
  21. data/lib/karafka/backends/inline.rb +16 -0
  22. data/lib/karafka/base_consumer.rb +68 -0
  23. data/lib/karafka/base_responder.rb +204 -0
  24. data/lib/karafka/callbacks.rb +30 -0
  25. data/lib/karafka/callbacks/config.rb +22 -0
  26. data/lib/karafka/callbacks/dsl.rb +16 -0
  27. data/lib/karafka/cli.rb +54 -0
  28. data/lib/karafka/cli/base.rb +78 -0
  29. data/lib/karafka/cli/console.rb +29 -0
  30. data/lib/karafka/cli/flow.rb +46 -0
  31. data/lib/karafka/cli/info.rb +29 -0
  32. data/lib/karafka/cli/install.rb +42 -0
  33. data/lib/karafka/cli/server.rb +66 -0
  34. data/lib/karafka/connection/client.rb +117 -0
  35. data/lib/karafka/connection/config_adapter.rb +120 -0
  36. data/lib/karafka/connection/delegator.rb +46 -0
  37. data/lib/karafka/connection/listener.rb +60 -0
  38. data/lib/karafka/consumers/callbacks.rb +54 -0
  39. data/lib/karafka/consumers/includer.rb +51 -0
  40. data/lib/karafka/consumers/responders.rb +24 -0
  41. data/lib/karafka/consumers/single_params.rb +15 -0
  42. data/lib/karafka/errors.rb +50 -0
  43. data/lib/karafka/fetcher.rb +44 -0
  44. data/lib/karafka/helpers/class_matcher.rb +78 -0
  45. data/lib/karafka/helpers/config_retriever.rb +46 -0
  46. data/lib/karafka/helpers/multi_delegator.rb +33 -0
  47. data/lib/karafka/instrumentation/listener.rb +112 -0
  48. data/lib/karafka/instrumentation/logger.rb +55 -0
  49. data/lib/karafka/instrumentation/monitor.rb +64 -0
  50. data/lib/karafka/loader.rb +28 -0
  51. data/lib/karafka/params/dsl.rb +156 -0
  52. data/lib/karafka/params/params_batch.rb +46 -0
  53. data/lib/karafka/parsers/json.rb +38 -0
  54. data/lib/karafka/patches/dry_configurable.rb +35 -0
  55. data/lib/karafka/patches/ruby_kafka.rb +34 -0
  56. data/lib/karafka/persistence/client.rb +25 -0
  57. data/lib/karafka/persistence/consumer.rb +38 -0
  58. data/lib/karafka/persistence/topic.rb +29 -0
  59. data/lib/karafka/process.rb +64 -0
  60. data/lib/karafka/responders/builder.rb +36 -0
  61. data/lib/karafka/responders/topic.rb +57 -0
  62. data/lib/karafka/routing/builder.rb +61 -0
  63. data/lib/karafka/routing/consumer_group.rb +61 -0
  64. data/lib/karafka/routing/consumer_mapper.rb +34 -0
  65. data/lib/karafka/routing/proxy.rb +37 -0
  66. data/lib/karafka/routing/router.rb +29 -0
  67. data/lib/karafka/routing/topic.rb +60 -0
  68. data/lib/karafka/routing/topic_mapper.rb +55 -0
  69. data/lib/karafka/schemas/config.rb +24 -0
  70. data/lib/karafka/schemas/consumer_group.rb +77 -0
  71. data/lib/karafka/schemas/consumer_group_topic.rb +18 -0
  72. data/lib/karafka/schemas/responder_usage.rb +39 -0
  73. data/lib/karafka/schemas/server_cli_options.rb +43 -0
  74. data/lib/karafka/server.rb +94 -0
  75. data/lib/karafka/setup/config.rb +189 -0
  76. data/lib/karafka/setup/configurators/base.rb +29 -0
  77. data/lib/karafka/setup/configurators/params.rb +25 -0
  78. data/lib/karafka/setup/configurators/water_drop.rb +32 -0
  79. data/lib/karafka/setup/dsl.rb +22 -0
  80. data/lib/karafka/status.rb +25 -0
  81. data/lib/karafka/templates/application_consumer.rb.example +6 -0
  82. data/lib/karafka/templates/application_responder.rb.example +11 -0
  83. data/lib/karafka/templates/karafka.rb.example +54 -0
  84. data/lib/karafka/version.rb +7 -0
  85. data/log/.gitkeep +0 -0
  86. metadata +301 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 0bb0a1f72768ebf4bf720ebda57ebc26a0178275adabffd494b24e1612e9b38a
4
+ data.tar.gz: f586038a0498227e8a287cc173a23e77bb99b6cb8d453c39be55a220e2a0d361
5
+ SHA512:
6
+ metadata.gz: e2b862da6372bc91f76bc01c20eb21ccde9d61d67749ccce97eadd2f739484dbd68a149d08d6e275d94d95b6ce9610d86c2d01e85bb1841a80e048ed832810ac
7
+ data.tar.gz: 06fb89700e59f810ec984b54f0424cfdeb98c79e17b8629010f011e68edff5fa1e345576a7b28ed07aff440739ed11824016da6083601a92b8f83fcca68e576e
@@ -0,0 +1,13 @@
1
+ # irbrc for Karafka console
2
+ require 'karafka'
3
+ require Karafka.boot_file
4
+
5
+ IRB.conf[:AUTO_INDENT] = true
6
+ IRB.conf[:SAVE_HISTORY] = 1000
7
+ IRB.conf[:USE_READLINE] = true
8
+ IRB.conf[:HISTORY_FILE] = "#{Karafka::App.root}/.irb-history"
9
+ IRB.conf[:LOAD_MODULES] = [] unless IRB.conf.key?(:LOAD_MODULES)
10
+
11
+ unless IRB.conf[:LOAD_MODULES].include?('irb/completion')
12
+ IRB.conf[:LOAD_MODULES] << 'irb/completion'
13
+ end
@@ -0,0 +1,68 @@
1
+ # bundler state
2
+ /.bundle
3
+ /vendor/bundle/
4
+ /vendor/ruby/
5
+ /ruby/
6
+ app.god
7
+
8
+ # minimal Rails specific artifacts
9
+ db/*.sqlite3
10
+ /log/development.log
11
+ /log/production.log
12
+ /log/test.log
13
+ /tmp/*
14
+ *.gem
15
+ *.~
16
+
17
+ # various artifacts
18
+ **.war
19
+ *.rbc
20
+ *.sassc
21
+ .byebug_history
22
+ .redcar/
23
+ .capistrano/
24
+ .sass-cache
25
+ /config/god/sidekiq.rb
26
+ /config/puma.rb
27
+ /coverage.data
28
+ /coverage/
29
+ /doc/api/
30
+ /doc/app/
31
+ /doc/yard
32
+ /doc/features.html
33
+ /doc/specs.html
34
+ /spec/tmp/*
35
+ /cache
36
+ /capybara*
37
+ /capybara-*.html
38
+ /gems
39
+ /specifications
40
+ rerun.txt
41
+ pickle-email-*.html
42
+
43
+ # If you find yourself ignoring temporary files generated by your text editor
44
+ # or operating system, you probably want to add a global ignore instead:
45
+ # git config --global core.excludesfile ~/.gitignore_global
46
+ #
47
+ # Here are some files you may want to ignore globally:
48
+
49
+ # scm revert files
50
+ **.orig
51
+
52
+ # Mac finder artifacts
53
+ .DS_Store
54
+
55
+ # Netbeans project directory
56
+ /nbproject
57
+
58
+ # RubyMine project files
59
+ .idea
60
+
61
+ # Textmate project files
62
+ /*.tmproj
63
+
64
+ # vim artifacts
65
+ **.swp
66
+
67
+ # documentation
68
+ .yardoc
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --require spec_helper
@@ -0,0 +1 @@
1
+ karafka
@@ -0,0 +1 @@
1
+ 2.5.0
@@ -0,0 +1,18 @@
1
+ language: ruby
2
+ sudo: false
3
+ rvm:
4
+ - 2.3.0
5
+ - 2.3.1
6
+ - 2.3.2
7
+ - 2.3.3
8
+ - 2.3.4
9
+ - 2.4.0
10
+ - 2.4.1
11
+ - 2.4.2
12
+ - 2.5.0
13
+ - jruby-head
14
+ script: bundle exec rspec spec/
15
+ env:
16
+ global:
17
+ - JRUBY_OPTS='--debug'
18
+ install: bundle install --jobs=3 --retry=3
@@ -0,0 +1,415 @@
1
+ # Karafka framework changelog
2
+
3
+ ## 1.2.0
4
+ - Spec improvements
5
+ - #260 - Specs missing randomization
6
+ - #251 - Shutdown upon non responding (unreachable) cluster is not possible
7
+ - #258 - Investigate lowering requirements on activesupport
8
+ - #246 - Alias consumer#mark_as_consumed on controller
9
+ - #259 - Allow forcing key/partition key on responders
10
+ - #267 - Styling inconsistency
11
+ - #242 - Support setting the max bytes to fetch per request
12
+ - #247 - Support SCRAM once released
13
+ - #271 - Provide an after_init option to pass a configuration block
14
+ - #262 - Error in the monitor code for NewRelic
15
+ - #241 - Performance metrics
16
+ - #274 - Rename controllers to consumers
17
+ - #184 - Seek to
18
+ - #284 - Dynamic Params parent class
19
+ - #275 - ssl_ca_certs_from_system
20
+ - #296 - Instrument forceful exit with an error
21
+ - Replaced some of the activesupport parts with dry-inflector
22
+ - Lower ActiveSupport dependency
23
+ - Remove configurators in favor of the after_init block configurator
24
+ - Ruby 2.5.0 support
25
+ - Renamed Karafka::Connection::Processor to Karafka::Connection::Delegator to match incoming naming conventions
26
+ - Renamed Karafka::Connection::Consumer to Karafka::Connection::Client due to #274
27
+ - Removed HashWithIndifferentAccess in favor of a regular hash
28
+ - JSON parsing defaults now to string keys
29
+ - Lower memory usage due to less params data internal details
30
+ - Support multiple ```after_init``` blocks in favor of a single one
31
+ - Renamed ```received_at``` to ```receive_time``` to follow ruby-kafka and WaterDrop conventions
32
+ - Adjust internal setup to easier map Ruby-Kafka config changes
33
+ - System callbacks reorganization
34
+ - Added ```before_fetch_loop``` configuration block for early client usage (```#seek```, etc)
35
+ - Renamed ```after_fetched``` to ```after_fetch``` to normalize the naming convention
36
+ - Instrumentation on a connection delegator level
37
+ - Added ```params_batch#last``` method to retrieve last element after unparsing
38
+ - All params keys are now strings
39
+
40
+ ## 1.1.2
41
+ - #256 - Default kafka.seed_brokers configuration is created in invalid format
42
+
43
+ ## 1.1.1
44
+ - #253 - Allow providing a global per app parser in config settings
45
+
46
+ ## 1.1.0
47
+ - Gem bump
48
+ - Switch from Celluloid to native Thread management
49
+ - Improved shutdown process
50
+ - Introduced optional fetch callbacks and moved current the ```after_received``` there as well
51
+ - Karafka will raise Errors::InvalidPauseTimeout exception when trying to pause but timeout set to 0
52
+ - Allow float for timeouts and other time based second settings
53
+ - Renamed MessagesProcessor to Processor and MessagesConsumer to Consumer - we don't process and don't consumer anything else so it was pointless to keep this "namespace"
54
+ - #232 - Remove unused ActiveSupport require
55
+ - #214 - Expose consumer on a controller layer
56
+ - #193 - Process shutdown callbacks
57
+ - Fixed accessibility of ```#params_batch``` from the outside of the controller
58
+ - connection_pool config options are no longer required
59
+ - celluloid config options are no longer required
60
+ - ```#perform``` is now renamed to ```#consume``` with warning level on using the old one (deprecated)
61
+ - #235 - Rename perform to consume
62
+ - Upgrade to ruby-kafka 0.5
63
+ - Due to redesign of Waterdrop concurrency setting is no longer needed
64
+ - #236 - Manual offset management
65
+ - WaterDrop 1.0.0 support with async
66
+ - Renamed ```batch_consuming``` option to ```batch_fetching``` as it is not a consumption (with processing) but a process of fetching messages from Kafka. The messages is considered consumed, when it is processed.
67
+ - Renamed ```batch_processing``` to ```batch_consuming``` to resemble Kafka concept of consuming messages.
68
+ - Renamed ```after_received``` to ```after_fetched``` to normalize the naming conventions.
69
+ - Responders support the per topic ```async``` option.
70
+
71
+ ## 1.0.1
72
+ - #210 - LoadError: cannot load such file -- [...]/karafka.rb
73
+ - Ruby 2.4.2 as a default (+travis integration)
74
+ - JRuby upgrade
75
+ - Expanded persistence layer (moved to a namespace for easier future development)
76
+ - #213 - Misleading error when non-existing dependency is required
77
+ - #212 - Make params react to #topic, #partition, #offset
78
+ - #215 - Consumer group route dynamic options are ignored
79
+ - #217 - check RUBY_ENGINE constant if RUBY_VERSION is missing (#217)
80
+ - #218 - add configuration setting to control Celluloid's shutdown timeout
81
+ - Renamed Karafka::Routing::Mapper to Karafka::Routing::TopicMapper to match naming conventions
82
+ - #219 - Allow explicit consumer group names, without prefixes
83
+ - Fix to early removed pid upon shutdown of demonized process
84
+ - max_wait_time updated to match https://github.com/zendesk/ruby-kafka/issues/433
85
+ - #230 - Better uri validation for seed brokers (incompatibility as the kafka:// or kafka+ssl:// is required)
86
+ - Small internal docs fixes
87
+ - Dry::Validation::MissingMessageError: message for broker_schema? was not found
88
+ - #238 - warning: already initialized constant Karafka::Schemas::URI_SCHEMES
89
+
90
+ ## 1.0.0
91
+
92
+ ### Closed issues:
93
+
94
+ - #103 - Env for logger is loaded 2 early (on gem load not on app init)
95
+ - #142 - Possibility to better control Kafka consumers (consumer groups management)
96
+ - #150 - Add support for start_from_beginning on a per topic basis
97
+ - #154 - Support for min_bytes and max_wait_time on messages consuming
98
+ - #160 - Reorganize settings to better resemble ruby-kafka requirements
99
+ - #164 - If we decide to have configuration per topic, topic uniqueness should be removed
100
+ - #165 - Router validator
101
+ - #166 - Params and route reorganization (new API)
102
+ - #167 - Remove Sidekiq UI from Karafka
103
+ - #168 - Introduce unique IDs of routes
104
+ - #171 - Add kafka message metadata to params
105
+ - #176 - Transform Karafka::Connection::Consumer into a module
106
+ - #177 - Monitor not reacting when kafka killed with -9
107
+ - #175 - Allow single consumer to subscribe to multiple topics
108
+ - #178 - Remove parsing failover when cannot unparse data
109
+ - #174 - Extended config validation
110
+ - ~~#180 - Switch from JSON parser to yajl-ruby~~
111
+ - #181 - When responder is defined and not used due to ```respond_with``` not being triggered in the perform, it won't raise an exception.
112
+ - #188 - Rename name in config to client id
113
+ - #186 - Support ruby-kafka ```ssl_ca_cert_file_path``` config
114
+ - #189 - karafka console does not preserve history on exit
115
+ - #191 - Karafka 0.6.0rc1 does not work with jruby / now it does :-)
116
+ - Switch to multi json so everyone can use their favourite JSON parser
117
+ - Added jruby support in general and in Travis
118
+ - #196 - Topic mapper does not map topics when subscribing thanks to @webandtech
119
+ - #96 - Karafka server - possiblity to run it only for a certain topics
120
+ - ~~karafka worker cli option is removed (please use sidekiq directly)~~ - restored, bad idea
121
+ - (optional) pausing upon processing failures ```pause_timeout```
122
+ - Karafka console main process no longer intercepts irb errors
123
+ - Wiki updates
124
+ - #204 - Long running controllers
125
+ - Better internal API to handle multiple usage cases using ```Karafka::Controllers::Includer```
126
+ - #207 - Rename before_enqueued to after_received
127
+ - #147 - Deattach Karafka from Sidekiq by extracting Sidekiq backend
128
+
129
+ ### New features and improvements
130
+
131
+ - batch processing thanks to ```#batch_consuming``` flag and ```#params_batch``` on controllers
132
+ - ```#topic``` method on an controller instance to make a clear distinction in between params and route details
133
+ - Changed routing model (still compatible with 0.5) to allow better resources management
134
+ - Lower memory requirements due to object creation limitation (2-3 times less objects on each new message)
135
+ - Introduced the ```#batch_consuming``` config flag (config for #126) that can be set per each consumer_group
136
+ - Added support for partition, offset and partition key in the params hash
137
+ - ```name``` option in config renamed to ```client_id```
138
+ - Long running controllers with ```persistent``` flag on a topic config level, to make controller instances persistent between messages batches (single controller instance per topic per partition no per messages batch) - turned on by default
139
+
140
+ ### Incompatibilities
141
+
142
+ - Default boot file is renamed from app.rb to karafka.rb
143
+ - Removed worker glass as dependency (now and independent gem)
144
+ - ```kafka.hosts``` option renamed to ```kafka.seed_brokers``` - you don't need to provide all the hosts to work with Kafka
145
+ - ```start_from_beginning``` moved into kafka scope (```kafka.start_from_beginning```)
146
+ - Router no longer checks for route uniqueness - now you can define same routes for multiple kafkas and do a lot of crazy stuff, so it's your responsibility to check uniqueness
147
+ - Change in the way we identify topics in between Karafka and Sidekiq workers. If you upgrade, please make sure, all the jobs scheduled in Sidekiq are finished before the upgrade.
148
+ - ```batch_mode``` renamed to ```batch_fetching```
149
+ - Renamed content to value to better resemble ruby-kafka internal messages naming convention
150
+ - When having a responder with ```required``` topics and not using ```#respond_with``` at all, it will raise an exception
151
+ - Renamed ```inline_mode``` to ```inline_processing``` to resemble other settings conventions
152
+ - Renamed ```inline_processing``` to ```backend``` to reach 1.0 future compatibility
153
+ - Single controller **needs** to be used for a single topic consumption
154
+ - Renamed ```before_enqueue``` to ```after_received``` to better resemble internal logic, since for inline backend, there is no enqueue.
155
+ - Due to the level on which topic and controller are related (class level), the dynamic worker selection is no longer available.
156
+ - Renamed params #retrieve to params #retrieve! to better reflect what it does
157
+
158
+ ### Other changes
159
+ - PolishGeeksDevTools removed (in favour of Coditsu)
160
+ - Waaaaaay better code quality thanks to switching from dev tools to Coditsu
161
+ - Gem bump
162
+ - Cleaner internal API
163
+ - SRP
164
+ - Better settings proxying and management between ruby-kafka and karafka
165
+ - All internal validations are now powered by dry-validation
166
+ - Better naming conventions to reflect Kafka reality
167
+ - Removed Karafka::Connection::Message in favour of direct message details extraction from Kafka::FetchedMessage
168
+
169
+ ## 0.5.0.3
170
+ - #132 - When Kafka is gone, should reconnect after a time period
171
+ - #136 - new ruby-kafka version + other gem bumps
172
+ - ruby-kafka update
173
+ - #135 - NonMatchingRouteError - better error description in the code
174
+ - #140 - Move Capistrano Karafka to a different specific gem
175
+ - #110 - Add call method on a responder class to alias instance build and call
176
+ - #76 - Configs validator
177
+ - #138 - Possibility to have no worker class defined if inline_mode is being used
178
+ - #145 - Topic Mapper
179
+ - Ruby update to 2.4.1
180
+ - Gem bump x2
181
+ - #158 - Update docs section on heroku usage
182
+ - #150 - Add support for start_from_beginning on a per topic basis
183
+ - #148 - Lower Karafka Sidekiq dependency
184
+ - Allow karafka root to be specified from ENV
185
+ - Handle SIGTERM as a shutdown command for kafka server to support Heroku deployment
186
+
187
+ ## 0.5.0.2
188
+ - Gems update x3
189
+ - Default Ruby set to 2.3.3
190
+ - ~~Default Ruby set to 2.4.0~~
191
+ - Readme updates to match bug fixes and resolved issues
192
+ - #95 - Allow options into responder
193
+ - #98 - Use parser when responding on a topic
194
+ - #114 - Option to configure waterdrop connection pool timeout and concurrency
195
+ - #118 - Added dot in topic validation format
196
+ - #119 - add support for authentication using SSL
197
+ - #121 - JSON as a default for standalone responders usage
198
+ - #122 - Allow on capistrano role customization
199
+ - #125 - Add support to batch incoming messages
200
+ - #130 - start_from_beginning flag on routes and default
201
+ - #128 - Monitor caller_label not working with super on inheritance
202
+ - Renamed *inline* to *inline_mode* to stay consistent with flags that change the way karafka works (#125)
203
+ - Dry-configurable bump to 0.5 with fixed proc value evaluation on retrieve patch (internal change)
204
+
205
+ ## 0.5.0.1
206
+ - Fixed inconsistency in responders non-required topic definition. Now only required: false available
207
+ - #101 - Responders fail when multiple_usage true and required false
208
+ - fix error on startup from waterdrop #102
209
+ - Waterdrop 0.3.2.1 with kafka.hosts instead of kafka_hosts
210
+ - #105 - Karafka::Monitor#caller_label not working with inherited monitors
211
+ - #99 - Standalone mode (without Sidekiq)
212
+ - #97 - Buffer responders single topics before send (prevalidation)
213
+ - Better control over consumer thanks to additional config options
214
+ - #111 - Dynamic worker assignment based on the income params
215
+ - Long shutdown time fix
216
+
217
+ ## 0.5.0
218
+ - Removed Zookeeper totally as dependency
219
+ - Better group and partition rebalancing
220
+ - Automatic thread management (no need for tunning) - each topic is a separate actor/thread
221
+ - Moved from Poseidon into Ruby-Kafka
222
+ - No more max_concurrency setting
223
+ - After you define your App class and routes (and everything else) you need to add execute App.boot!
224
+ - Manual consuming is no longer available (no more karafka consume command)
225
+ - Karafka topics CLI is no longer available. No Zookeeper - no global topic discovery
226
+ - Dropped ZK as dependency
227
+ - karafka info command no longer prints details about Zookeeper
228
+ - Better shutdown
229
+ - No more autodiscovery via Zookeeper - instead, the whole cluster will be discovered directly from Kafka
230
+ - No more support for Kafka 0.8
231
+ - Support for Kafka 0.9
232
+ - No more need for ActorCluster, since now we have a single thread (and Kafka connection) per topic
233
+ - Ruby 2.2.* support dropped
234
+ - Using App name as a Kafka client_id
235
+ - Automatic Capistrano integration
236
+ - Responders support for handling better responses pipelining and better responses flow description and design (see README for more details)
237
+ - Gem bump
238
+ - Readme updates
239
+ - karafka flow CLI command for printing the application flow
240
+ - Some internal refactorings
241
+
242
+ ## 0.4.2
243
+ - #87 - Reconsume mode with crone for better Rails/Rack integration
244
+ - Moved Karafka server related stuff into separate Karafka::Server class
245
+ - Renamed Karafka::Runner into Karafka::Fetcher
246
+ - Gem bump
247
+ - Added chroot option to Zookeeper options
248
+ - Moved BROKERS_PATH into config from constant
249
+ - Added Karafka consume CLI action for a short running single consumption round
250
+ - Small fixes to close broken connections
251
+ - Readme updates
252
+
253
+ ## 0.4.1
254
+ - Explicit throw(:abort) required to halt before_enqueue (like in Rails 5)
255
+ - #61 - Autodiscover Kafka brokers based on Zookeeper data
256
+ - #63 - Graceful shutdown with current offset state during data processing
257
+ - #65 - Example of NewRelic monitor is outdated
258
+ - #71 - Setup should be executed after user code is loaded
259
+ - Gem bump x3
260
+ - Rubocop remarks
261
+ - worker_timeout config option has been removed. It now needs to be defined manually by the framework user because WorkerGlass::Timeout can be disabled and we cannot use Karafka settings on a class level to initialize user code stuff
262
+ - Moved setup logic under setup/Setup namespace
263
+ - Better defaults handling
264
+ - #75 - Kafka and Zookeeper options as a hash
265
+ - #82 - Karafka autodiscovery fails upon caching of configs
266
+ - #81 - Switch config management to dry configurable
267
+ - Version fix
268
+ - Dropped support for Ruby 2.1.*
269
+ - Ruby bump to 2.3.1
270
+
271
+ ## 0.4.0
272
+ - Added WaterDrop gem with default configuration
273
+ - Refactoring of config logic to simplify adding new dependencies that need to be configured based on #setup data
274
+ - Gem bump
275
+ - Readme updates
276
+ - Renamed cluster to actor_cluster for method names
277
+ - Replaced SidekiqGlass with generic WorkerGlass lib
278
+ - Application bootstrap in app.rb no longer required
279
+ - Karafka.boot needs to be executed after all the application files are loaded (template updated)
280
+ - Small loader refactor (no API changes)
281
+ - Ruby 2.3.0 support (default)
282
+ - No more rake tasks
283
+ - Karafka CLI instead of rake tasks
284
+ - Worker cli command allows passing additional options directly to Sidekiq
285
+ - Renamed concurrency to max_concurrency - it describes better what happens - Karafka will use this number of threads only when required
286
+ - Added wait_timeout that allows us to tune how long should we wait on a single socket connection (single topic) for new messages before going to next one (this applies to each thread separately)
287
+ - Rubocop remarks
288
+ - Removed Sinatra and Puma dependencies
289
+ - Karafka Cli internal reorganization
290
+ - Karafka Cli routes task
291
+ - #37 - warn log for failed parsing of a message
292
+ - #43 - wrong constant name
293
+ - #44 - Method name conflict
294
+ - #48 - Cannot load such file -- celluloid/current
295
+ - #46 - Loading application
296
+ - #45 - Set up monitor in config
297
+ - #47 - rake karafka:run uses app.rb only
298
+ - #53 - README update with Sinatra/Rails integration description
299
+ - #41 - New Routing engine
300
+ - #54 - Move Karafka::Workers::BaseWorker to Karafka::BaseWorker
301
+ - #55 - ApplicationController and ApplicationWorker
302
+
303
+ ## 0.3.2
304
+ - Karafka::Params::Params lazy load merge keys with string/symbol names priorities fix
305
+
306
+ ## 0.3.1
307
+ - Renamed Karafka::Monitor to Karafka::Process to represent a Karafka process wrapper
308
+ - Added Karafka::Monitoring that allows to add custom logging and monitoring with external libraries and systems
309
+ - Moved logging functionality into Karafka::Monitoring default monitoring
310
+ - Added possibility to provide own monitoring as long as in responds to #notice and #notice_error
311
+ - Standarized logging format for all logs
312
+
313
+ ## 0.3.0
314
+ - Switched from custom ParserError for each parser to general catching of Karafka::Errors::ParseError and its descendants
315
+ - Gem bump
316
+ - Fixed #32 - now when using custom workers that does not inherit from Karafka::BaseWorker perform method is not required. Using custom workers means that the logic that would normally lie under #perform, needs to be executed directly from the worker.
317
+ - Fixed #31 - Technically didn't fix because this is how Sidekiq is meant to work, but provided possibility to assign custom interchangers that allow to bypass JSON encoding issues by converting data that goes to Redis to a required format (and parsing it back when it is fetched)
318
+ - Added full parameters lazy load - content is no longer loaded during #perform_async if params are not used in before_enqueue
319
+ - No more namespaces for Redis by default (use separate DBs)
320
+
321
+ ## 0.1.21
322
+ - Sidekiq 4.0.1 bump
323
+ - Gem bump
324
+ - Added direct celluloid requirement to Karafka (removed from Sidekiq)
325
+
326
+ ## 0.1.19
327
+ - Internal call - schedule naming change
328
+ - Enqueue to perform_async naming in controller to follow Sidekiqs naming convention
329
+ - Gem bump
330
+
331
+ ## 0.1.18
332
+ - Changed Redis configuration options into a single hash that is directly passed to Redis setup for Sidekiq
333
+ - Added config.ru to provide a Sidekiq web UI (see README for more details)
334
+
335
+ ## 0.1.17
336
+ - Changed Karafka::Connection::Cluster tp Karafka::Connection::ActorCluster to distinguish between a single thread actor cluster for multiple topic connection and a future feature that will allow process clusterization.
337
+ - Add an ability to use user-defined parsers for a messages
338
+ - Lazy load params for before callbacks
339
+ - Automatic loading/initializng all workers classes during startup (so Sidekiq won't fail with unknown workers exception)
340
+ - Params are now private to controller
341
+ - Added bootstrap method to app.rb
342
+
343
+ ## 0.1.16
344
+ - Cluster level error catching for all exceptions so actor is not killer
345
+ - Cluster level error logging
346
+ - Listener refactoring (QueueConsumer extracted)
347
+ - Karafka::Connection::QueueConsumer to wrap around fetching logic - technically we could replace Kafka with any other messaging engine as long as we preserve the same API
348
+ - Added debug env for debugging purpose in applications
349
+
350
+ ## 0.1.15
351
+ - Fixed max_wait_ms vs socket_timeout_ms issue
352
+ - Fixed closing queue connection after Poseidon::Errors::ProtocolError failure
353
+ - Fixed wrong logging file selection based on env
354
+ - Extracted Karafka::Connection::QueueConsumer object to wrap around queue connection
355
+
356
+ ## 0.1.14
357
+ - Rake tasks for listing all the topics on Kafka server (rake kafka:topics)
358
+
359
+ ## 0.1.13
360
+ - Ability to assign custom workers and use them bypassing Karafka::BaseWorker (or its descendants)
361
+ - Gem bump
362
+
363
+ ## 0.1.12
364
+ - All internal errors went to Karafka::Errors namespace
365
+
366
+ ## 0.1.11
367
+ - Rescuing all the "before Sidekiq" processing so errors won't affect other incoming messages
368
+ - Fixed dying actors after connection error
369
+ - Added a new app status - "initializing"
370
+ - Karafka::Status model cleanup
371
+
372
+ ## 0.1.10
373
+ - Added possibility to specify redis namespace in configuration (failover to app name)
374
+ - Renamed redis_host to redis_url in configuration
375
+
376
+ ## 0.1.9
377
+ - Added worker logger
378
+
379
+ ## 0.1.8
380
+ - Droped local env suppot in favour of [Envlogic](https://github.com/karafka/envlogic) - no changes in API
381
+
382
+ ## 0.1.7
383
+ - Karafka option for Redis hosts (not localhost only)
384
+
385
+ ## 0.1.6
386
+ - Added better concurency by clusterization of listeners
387
+ - Added graceful shutdown
388
+ - Added concurency that allows to handle bigger applications with celluloid
389
+ - Karafka controllers no longer require group to be defined (created based on the topic and app name)
390
+ - Karafka controllers no longer require topic to be defined (created based on the controller name)
391
+ - Readme updates
392
+
393
+ ## 0.1.5
394
+ - Celluloid support for listeners
395
+ - Multi target logging (STDOUT and file)
396
+
397
+ ## 0.1.4
398
+ - Renamed events to messages to follow Apache Kafka naming convention
399
+
400
+ ## 0.1.3
401
+ - Karafka::App.logger moved to Karafka.logger
402
+ - README updates (Usage section was added)
403
+
404
+ ## 0.1.2
405
+ - Logging to log/environment.log
406
+ - Karafka::Runner
407
+
408
+ ## 0.1.1
409
+ - README updates
410
+ - Raketasks updates
411
+ - Rake installation task
412
+ - Changelog file added
413
+
414
+ ## 0.1.0
415
+ - Initial framework code