Use Kafka REST Proxy id to subscribe to the correct instance

When using a Kafka REST Proxy with multiple instances behind a
workload balancer, the consumers are allocated on one of the
allocated instances. The Kafka REST client needs to understand
which one is the instance that the client should talk to.

For deployments that can use workload balancers with sticky
sessions, there isn't any logic needed on the client side, because
the cookies allocated and stored on the client would do the job.
However, when using a standard K8s deployment[1], the sticky
session allocation isn't an option and any of the incoming
traffic may reach any of the pods.

Kafka REST Proxy allows with this change to specify the REST_PROXY_ID
with the placeholder ${rest_proxy_id} in the API URL, to help
redirecting the calls to the correct instance.

Example:
[plugin "events-kafka"]
  restApiUri = http://kafka-rest:8080/${kafka_rest_id}

[1] https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

Change-Id: I396c3bc759ee05547e8c16cb4806b4fea63b833c
11 files changed
tree: eb05a887290ebc288a24cf4e1ff76dde44d37c86
  1. src/
  2. BUILD
  3. external_plugin_deps.bzl
  4. Jenkinsfile
  5. LICENSE
  6. README.md
README.md

Kafka: Gerrit event producer for Apache Kafka

Build Status

Synopsis

This plugins allows to define a distributed stream of events published by Gerrit.

Events can be anything, from the traditional stream events to the Gerrit metrics.

This plugin requires Gerrit 2.13 or laster.

Environments

  • linux
  • java-1.8
  • Bazel

Build

Kafka plugin can be build as a regular ‘in-tree’ plugin. That means that is required to clone a Gerrit source tree first and then to have the Kafka plugin source directory into the /plugins path. Additionally, the plugins/external_plugin_deps.bzl file needs to be updated to match the Kafka plugin one.

git clone --recursive https://gerrit.googlesource.com/gerrit
git clone https://gerrit.googlesource.com/plugins/events-kafka gerrit/plugins/events-kafka
cd gerrit
rm plugins/external_plugin_deps.bzl
ln -s ./events-kafka/external_plugin_deps.bzl plugins/.

To build the events-kafka plugins, issue the command from the Gerrit source path:

bazel build plugins/events-kafka

The output is created in

bazel-genfiles/plugins/events-kafka/events-kafka.jar

Minimum Configuration

Assuming a running Kafka broker on the same Gerrit host, add the following settings to gerrit.config:

  [plugin "events-kafka"]
    bootstrapServers = localhost:9092