Kafka Connect 堆空间不足
Posted
技术标签:
【中文标题】Kafka Connect 堆空间不足【英文标题】:Kafka Connect running out of heap space 【发布时间】:2017-06-17 07:24:15 【问题描述】:启动 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)
在一些Kafka文档中提到了堆空间,告诉你用“默认”尝试,只有在有问题时才修改它,但没有修改堆空间的说明。
【问题讨论】:
“默认大小”似乎是determined at run time。它在我的机器(8G)中似乎足够大。我仍然收到OOM错误。此外,连接器日志中还有各种其他异常,服务器停止。非常令人沮丧。 据我发现,它被硬编码为 256M:github.com/apache/kafka/blob/trunk/bin/kafka-run-class.sh#L209 哦!谢谢。这就解释了。 【参考方案1】:您可以通过设置KAFKA_HEAP_OPTS
环境变量来控制最大和初始堆大小。
以下示例设置了 512 MB 的起始大小和 1 GB 的最大大小:
KAFKA_HEAP_OPTS="-Xms512m -Xmx1g" connect-standalone connect-worker.properties connect-s3-sink.properties
运行connect-standalone
等Kafka 命令时,会调用kafka-run-class
脚本,如果尚未设置KAFKA_HEAP_OPTS
环境变量中的sets a default heap size of 256 MB。
【讨论】:
从 Kafka 1.1.0 开始,Connect 的新默认值是-Xmx2g
,它设置在kafka-run-class
- github.com/apache/kafka/commit/… 之前
还有其他方法可以达到同样的效果吗?
我的答案中的方法是一样的,只是默认值改变了。【参考方案2】:
即使我遇到了问题,也无法针对给定主题启动我的生产者和消费者。还删除了所有不必要的日志文件和主题。即使这与问题无关。
更改kafka-run-class.sh
对我不起作用。我更改了以下文件
kafka-console-consumer.sh
kafka-console-producer.sh
并停止收到 OOM 错误。在此之后,消费者和生产者都工作得很好。
将大小增加到 KAFKA_HEAP_OPTS="-Xmx1G"
之前是 512m。
【讨论】:
抱歉,我的回答不够清楚。KAFKA_HEAP_OPTS
是一个环境变量,应该在命令行或启动 Kafka 作业的服务中设置。您不应该修改属于 Kafka 发行版的脚本,因为它们会在您更新 Kafka 时被清除。【参考方案3】:
当您遇到 Kafka 问题时
java.lang.OutOfMemoryError: Java heap space
这并不一定意味着这是一个内存问题。在尝试连接到 SSL 端口时,一些 Kafka 管理工具(如 kafka-topics.sh
)会掩盖真正的错误。真正的(被屏蔽的)错误是SSL handshake failed
!
看到这个问题:https://issues.apache.org/jira/browse/KAFKA-4090
解决方案是在您的命令中包含一个属性文件(对于kafka-topics.sh
,这将是--command-config
)并绝对包含此行:
security.protocol=SSL
【讨论】:
就我而言,这似乎是一条虚假的错误消息,隐藏了实际问题 哇。这有帮助!我只在 application.yaml 中配置了producer: ssl: key-store-location: and password:
。而且我在测试环境中内存不足。我认为在错误日志中的某处还有 60000 毫秒后元数据中不存在主题。添加spring.kafka.producer.security.protocol: SSL
有帮助。谢谢。【参考方案4】:
我今天早上发现了这个问题的另一个原因。我看到了同样的异常,除了我没有使用 SSL 并且我的消息非常小。我的问题原来是配置错误的bootstrap-servers
url。如果您将该 URL 配置为打开但不正确的服务器和端口,您可能会导致同样的异常。 Kafka 人员已经意识到了一般性问题,并在此处进行了跟踪:https://cwiki.apache.org/confluence/display/KAFKA/KIP-498%3A+Add+client-side+configuration+for+maximum+response+size+to+protect+against+OOM
【讨论】:
以上是关于Kafka Connect 堆空间不足的主要内容,如果未能解决你的问题,请参考以下文章