Почему потоки потоков kafka умирают при изменении разделов исходной темы?Кто-нибудь может указать на чтение материала вокруг этого? - PullRequest
0 голосов
/ 12 февраля 2019

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

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

Я видел эту ссылку - https://issues.apache.org/jira/browse/KAFKA-6063?jql=project%20%3D%20KAFKA%20AND%20component%20%3D%20streams%20AND%20text%20~%20%22partition%22

Не удалось найти причину

https://github.com/apache/kafka/blob/fdc742b1ade420682911b3e336ae04827639cc04/streams/src/main/java/org/apache/kafka/streams/processor/internals/InternalTopicManager.java#L122

В основном, причина этого условия if.

1 Ответ

0 голосов
/ 12 февраля 2019

Входные разделы темы определяют уровень параллелизма, и если у вас есть операции с состоянием, такие как агрегация или объединение, состояние этих операций в sharded.Если у вас есть X входных разделов темы, вы получите X задач, каждая с одним осколком состояния.Кроме того, состояние поддерживается темой журнала изменений в Kafka с разделами X, и каждый шард использует ровно один из этих разделов.

Если вы измените количество разделов входной темы на X + 1, Kafka Streams попытается создатьЗадачи X + 1 с X хранят осколки, однако в существующей теме журнала изменений есть только X разделов.Таким образом, полное разбиение вашего приложения прерывается, и Kafka Streams не может гарантировать правильную обработку и, таким образом, отключается с ошибкой.

Также обратите внимание, что Kafka Streams предполагает, что входные данные разделены по ключу.Если вы измените количество разделов входных тем, разделение на основе хеш-функции изменится, что также может привести к неправильному выводу.

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

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