【问题标题】:Kafka Connect running out of heap space. Already setting `-Xmx12g`Kafka Connect 堆空间不足。已经设置了`-Xmx12g`
【发布时间】:2018-08-22 06:27:08
【问题描述】:

我的 Kafka Connect 接收器堆空间不足。还有其他类似的帖子:Kafka Connect running out of heap space

问题只是在默认内存设置下运行。以前,将其提高到 2g 解决了我的问题。但是,当添加一个新的接收器时,堆错误又回来了。我将 Xmx 提高到 12g,但仍然出现错误。

在我的 systemd 服务文件中,我有:

Environment="KAFKA_HEAP_OPTS=-Xms512m -Xmx12g"

即使 Xmx 设置很高,我仍然会收到堆错误。我还将我的flush.size 降低到 1000,我认为这会有所帮助。仅供参考,此连接器针对 11 个不同的 Kafka 主题。这会带来独特的内存需求吗?

如何进一步修复或诊断?

仅供参考,这是 Kafka 0.10.2.1 和 Confluent Platform 3.2.2。更新的版本是否在此处提供了任何改进?

java.lang.OutOfMemoryError: Java heap space
at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:57)
at java.nio.ByteBuffer.allocate(ByteBuffer.java:335)
at io.confluent.connect.s3.storage.S3OutputStream.<init>(S3OutputStream.java:67)
at io.confluent.connect.s3.storage.S3Storage.create(S3Storage.java:197)
at io.confluent.connect.s3.format.avro.AvroRecordWriterProvider$1.write(AvroRecordWriterProvider.java:67)
at io.confluent.connect.s3.TopicPartitionWriter.writeRecord(TopicPartitionWriter.java:393)
at io.confluent.connect.s3.TopicPartitionWriter.write(TopicPartitionWriter.java:197)
at io.confluent.connect.s3.S3SinkTask.put(S3SinkTask.java:173)
at org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:429)
at org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:250)
at org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:179)
at org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:148)
at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:139)
at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:182)
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:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
[2018-03-13 20:31:46,398] ERROR Task is being killed and will not recover until manually restarted (org.apache.kafka.connect.runtime.WorkerSinkTask:450)
[2018-03-13 20:31:46,401] ERROR Task avro-s3-sink-0 threw an uncaught and unrecoverable exception (org.apache.kafka.connect.runtime.WorkerTask:141)
org.apache.kafka.connect.errors.ConnectException: Exiting WorkerSinkTask due to unrecoverable exception.
at org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:451)
at org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:250)
at org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:179)
at org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:148)
at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:139)
at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:182)
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:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

【问题讨论】:

    标签: apache-kafka out-of-memory apache-kafka-connect confluent-platform


    【解决方案1】:

    目前,S3 连接器的内存需求取决于未完成分区的数量和s3.part.size。尝试将后者设置为 5MB(允许的最小值)。默认值为 25MB。

    另请阅读此处,了解更详细的尺码建议说明:

    https://github.com/confluentinc/kafka-connect-storage-cloud/issues/29

    【讨论】:

    • 每个主题有三个分区。有 11 个主题,如果我算上其他接收器,实际上是 14 个。 14 * 3 * 25MB 大约是 1GB? 12GB应该足够了
    • 也取决于您使用的分区程序。分区是 S3 的未完成分区。 Kafka 分区不一定是一对一的映射。
    • @clay 更改此配置是否解决了您的问题?
    【解决方案2】:

    首先,我对卡夫卡一无所知。

    但是,作为一般规则,当进程遇到某种容量限制并且您无法提高该限制时,您必须以某种方式限制该进程。建议您探索周期性暂停的可能性。也许睡眠 10 毫秒非常 100 毫秒。类似的东西。

    您可以尝试的另一件事是将您的 Kafka 进程固定到一个特定的 CPU。这有时会产生惊人的有益效果。

    【讨论】:

    • 在供应商提供的产品中,如果不分叉并添加代码来执行此操作,则不可能完全实现周期性暂停...此外,Kafka 正在流式传输消息,因此暂停因此,任何事情都会阻止“实时”用例
    • 如果您将进程固定到一个 cpu,您可以将另一个进程固定到另一个 cpu,依此类推。我曾经使用实时消息传递服务器做到这一点。仅通过停止线程抖动即可获得巨大的改进。为操作系统留出 25% 的 CPU。
    猜你喜欢
    • 2017-06-17
    • 2012-06-15
    • 2021-11-22
    • 2019-03-14
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 2010-10-16
    • 2011-10-08
    相关资源
    最近更新 更多