Kafka Streams: как я могу более равномерно распределить разделы из нескольких тем между потребляющими хостами, давая каждому свой собственный поток? - PullRequest
3 голосов
/ 10 июля 2020

У меня есть 3 темы кафка, содержащие довольно похожие типы данных. Данные представлены в трех темах, поскольку они генерируются из трех разных источников, и некоторые потребители предпочитают обрабатывать только часть из трех тем. Кроме того, темы имеют довольно разный масштаб: у одного 200 разделов, у другого 10, а у последнего 5.

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

При настройке производительности этого приложения мы обнаружили, что увеличение количества потоков было наиболее эффективным способом улучшить использование ресурсов и пропускную способность, поскольку оно позволяло параллельную обработку всех разделов назначить хосту. Мы попробовали 8, чтобы каждому хосту было назначено ~ 25 разделов из самого большого topi c, и это сработало довольно хорошо. Но, конечно, оставались еще 15 дополнительных разделов из двух других тем, из-за чего некоторым хостам было назначено 9 разделов. Фактически, в некоторых случаях одному хосту будет назначено 2 или более из этих 15 разделов (в разных потоках), а это означает, что хост может иметь 10+ разделов и только 8 потоков, оставляя некоторый параллелизм в таблице.

Если мы увеличим количество потоков (например, до 12), все станет еще хуже. Фактически, чаще всего один хост получает ВСЕ 15 (10 + 5) этих меньших тем плюс 12 разделов из более крупных топов c (всего 27 разделов). Несколько других хостов получат 0 разделов в этом сценарии.

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

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