Java Kafka Connect堆空间不足

Java Kafka Connect堆空间不足,java,apache-kafka,jvm,apache-kafka-connect,Java,Apache Kafka,Jvm,Apache Kafka Connect,启动Kafka Connect(Connect standalone)后,我的任务在启动以下各项后立即失败: 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.co

启动Kafka Connect(
Connect standalone
)后,我的任务在启动以下各项后立即失败:

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.network.NetworkReceive.readFromReadableChannel(NetworkReceive.java:93)
    at org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:71)
    at org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:154)
    at org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:135)
    at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:343)
    at org.apache.kafka.common.network.Selector.poll(Selector.java:291)
    at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:260)
    at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:232)
    at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:180)
    at org.apache.kafka.clients.consumer.internals.AbstractCoordinator.ensureCoordinatorReady(AbstractCoordinator.java:193)
    at org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.poll(ConsumerCoordinator.java:248)
    at org.apache.kafka.clients.consumer.KafkaConsumer.pollOnce(KafkaConsumer.java:1013)
    at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:979)
    at org.apache.kafka.connect.runtime.WorkerSinkTask.pollConsumer(WorkerSinkTask.java:316)
    at org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:222)
    at org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:170)
    at org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:142)
    at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:140)
    at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:175)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
java.lang.OutOfMemoryError:java堆空间
位于java.nio.HeapByteBuffer。(HeapByteBuffer.java:57)
位于java.nio.ByteBuffer.allocate(ByteBuffer.java:335)
位于org.apache.kafka.common.network.NetworkReceive.readFromReadableChannel(NetworkReceive.java:93)
位于org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:71)
位于org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:154)
位于org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:135)
位于org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:343)
位于org.apache.kafka.common.network.Selector.poll(Selector.java:291)
位于org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:260)
位于org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:232)
位于org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:180)
位于org.apache.kafka.clients.consumer.internals.AbstractCoordinator.EnsureCoreCoordinatorReady(AbstractCoordinator.java:193)
位于org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.poll(ConsumerCoordinator.java:248)
访问org.apache.kafka.clients.consumer.KafkaConsumer.pollOnce(KafkaConsumer.java:1013)
访问org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:979)
位于org.apache.kafka.connect.runtime.WorkerSinkTask.pollConsumer(WorkerSinkTask.java:316)
位于org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:222)
位于org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:170)
位于org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:142)
位于org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:140)
位于org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:175)
位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
在java.util.concurrent.FutureTask.run(FutureTask.java:266)处
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
运行(Thread.java:745)

一些卡夫卡文档中提到了堆空间,告诉您使用“默认值”进行尝试,并且只有在出现问题时才修改它,但是没有修改堆空间的说明。

您可以通过设置
Kafka\u heap\u OPTS
环境变量来控制最大和初始堆大小

以下示例将起始大小设置为512 MB,最大大小设置为1 GB:

KAFKA_HEAP_OPTS="-Xms512m -Xmx1g" connect-standalone connect-worker.properties connect-s3-sink.properties

当运行Kafka命令(如
connectstandalone
)时,会调用
Kafka运行类
脚本,该脚本在
Kafka\u堆中选择
环境变量(如果尚未设置)。

即使我遇到问题,也无法启动给定主题的生产者和消费者。还删除了所有不必要的日志文件和主题。即使这与问题无关

更改
kafka run class.sh
对我不起作用。我更改了以下文件

kafka-console-consumer.sh

kafka-console-producer.sh

并停止获取错误。在这之后,消费者和生产者都表现良好


将大小增加到
KAFKA\u HEAP\u OPTS=“-Xmx1G”
之前为512m。

当您遇到卡夫卡问题时

java.lang.OutOfMemoryError: Java heap space
这并不一定意味着这是一个记忆问题。一些Kafka管理工具,如
Kafka topics.sh
,在尝试连接到SSL端口时,会用它来掩盖真正的错误。真实(屏蔽)错误是
SSL握手失败

见本期:

解决方案是在您的命令中包含一个属性文件(对于
kafka topics.sh
,这将是
--command config
),并绝对包含这一行:

security.protocol=SSL

“默认大小”似乎是。在我的机器(8G)中,它似乎足够大。我仍然得到了错误。此外,连接器日志中还有各种其他异常,服务器会暂停。非常令人沮丧。根据我的发现,它的硬编码为256M:ohhh!非常感谢。这就解释了。很抱歉我的回答不太清楚
KAFKA_HEAP_OPTS
是一个环境变量,应该在命令行或启动KAFKA作业的服务中设置。您不应该修改作为Kafka发行版一部分的脚本,因为它们将在您更新Kafka时被删除。从Kafka 1.1.0开始,Connect的新默认值是
-Xmx2g
,它是在
Kafka run class
之前设置的-是否有其他方法实现相同的功能?我的答案中的方法是相同的,只更改了默认值。在我的情况下,它看起来确实是一条虚假的错误消息,隐藏了实际的issueWow。这有帮助!我只在application.yaml中配置了
producer:ssl:key-store-location:和密码:
。在测试环境中,我的内存越来越少。我认为在错误日志的某个地方,60000毫秒后元数据中也没有主题。添加
spring.kafka.producer.security.protocol:SSL
有帮助。非常感谢。