【问题标题】:kafka broker became failed after some time一段时间后,kafka经纪人失败了
【发布时间】:2018-10-21 16:24:07
【问题描述】:

我们有带有 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

从日志的读取来看,这是 - kafka 机器上的“堆空间分配”

有什么建议可以解决这个问题吗?

我们如何解释这个问题是在一台卡夫卡机器上,而另外两台我们没有这个问题?合乎逻辑吗?

【问题讨论】:

    标签: java apache-kafka ambari


    【解决方案1】:

    你有一个 OutOfMemoryError,这意味着在某些时候 Kafka 实例需要分配更多内存,发现要么没有可用的物理内存,要么达到了 JVM 中设置的限制(注意 Kafka 是用 Java/Scala 编写的,所以在在 JVM 中运行)选项,称为垃圾收集器以释放一些内存,但无法释放足够的内存。

    为什么会发生?有多种可能的原因。

    • Kafka 代码中的一个错误,导致未使用的内存无法释放

    • 当前机器无法处理的大量负载

    • 使用或配置不当。例如,您设置了一个流,连接到它,但不读取。或者读得太慢。积压会不断增长,直到填满你的全部记忆

    • Kafka 实例的内存限制太严格。为了让它在 bash export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" 中运行更多内存(尝试找到一个工作值)。更多细节在这里:https://stackoverflow.com/a/36649296/78569

    • JVM optionscgroups 配置之间的冲突。例如。你设置了 -Xmx2G 但在 cgoups (memory.limit_in_bytes) 中只有 1G。

    • 不正确地使用/配置 docker(使用 lxc 并使用 cgroups)或其他虚拟化/容器化工具。甚至是正确的 - 我听说 JVM 选项和 cgroups 限制之间存在一些误解,这些限制仅在 Java 的 beta 版本中得到修复。

      这不是一个完整的列表,而是一个开始探索您的问题所在。

    编辑
    如果您在代理的配置和行为中没有发现明显的缺陷,您可以在崩溃时分析进程转储以查看所有内存的去向。为此,请将 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=... 添加到 JVM 选项中。然后,您可以将此转储加载到诸如 HeapWalker 之类的分析器中,并查找异常数量/大小的对象。

    【讨论】:

    • @Lmaskar ,文件中的默认值 - /usr/hdp/2.6.4.0-91/kafka/bin/kafka-server-start.sh 是 KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" ,所以这样做您建议将它们增加到例如 KAFKA_HEAP_OPTS="-Xmx5G -Xms5G" ?
    • 是的,尝试增加内存限额是一个好的开始。看看你能放多少。但是注意,java进程不仅仅是堆,所以如果你只有6G就不要设置6G。如果增加内存没有帮助,那么您的配置有问题,请探索其他选项。如果某些话题变得不受控制,我会采取的下一步行动是太小心了。
    • Lmaskar,非常感谢,真的有助于更好地理解事情,我们在每台 kafka 256G 上都有非常强大的机器,所以我们可以放心地增加它,第二个重点,我们昨天重新启动机器,但这次重启无济于事,一段时间后卡夫卡经纪人失败了,第二关于你所说的“话题变得不受控制”你能建议如何验证这一点吗?你的意思是观察或跟踪 /var/kafka/kafka-logs/ 下的主题大小?
    • 是的,主题大小和其他一些指标,例如 kafka.network:type=RequestChannel,name=RequestQueueSize,可能很多请求的速度比它们的服务速度要快,并且在达到内存限制之前排队。
    • 我用另一种分析问题的方法更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 2017-07-05
    • 2022-11-29
    • 2018-02-19
    • 1970-01-01
    • 2022-08-23
    相关资源
    最近更新 更多