Kafka Connect耗尽堆空间

Rob*_*rty 9 java heap jvm apache-kafka 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.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)
Run Code Online (Sandbox Code Playgroud)

在一些Kafka文档中提到了堆空间,告诉你使用"默认"进行尝试,只有在出现问题时才修改它,但是没有指令来修改堆空间.

pee*_*dee 48

当您遇到 Kafka 问题时

java.lang.OutOfMemoryError: Java heap space
Run Code Online (Sandbox Code Playgroud)

这并不一定意味着这是一个内存问题。kafka-topics.sh尝试连接到 SSL 端口时,一些 Kafka 管理工具(例如)将掩盖真正的错误。真正的(被掩盖的)错误是SSL handshake failed

看到这个问题:https : //issues.apache.org/jira/browse/KAFKA-4090

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

security.protocol=SSL
Run Code Online (Sandbox Code Playgroud)

  • 你说得对!确实非常感谢。两年过去了,这种情况在 **Spring Boot 2.7.2** 和 **Kafka 2.8** 中仍然发生。 (2认同)

Rob*_*rty 23

您可以通过设置KAFKA_HEAP_OPTS环境变量来控制最大和初始堆大小.

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

KAFKA_HEAP_OPTS="-Xms512m -Xmx1g" connect-standalone connect-worker.properties connect-s3-sink.properties
Run Code Online (Sandbox Code Playgroud)

运行诸如的Kafka命令时connect-standalone,将kafka-run-class调用脚本,如果尚未设置,则在环境变量中将默认堆大小设置为256 MBKAFKA_HEAP_OPTS.

  • 从 Kafka 1.1.0 开始,Connect 的新默认值是 `-Xmx2g`,它设置在 `kafka-run-class` 之前 - https://github.com/apache/kafka/commit/cfa6a78c7c2529839d2f3cb1129098f2e552fd72 (2认同)
  • 我的答案中的方法是相同的,只是默认值改变了。 (2认同)

Ale*_* N. 6

今天早上我发现了这个问题的另一个原因。我也看到了同样的异常,只是我没有使用 SSL 并且我的消息非常小。我的问题是bootstrap-servers网址配置错误。如果将该 URL 配置为打开但不正确的服务器和端口,则可能会导致相同的异常。Kafka 人员已经意识到这个普遍问题,并在这里跟踪它:https ://cwiki.apache.org/confluence/display/KAFKA/KIP-498%3A+Add+client-side+configuration+for+maximum+response +大小+保护+防止+OOM