Java堆空间 - 内存不足错误 - 使用SASL_SSL的Kafka Broker

6
当我在Kafka经纪人中使用以下“/usr/bin/kafka-delete-records”命令,并使用PLAIN_TEXT端口9092时,该命令可以正常使用。但是,当我使用SASL_SSL端口9094时,该命令会抛出以下错误。有没有人知道如何使用带有SASL_SSL的Kafka经纪人端口9094的解决方案?
$ssh **** ****@<IP address> /usr/bin/kafka-delete-records --bootstrap-server localhost:9094 --offset-json-file /kafka/records.json`

[2019-10-14 04:15:49,891] ERROR Uncaught exception in thread 'kafka-admin-client-thread | adminclient-1': (org.apache.kafka.common.utils.KafkaThread)

java.lang.OutOfMemoryError: Java heap space
    at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:57)
    at java.nio.ByteBuffer.allocate(ByteBuffer.java:335)
    at org.apache.kafka.common.memory.MemoryPool$1.tryAllocate(MemoryPool.java:30)
    at org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:112)
    at org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:390)
    at org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:351)
    at org.apache.kafka.common.network.Selector.attemptRead(Selector.java:609)
    at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:541)
    at org.apache.kafka.common.network.Selector.poll(Selector.java:467)
    at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:535)
    at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.run(KafkaAdminClient.java:1125)
    at java.lang.Thread.run(Thread.java:748)
Executing records delete operation
Records delete operation completed:

注意:-Xmx设置为8GB,服务器总内存为16GB

请检查以下当前堆值:

$ ps -ef | grep kafka
cp-kafka 11419     1  3 10:07 ?        00:05:27 java -Xms8g -Xmx8g  -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35  ........ io.confluent.support.metrics.SupportedKafka /etc/kafka/server.properties

这个错误信息意味着你的应用程序所部署的JVM内存不足。你应该尝试搜索一下:https://dev59.com/zXVD5IYBdhLWcg3wQZQg?r=SearchResults&s=1|257.1170 - Repoker
JVM已分配8 GB内存,并且如上所述,它使用9092端口运行。 - Rajkumar Selvaraj
@ASR 你有什么想法为什么它在9092端口上运行? - Rajkumar Selvaraj
-Xmx被设置为8GB,服务器的总内存为16GB。 - Rajkumar Selvaraj
它不应该与任何特定端口相关,但我在想如果SASL配置正在引用其他配置。grep进程并检查新的-Xmx是否反映在运行的kafka进程中。 - UserASR
显示剩余3条评论
2个回答

7
很可能,OOM异常只是一个转移注意力的手段,请参见JIRA KAFKA-4493。而真正的问题是SASL-SSL连接,您的客户端无法正确地建立连接。在客户端上启用SSL调试,并从那里继续:
$ export KAFKA_OPTS="-Djavax.net.debug=handshake"
$ /usr/bin/kafka-delete-records ...

2
在我们的情况下,这通常发生在我们忘记添加凭据或使用错误凭据时。这非常具有误导性。 - daniu
@daniu 很好的观点。我假设 OP 正在使用 kerberos 缓存登录,但也许他只是省略了他的 jaas.conf 以避免负担过重的问题。 - mazaneicha

0
OOM java heap-space异常可能有多种原因。在我的情况下(AWS MSK kafka - IAM身份验证保护),这是由于在运行kafka-console-producer.sh脚本时缺少client.properties文件导致的。--command-config //client.properties。在这里查看youtube.com/watch?v=r12HYxWAJLo&t=477s。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接