首页 > 解决方案 > kafka connect S3连接器内存分配

问题描述

由于 java.lang.OutOfMemoryError,我的 S3 连接器(如下配置)失败。

据我从不同的帖子(例如这里)了解到,内存分配大约是(s3 部分大小)*(#kafka 分区)*(由分区程序创建的#partitions)。

我正在阅读 60 个分区主题,我的分区程序可以创建几十个分区,最小 s3.part.size 为 5 MB(由连接器强制执行,我会对 5% 感到满意)。

这是否意味着我不能使用小于 60 * 5 * 50 = 15000 MB 的堆大小?这只是为了这个连接器?

是否有其他配置可以帮助我减少分配的内存?

连接器配置:

{
    "name": "test-processed-to-fake-dlk-6",
    "config": {
        "name": "test-processed-to-fake-dlk-6",
        "connector.class": "io.confluent.connect.s3.S3SinkConnector",
        "s3.region": "us-east-1",
        "topics.dir": "",
        "flush.size": "400",
        "schema.compatibility": "NONE",
        "tasks.max": "1",
        "topics": "raw-events-dev",
        "s3.part.size": "5242880",
        "timezone": "UTC",
        "format.class": "io.confluent.connect.s3.format.json.JsonFormat",
        "partitioner.class": "io.confluent.connect.storage.partitioner.DefaultPartitioner",
        "schema.generator.class": "io.confluent.connect.storage.hive.schema.DefaultSchemaGenerator",
        "value.converter": "com.naturalint.kafka.connect.storage.SafeJsonConverter",
        "storage.class": "io.confluent.connect.s3.storage.S3Storage",
        "s3.bucket.name": "eventstestkinesis",
        "rotate.schedule.interval.ms": "60000"
    }
}

标签: apache-kafkaapache-kafka-connect

解决方案


基于这个内存分配解释这个关于分区数优化文章的解释

我的主题吞吐量小于 1Mb/s,所以 60 个分区似乎是一个巨大的过度杀伤力。

我将分区数量减少到 6 个,现在情况看起来很稳定。


推荐阅读