Настройка стратегии распределения сообщений между партициями#
Для 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",