Настройка стратегии распределения сообщений между партициями#

Для producer репликатора доступны следующие стратегии:

  • kafka-default (используется по умолчанию) — использует класс org.apache.kafka.clients.producer.internals.DefaultPartitioner, который работает следующим образом:

    • если в сообщении присутствует ключ, то партиция вычисляется с помощью хэш-функции от ключа;

    • если ключ отсутствует — используется алгоритм sticky-round-robin, для каждой следующей пачки сообщений (record batch) партиция выбирается с помощью алгоритма round-robin;

  • exact — сообщение отправляется в ту же партицию, из которой было прочитано. Количество партиций топика в кластере-источнике не должно превышать количество партиций в топике кластера-приемника;

  • round-robin — использует класс org.apache.kafka.clients.producer.RoundRobinPartitioner, партиция для каждого следующего сообщения вычисляется с помощью алгоритма round-robin. В некоторых случаях сообщения могут распределяться неравномерно;

  • patched-round-robin — использует класс ru.sbt.ss.kafka.clients.producer.RoundRobinPartitioner, доработанную версию org.apache.kafka.clients.producer.RoundRobinPartitioner, в которой исправлены проблемы с неравномерным распределением сообщений.

Стратегия настраивается в конфигурации коннектора с помощью параметра partitioner.strategy.

Пример конфигурации коннектора для ручного запуска:

{
"name": "<наименование коннектора>", 
"config": 
    {
    "connector.class":"ru.sbt.esb.atm.sink.SbtKafkaSinkConnector", 
    ...
    "partitioner.strategy": "patched-round-robin"
    }
}

Пример конфигурации коннектора в конфигурационном дистрибутиве:

connectors:
- topics: REPLICATOR.LATENCY.INPUT
  output.topic: REPLICATOR.LATENCY.OUTPUT
  tasks: 1
  additional_config: |
    "partitioner.strategy": "patched-round-robin",