Auto reload of code changes in development
Karafka supports auto-reload of code changes for Ruby on Rails, similar to Puma or Sidekiq.
Due to consumers persistence in Karafka (long-living consumer instances), in order to make it work, you need to turn it on yourself by setting a consumer_persistence
configuration option in the karafka.rb
file to false
in the development mode:
class KarafkaApp < Karafka::App
setup do |config|
config.kafka = { 'bootstrap.servers': '127.0.0.1:9092' }
config.client_id = 'example_app'
config.concurrency = 2
# Recreate consumers with each batch. This will allow Rails code reload to work in the
# development mode. Otherwise Karafka process would not be aware of code changes
config.consumer_persistence = !Rails.env.development?
end
end
Your code changes will be applied after processing of current messages batch.
Keep in mind, though, that there are a couple of limitations to it:
- Changes in the routing are not reflected. This would require reconnections and would drastically complicate reloading.
- Any background work you run outside the Karafka framework but within the process might not be caught in the reloading.
- If you use in-memory consumer data buffering that spans multiple batches, it won't work as code reload means re-initializing consumer instances. In cases like that, you will be better off not using the reload mode.