Конфигурации, связанные с памятью Apache Storm 2.1.0

Мы находимся в процессе перехода на 2.1.0 с 1.1.x.

В нашей текущей настройке у нас есть следующие конфигурации памяти в storm.yaml

nimbus.childopts: -Xmx2048m
supervisor.childopts: -Xmx2048m
worker.childopts: -Xmx16384m

Я вижу много других конфигураций, связанных с памятью, в https://github.com/apache/storm/blob/master/conf/defaults.yaml, и у меня есть следующие вопросы по ним.

  1. в чем разница между worker.childopts и topology.worker.childopts? Если мы устанавливаем worker.childopts в storm.yaml, нужно ли переопределить topology.worker.childopts?
  2. Если мы устанавливаем worker.childopts в storm.yaml, нужно ли переопределить worker.heap.memory.mb? Есть ли связь между этими двумя конфигами?
  3. Должен ли topology.component.resources.onheap.memory.mb < worker.childopts? Как нам определить значение topology.component.resources.onheap.memory.mb?

Буду признателен, если кто-нибудь сможет объяснить эти моменты.

1 ответ

Недавно я сам возился с некоторыми из этих конфигураций, поэтому я делюсь своими мыслями здесь:

  1. против topology.worker.childopts- первый параметр задает потомки для всех воркеров. Второй параметр можно использовать для переопределения параметров для отдельных топологий, например, с помощью conf.put(Config.TOPOLOGY_WORKER_CHILDOPTS, "someJvmArgsHere");

  2. Значение по умолчанию для "-Xmx%HEAP-MEM%m -XX:+PrintGCDetails -Xloggc:artifacts/gc.log -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=artifacts/heapdump"согласно штормовому мерзавцу . Обратите внимание на первый аргумент, он включает шаблон замены %HEAP-MEM%. Этот шаблон заменяется тем, что вы настроили для worker.heap.memory.mb. Вы можете переопределить последний параметр из конфигурации топологии в Java, поэтому я предполагаю, что они строят его таким образом, чтобы иметь возможность быстро изменять кучу Java для отдельных топологий. Одна вещь, которую я заметил, заключается в том, что при переопределении шторм, кажется, использует значение переопределения только в том случае, если хотя бы один носик или болт настроен с .setMemoryLoad(int heapSize).

  3. это сильно зависит от индивидуальных потребностей топологии, но в целом, скорее всего, очень хорошая идея иметь меньший размер, чем то, что вы настроили для -Xmx в worker.childopts. Как найти хорошее значение зависит от тестирования и знаний о потреблении памяти компонентами вашей топологии. Например, у меня есть топология, которая получает кортежи от Redis и отправляет их. Если болты заняты, кортежи могут накапливаться в носике, поэтому я настраиваю его с некоторым запасом памяти. Однако я обычно не изменяю topology.component.resources.onheap.memory.mbа скорее использовать setMemoryLoad(int heapSize)метод компонента топологии, так как это позволяет задавать разные значения для отдельных компонентов топологии. Документы Storm по этой и смежным темам находятся здесь.

Другие вопросы по тегам