Kafka 连接 运行 超出堆 space
Kafka Connect running out of heap space
启动 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文档中提到堆space,告诉你用"the default"试试,只有在有问题时才修改它,但是没有修改堆的说明space.
您可以通过设置 KAFKA_HEAP_OPTS
环境变量来控制最大和初始堆大小。
以下示例将起始大小设置为 512 MB,最大大小设置为 1 GB:
KAFKA_HEAP_OPTS="-Xms512m -Xmx1g" connect-standalone connect-worker.properties connect-s3-sink.properties
当运行一个Kafka命令如connect-standalone
时,kafka-run-class
脚本被调用,如果是KAFKA_HEAP_OPTS
环境变量sets a default heap size of 256 MB尚未设置。
即使我遇到了无法针对给定主题启动生产者和消费者的问题。还删除了所有不必要的日志文件和 topics.Even 尽管这与问题无关。
更改 kafka-run-class.sh
对我不起作用。我更改了以下文件
kafka-console-consumer.sh
kafka-console-producer.sh
并停止出现 OOM 错误。之后消费者和生产者都工作正常。
将大小增加到 KAFKA_HEAP_OPTS="-Xmx1G"
早了 512m。
当你遇到 Kafka 问题时
java.lang.OutOfMemoryError: Java heap space
不一定是内存问题。尝试连接到 SSL PORT 时,一些 Kafka 管理工具(如 kafka-topics.sh
)将以此掩盖真正的错误。真正的(屏蔽的)错误是 SSL handshake failed
!
看到这个问题:https://issues.apache.org/jira/browse/KAFKA-4090
解决方案是在您的命令中包含一个属性文件(对于 kafka-topics.sh
这将是 --command-config
)并且绝对包含此行:
security.protocol=SSL
今天早上我发现了这个问题的另一个原因。除了我没有使用 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 (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文档中提到堆space,告诉你用"the default"试试,只有在有问题时才修改它,但是没有修改堆的说明space.
您可以通过设置 KAFKA_HEAP_OPTS
环境变量来控制最大和初始堆大小。
以下示例将起始大小设置为 512 MB,最大大小设置为 1 GB:
KAFKA_HEAP_OPTS="-Xms512m -Xmx1g" connect-standalone connect-worker.properties connect-s3-sink.properties
当运行一个Kafka命令如connect-standalone
时,kafka-run-class
脚本被调用,如果是KAFKA_HEAP_OPTS
环境变量sets a default heap size of 256 MB尚未设置。
即使我遇到了无法针对给定主题启动生产者和消费者的问题。还删除了所有不必要的日志文件和 topics.Even 尽管这与问题无关。
更改 kafka-run-class.sh
对我不起作用。我更改了以下文件
kafka-console-consumer.sh
kafka-console-producer.sh
并停止出现 OOM 错误。之后消费者和生产者都工作正常。
将大小增加到 KAFKA_HEAP_OPTS="-Xmx1G"
早了 512m。
当你遇到 Kafka 问题时
java.lang.OutOfMemoryError: Java heap space
不一定是内存问题。尝试连接到 SSL PORT 时,一些 Kafka 管理工具(如 kafka-topics.sh
)将以此掩盖真正的错误。真正的(屏蔽的)错误是 SSL handshake failed
!
看到这个问题:https://issues.apache.org/jira/browse/KAFKA-4090
解决方案是在您的命令中包含一个属性文件(对于 kafka-topics.sh
这将是 --command-config
)并且绝对包含此行:
security.protocol=SSL
今天早上我发现了这个问题的另一个原因。除了我没有使用 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