Масштабирование соответствует потребителям Kafka - PullRequest
1 голос
/ 08 января 2020

У меня есть сценарий, в котором есть несколько тем Kafka (по одному разделу) и одна группа потребителей для использования записей. Я использую единого сопоставленного потребителя шаблона в группе потребителей, который соответствует всем темам и, следовательно, потребляет все записи во всех темах.

Теперь я хочу расширить это и сделать так, чтобы несколько потребителей (в одной группе потребителей) слушали все темы. Однако это, похоже, не работает, поскольку все записи потребляются только первым потребителем в группе, что делает других потребителей в группе бесполезными. Кроме того, я использую потребителей как отдельные потоки, используя ExecutorService.

. Как мне этого добиться? Ниже мой код:

Pattern pattern = Pattern.compile(topicPattern); consumer.subscribe(pattern);

Шаблон, отправленный в приведенном выше коде, таков, что он совпадает с именами всех тем, например.

Если названия тем sample_topic_1, sample_topic_2 et c, мы сопоставим их с sample_topic_*$.

1 Ответ

0 голосов
/ 08 января 2020

Подход, который вы описываете, должен работать с кодом, который вы разместили. Однако это может быть случай, когда недостаточно данных для более чем одного потребителя. Или, может быть, данные поступают в виде «пакетов», которые достаточно малы, чтобы поместиться в одну партию.

Даже если нагрузка в Kafka теоретически распределена между всеми потребителями одной и той же группы потребителей, на практике, если есть только данные для одной «партии», тогда первый потребитель мог бы захватить все данные, и больше никому ничего не останется. Это означает либо:

  • Вы не отправляете достаточно данных, чтобы их можно было распределить по всем потребителям (попробуйте отправить еще больше данных, чтобы проверить это), либо
  • У вас странный конфигурация, в которой сконфигурированными пакетами являются гиганти c, и / или свойство linger.ms настроено очень высоко, или
  • комбинация двух вышеперечисленных.

Я предлагаю попробовать сначала отправьте больше данных и посмотрите, решит ли это проблему. Если нет, попробуйте уменьшить до 1 потребителя, убедитесь, что он все еще работает. Затем просто добавьте еще одного потребителя в эту группу потребителей и посмотрите, не изменится ли его поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...