Потребитель не знает, отменить раздел - PullRequest
0 голосов
/ 14 июня 2019

Название темы: testTopic Всего сообщений в теме: 1 Раздел: 8 Название группы потребителей: Consumer1
Язык потребителей: Java с включенным прослушивателем разделов Инфраструктура: параллельная работа 4 jvms (это означает, что 4 потребителя работают с одинаковым именем группы)

проблема: когда я запускаю свой первый потребитель, вызываются методы обратного вызова Lister и делаются назначения разделов .. этот потребитель начал обрабатывать мои сообщения.

возьмем пример, этот потребитель держит сообщение MSG-1, и мой процессор обрабатывает сообщение (я намеренно поставил 20 тысяч секунд в качестве ожидания потока). Итак, не передали MSG-1 обратно в тему со смещением.

свойства потребителя session.timeout.ms = 15 тысячных секунд.

В то же время, потребитель 2 начал,

этот потребитель запустил, назначил раздел (правильно вызванные методы обратного вызова) и не использовал сообщения, потому что эти 2 сообщения удерживаются потребителем 1.

теперь, из-за превышения интервала сердцебиения потребителя, брокер посчитал, что потребитель-1 мертв, и переназначил раздел на потребителе-2 (все) Теперь вызовите метод, вызванный в потребителе-2 (назначенный и отозванный). В то же время время моего сеанса истекло, а сообщения msg-1 и msg-2 возвращаются к теме и выбираются для потребителя 2.

Теперь я обработал msg-1 && msg-2 два раза ... один раз от потребителя-1 и потребителя-2

Моя проблема здесь,

  1. Consumer-1 не вызывался с методом отмены вызова, вызванным разделом?
  2. после того, как мой спящий поток завершает (от потребителя -1), он пытается зафиксировать смещение с разделом ... мы получаем, что переопределение раздела выполнено ... вы не можете зафиксировать. это правильно, но как я могу получить метод обратного вызова в форме customer-1 ....
* +1025 * -Naresh.

1 Ответ

0 голосов
/ 16 июня 2019

Consumer-1 не вызывался с методом отмены вызова, отозванным разделом?

Потребитель может получить отозванный раздел обратно, только если он участвует в перебалансировании. Однако из-за истечения времени ожидания и выхода из группы он не участвует в перебалансировании, и брокер не отправляет какую-либо информацию потребителю. Следовательно, потребитель не знает, что разделы аннулированы (и, следовательно, нет обратного вызова).

после того, как мой спящий поток завершает (от потребителя -1), он пытается зафиксировать смещение с разделом ... мы получаем, что переопределение раздела выполнено ... вы не можете зафиксировать. это правильно

Не уверен, что вы подразумеваете под we are getting partition re-assignment is done: поскольку потребитель не участвует в перебалансировке, он все же считает, что владеет разделами. Следовательно, он пытается зафиксировать, и, как вы правильно сказали, ему (правильно) не разрешено фиксировать, поскольку он выпал из группы.

но как я могу получить метод обратного вызова в форме customer-1 ....

Вам необходимо повторно присоединиться к группе, позвонив poll() еще раз, чтобы вернуться в здоровое состояние.

Общий комментарий: Ваши настройки тайм-аута кажутся довольно низкими, и такие малые тайм-ауты на практике не рекомендуется. Я думаю, что будет трудно получить стабильную группу с таким небольшим временем ожидания, так как наиболее вероятно, что потребители будут регулярно сокращать время ожидания, выпадать из группы и должны снова присоединиться.

...