Как шторм обеспечивает ограничение памяти компонентов - PullRequest
0 голосов
/ 03 апреля 2019

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

1 Ответ

0 голосов
/ 04 апреля 2019

Я думаю, вы не понимаете, для чего предназначен setMemoryLoad.

SetMemoryLoad и аналогичные методы (например, setCPULoad) не определяют, сколько памяти или ЦП фактически выделено для компонента. Это подсказки для планировщика с поддержкой ресурсов https://storm.apache.org/releases/2.0.0-SNAPSHOT/Resource_Aware_Scheduler_overview.html.

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

Я полагаю, что у Storm есть возможность принудительно установить указанный вами предел ЦП / памяти, но вы должны включить cgroups для этого http://storm.apache.org/releases/2.0.0-SNAPSHOT/cgroups_in_storm.html. Я не очень знаком с этой частью кода, но он позволяет установить либо фиксированный лимит для каждой рабочей JVM, либо попытаться установить динамический лимит на основе назначения планировщика с учетом ресурсов.

Как я уже сказал, я не знаком с поддержкой cgroups, поэтому это может быть неправильно, но я думаю, что Storm может установить предел cgroup для рабочей JVM при загрузке этой JVM. Так, например, если RAS назначит вашему экземпляру один экземпляр boltA и один экземпляр boltB, суммарный лимит всего рабочего будет всего 512 + 1024 мегабайта.

...