卡夫卡经纪人在一段时间后失败了
kafka broker became failed after some time
我们有带有 ambari GUI 的 hadoop 集群版本 2.6.4
在我们的集群中,我们有 3 台 kafka 机器,它们是独立机器,而 3 台 zookeper 服务器安装在其他机器上 - master01/02/03
其中一台 kafka 机器出现了一个奇怪的问题,而其他 kafka 机器没有这个问题
问题是 - 当我们在几分钟后启动 kafka 代理时,它出现故障
这是日志:
来自 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
从日志的读取来看,看起来这是 - "heap space allocated" 在 kafka 机器上
任何建议解决这个问题的方法是什么?
秒
我们如何解释这个问题出现在其中一台 kafka 机器上,而另外两台我们没有这个问题?符合逻辑吗?
你有一个OutOfMemoryError,这意味着在某个时候Kafka实例需要分配更多内存,发现没有可用的物理内存或者它达到了JVM中设置的限制(注意Kafka是写在Java/Scala,因此在 运行s in a JVM) 选项中,调用垃圾收集器来释放一些内存,但无法释放足够的内存。
为什么会发生?有多种可能的原因。
Kafka 代码中的一个错误,阻止释放未使用的内存
当前机器无法处理的大量负载
使用或配置不当。例如,您设置了一个流,连接到它,但不读取。或者读得太慢。待办事项不断增加,直到填满你的整个记忆
Kafka 实例的内存限额太严格。让它在 bash export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
中占用更多内存 运行 (尝试找到一个工作值)。此处有更多详细信息:
JVM options
和 cgroups
配置之间存在冲突。例如。您设置了 -Xmx2G 但 cgoups 中只有 1G (memory.limit_in_bytes).
Using/configuring docker(使用 lxc,使用 cgroups)或其他 virtualization/containerization 工具不正确。或者甚至正确 - 我听说 JVM 选项和 cgroups 限制之间存在一些误解,这些限制仅在 Java.
的 beta 版本中得到修复
这不是完整列表,而是探索问题所在的开始。
编辑
如果您在代理的配置和行为中没有发现明显的缺陷,您可以在崩溃时分析进程转储以查看所有内存去了哪里。为此,将 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=...
添加到 JVM 选项。然后你可以将这个转储加载到像 HeapWalker 这样的分析器中,并寻找异常大的 number/size 对象。
我们有带有 ambari GUI 的 hadoop 集群版本 2.6.4 在我们的集群中,我们有 3 台 kafka 机器,它们是独立机器,而 3 台 zookeper 服务器安装在其他机器上 - master01/02/03
其中一台 kafka 机器出现了一个奇怪的问题,而其他 kafka 机器没有这个问题
问题是 - 当我们在几分钟后启动 kafka 代理时,它出现故障
这是日志:
来自 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
从日志的读取来看,看起来这是 - "heap space allocated" 在 kafka 机器上
任何建议解决这个问题的方法是什么?
秒
我们如何解释这个问题出现在其中一台 kafka 机器上,而另外两台我们没有这个问题?符合逻辑吗?
你有一个OutOfMemoryError,这意味着在某个时候Kafka实例需要分配更多内存,发现没有可用的物理内存或者它达到了JVM中设置的限制(注意Kafka是写在Java/Scala,因此在 运行s in a JVM) 选项中,调用垃圾收集器来释放一些内存,但无法释放足够的内存。
为什么会发生?有多种可能的原因。
Kafka 代码中的一个错误,阻止释放未使用的内存
当前机器无法处理的大量负载
使用或配置不当。例如,您设置了一个流,连接到它,但不读取。或者读得太慢。待办事项不断增加,直到填满你的整个记忆
Kafka 实例的内存限额太严格。让它在 bash
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
中占用更多内存 运行 (尝试找到一个工作值)。此处有更多详细信息:JVM options
和cgroups
配置之间存在冲突。例如。您设置了 -Xmx2G 但 cgoups 中只有 1G (memory.limit_in_bytes).Using/configuring docker(使用 lxc,使用 cgroups)或其他 virtualization/containerization 工具不正确。或者甚至正确 - 我听说 JVM 选项和 cgroups 限制之间存在一些误解,这些限制仅在 Java.
的 beta 版本中得到修复这不是完整列表,而是探索问题所在的开始。
编辑
如果您在代理的配置和行为中没有发现明显的缺陷,您可以在崩溃时分析进程转储以查看所有内存去了哪里。为此,将 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=...
添加到 JVM 选项。然后你可以将这个转储加载到像 HeapWalker 这样的分析器中,并寻找异常大的 number/size 对象。