Capistrano Karafka

Deprecation notice

This package has been deprecated. It will not work with Karafka 2.0 or newer.

There's a great explanation done by Mike Perham that I want to quote:

I've noted for years how modern services should be managed with a proper init system. Managing services manually is more error-prone, let your operating system do it for you. systemd, upstart, and foreman are three options. See the Deployment wiki page for the latest details.

Here you can find more extensive explanation on the reasoning behind this decision.

Please refer to this section of the Karafka Wiki for an explanation on how to use systemd with Karafka.

Installation

Add this line to your application Gemfile:

  gem 'capistrano-karafka'

or:

  gem 'capistrano-karafka' , group: :development

And then execute:

  $ bundle

Usage

In your Capfile

require 'capistrano/karafka'
install_plugin Capistrano::Karafka

Take a look at the set_defaults method for options you can set. For example, to specify a different pidfile than default:

set :karafka_pid, ->{ File.join(shared_path, 'tmp', 'pids', 'karafka.pid') }

Warning: In order to make capistrano-karafka work with multiple processes, pidfile needs to end with .pid.

Multiple processes

You can configure Karafka to start with multiple processes. Just set the proper amount in karafka_processes.

set :karafka_processes, 4

Different number of processes per host

You can configure how many processes you want to run on each host in the following way:

set :karafka_role, %i[karafka_small karafka_big]
set :karafka_small_processes, 1
set :karafka_big_processes, 4
server 'example-small.com', roles: %i[karafka_small]
server 'example-big.com', roles: %i[karafka_big]

Different active consumer groups per host and process

You can also easily start Karafka with a limited set of consumer groups running per each process for a given host:

set :karafka_role, %i[karafka_small karafka_big]

set :karafka_small_processes, 1
set :karafka_small_consumer_groups, %w[
  group_a
]

set :karafka_big_processes, 4
set :karafka_small_consumer_groups, [
  'group_a group_b',
  'group_c group_d',
  'group_e',
  'group_f'
]

server 'example-small.com', roles: %i[karafka_small]
server 'example-big.com', roles: %i[karafka_big]

By default, capistrano-karafka will start Karafka processes without limiting consumer groups, which means that each process will be running all of them.

References

Note on contributions

First, thank you for considering contributing to the Karafka ecosystem! It's people like you that make the open source community such a great community!

Each pull request must pass all the RSpec specs, integration tests and meet our quality requirements.

Fork it, update and wait for the Github Actions results.