брокер кафки через некоторое время стал неудачным - PullRequest
0 голосов
/ 11 мая 2018

у нас есть кластер hadoop версии 2.6.4 с графическим интерфейсом ambari в нашем кластере, у нас есть 3 машины kafka, и они являются автономными машинами, в то время как 3 сервера zookeper установлены на других машинах - master01 / 02/03

одна изна машине кафки мы видели странную проблему, в то время как другие машины кафки не имеют этой проблемы

проблема в том, что когда мы запускаем брокера кафки через пару минут, он выключается

вот журналы:

из kafka.err

Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "ThrottledRequestReaper-Fetch"

Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "ExpirationReaper-1002"

Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "kafka-network-thread-1002-PLAINTEXT-2"
Exception in thread "ExpirationReaper-1002" Exception in thread "ExpirationReaper-1002" java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space

Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "ExpirationReaper-1002"
Exception in thread "metrics-meter-tick-thread-2" java.lang.OutOfMemoryError: Java heap space
Exception in thread "metrics-meter-tick-thread-3" java.lang.OutOfMemoryError: Java heap space
Exception in thread "metrics-meter-tick-thread-4" java.lang.OutOfMemoryError: Java heap space
Exception in thread "metrics-meter-tick-thread-5" java.lang.OutOfMemoryError: Java heap space

Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main-SendThread(master02.sys87.com:2181)"
Exception in thread "metrics-meter-tick-thread-6" java.lang.OutOfMemoryError: Java heap space
Exception in thread "metrics-meter-tick-thread-1" java.lang.OutOfMemoryError: Java heap space
Exception in thread "metrics-meter-tick-thread-7" java.lang.OutOfMemoryError: Java heap space
Exception in thread "metrics-meter-tick-thread-9" java.lang.OutOfMemoryError: Java heap space
Exception in thread "metrics-meter-tick-thread-10" java.lang.OutOfMemoryError: Java heap space
Exception in thread "metrics-meter-tick-thread-11" java.lang.OutOfMemoryError: Java heap space
Exception in thread "metrics-meter-tick-thread-1" java.lang.OutOfMemoryError: Java heap space

из чтения журнала выглядит так: «выделено пространство под кучу» на машине kafka

любой совет, как решить эту проблемудля этого?

секунда

как мы можем объяснить, что эта проблема на одной машине кафки, а на двух других у нас этой проблемы нет?это логично?

1 Ответ

0 голосов
/ 11 мая 2018

У вас есть OutOfMemoryError, что означает, что в какой-то момент экземпляру Kafka нужно было выделить больше памяти, обнаружил, что либо нет физической памяти, либо он достиг предела, установленного в JVM (обратите внимание, что Kafka написан на Java / Scala, поэтому в запускается в опциях JVM, называемых сборщиком мусора, чтобы освободить часть памяти, но не может освободить ее достаточно.

Почему это могло произойти? Есть несколько возможных причин.

  • Ошибка в коде Kafka, из-за которой неиспользуемая память не освобождается
  • Большая нагрузка, с которой не может справиться нынешняя машина
  • Неправильное использование или настройка. Например, вы настроили поток, подключенный к нему, но не читаете. Или читать слишком медленно. Отставание увеличивается до тех пор, пока не заполнит всю вашу память
  • Слишком строгие ограничения памяти для экземпляра Kafka. Чтобы он занял больше памяти, запустите bash export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" (попробуйте найти рабочее значение). Более подробно здесь: https://stackoverflow.com/a/36649296/78569
  • Конфликт между JVM options и cgroups конфигурацией. Например. Вы устанавливаете -Xmx2G, но только 1G в cgoups (memory.limit_in_bytes).
  • Использование / настройка докера (который использует lxc, который использует cgroups) или другого инструмента виртуализации / контейнеризации неправильно. Или даже правильно - я слышал, что есть некоторые недоразумения между опциями JVM и ограничениями cgroups, которые исправлены только в бета-версиях Java.

    Это не полный список, а начало, чтобы выяснить, в чем заключается ваша проблема.

EDIT
Если вы не видите явного недостатка в конфигурации и поведении брокера, вы можете проанализировать дамп процесса во время сбоя, чтобы увидеть, куда идут все воспоминания. Для этого добавьте -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=... к опциям JVM. Затем вы можете загрузить этот дамп в некоторый анализатор, такой как HeapWalker, и искать необычно большое количество / размер объектов.

...