Как динамически добавлять потребителей в группу потребителей кафка - PullRequest
0 голосов
/ 05 марта 2020

Как я должен знать, когда мне нужно масштабировать потребителя в группе потребителей. Каковы триггеры для потребителей, чтобы масштабироваться, когда есть быстрый производитель?

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

На самом деле автоматическое масштабирование не очень хорошая идея, поскольку в Kafka порядок сообщений в разделе гарантирован.

Из документов Kafka:

  • Сообщения, отправленные производителем на определенный раздел topi c будет добавлен в порядке их отправки. То есть, если запись M1 отправляется
    тем же производителем, что и запись M2, и M1 отправляется первым, тогда M1
    будет иметь более низкое смещение, чем M2, и появится в журнале раньше.
  • Экземпляр потребителя видит записи в том порядке, в котором они хранятся в журнале.

Если вы добавите больше разделов и больше потребителей относительно количества разделов, то вы не сможете выполнить гарантию заказа. сообщений.

Предположим, что у вас есть 10 разделов и ваш номер ключа равен 102, тогда это сообщение будет отправлено в раздел: 102 % 10 = 2

Но если вы увеличите количество разделов до 15, например, тогда сообщения с одним и тем же ключом (102) будут отправляться в другой раздел: 102 % 15 = 12

. Как вы видите, при таком подходе невозможно гарантировать порядок сообщений с одинаковыми ключами.

Примечание. Кстати, по умолчанию Кафка использует алгоритм murmur2(record.key())) % num partitions. Вышеприведенные расчеты являются лишь примером.

0 голосов
/ 05 марта 2020

В Kafka при создании топи c необходимо указать количество разделов и коэффициент репликации .

Допустим, существует одна топи c называется TEST с 10 разделами, для параллельного потребления данных необходимо создать группу потребителей с 10 потребителями, где каждый потребитель будет потреблять данные из соответствующего раздела.

Вот здесь подвох, если топи c имеет 10 разделов , а группа потребителей имеет 12 потребителей , то два потребителя остаются бездействующими до тех пор, пока один из потребителей не умрет.

если топи c имеет 10 разделов, а группа потребителей имеет 8 потребителей , тогда 6 потребителей будут использовать данные из 6 разделов (один потребитель-> один раздел) , тогда как оставшиеся два потребителя будут нести ответственность за использование данных из двух разделов (один потребитель-> 2 раздела). это означает, что последние два потребителя потребляют данные из четырех разделов .

Следовательно, во-первых, вам нужно определить количество разделов для вашей kafka topi c, больше разделов означает больше параллелизма.

всякий раз, когда какой-либо новый потребитель добавляется или удаляется в группу потребителей перебазирование выполняется kafka.

...