【问题标题】:Why my kafka tmp folder have almost same size than disk size?为什么我的 kafka tmp 文件夹的大小与磁盘大小几乎相同?
【发布时间】:2020-08-15 03:39:42
【问题描述】:

我使用这种形式开发生产 kafka 环境:3 个 ZK 服务器、3 个 Kafka 代理和两个 kafka 连接。我将 tmp 文件与我的 kafka 主文件夹并排放置。我在远程 ubuntu 环境中运行它,但不在 docker 中。

当我操作我的 kafka 操作时,我遇到了错误,通知我的磁盘消耗过多。我检查了我的 kafka tmp 文件夹,它的大小大约是我磁盘大小的 2/3,这会关闭我的 kafka 集群。

我检查了每个 kafka log_folder 并发现了这个:

  1. 25 connect_offset 来自 1 号工人 @21MB,每个人
  2. 25 connect_offset2 来自 2 号工人 @21MB,每个人
  3. 25 connect_status 来自 1 号工人 @21MB,每个人
  4. 25 connect_status2 来自 2 号工人 @21MB,每个人
  5. 50 __consumer_offset 来自两个工作人员 @21MB,每个人
  6. 每个主题的主题偏移 @21Mb,我有 2 个主题,所以我有 6 个主题偏移

问题是 __consumer_offset 的数量比其他偏移量消耗更多的磁盘,我的 kafka_config 无法处理。这是我的 kafka_configuration 的示例:

broker.id=101
port=9099
listeners=PLAINTEXT://0.0.0.0:9099
advertised.listeners=PLAINTEXT://127.0.0.1:9099
num.partitions=3
offsets.topic.replication.factor=3
log.dir=/home/xxx/tmp/kafka_log1
log.cleaner.enable=true
log.cleanup.policy=delete
log.retention.bytes=1073741824
log.segment.bytes=1073741824
log.retention.check.interval.ms=60000
message.max.bytes=1073741824
zookeeper.connect=xxx:2185,xxx:2186,xxx:2187
zookeeper.connection.timeout.ms=7200000
session.time.out.ms=30000
delete.topic.enable=true

对于每个主题,这是配置:

kafka-topics.sh -create --zookeeper xxx:2185,xxx:216,xxx:2187 --replication-factor 3 --partitions 3 --topic $topic_name --config cleanup.policy=delete --config retention.ms=86400000 --config min.insync.replicas=2 --config compression.type=gzip

和这样的连接配置(连接配置共享相同的配置,除了端口和偏移量和状态配置。):

bootstrap.servers=XXX:9099,XXX:9098,XXX:9097
group.id=XXX
key.converter.schemas.enable=true
value.converter.schemas.enable=true
key.converter=org.apache.kafka.connect.json.JsonConverter
value.converter=org.apache.kafka.connect.json.JsonConverter
offset.storage.topic=connect-offsets
offset.storage.replication.factor=3
config.storage.topic=connect-configs
config.storage.replication.factor=3
status.storage.topic=connect-status
status.storage.replication.factor=3
offset.flush.timeout.ms=300000
rest.host.name=xxx
rest.port=8090
connector.client.config.override.policy=All
producer.max.request.size=1073741824
producer.ack=all
producer.enable.idempotence=true
consumer.max.partition.fetch.bytes=1073741824
consumer.auto.offset.reset=latest
consumer.enable.auto.commit=true
consumer.max.poll.interval.ms=5000000
plugin.path=/xxx/connectors

很明显,根据几个文档,Kafka不需要很大的磁盘空间(记录的最大tmp是36 GB)。

【问题讨论】:

    标签: apache-kafka kafka-consumer-api apache-kafka-connect


    【解决方案1】:

    “@ 21 MB”是什么意思?您的 log.segment.bytes 设置为 1GB...


    首先,永远不要将/tmp 用于持久存储。并且不要将/home 用于服务器数据。始终为服务器数据以及/var + /var/logs 使用单独的分区/磁盘。

    其次,您有 2 个 Connect 集群。使用相同的 3 个主题和相同的 group.id,那么您就有 1 个分布式集群,并且您可以避免拥有 3 个额外的主题。

    最后,

    __consumer_offset 的数量比其他偏移量消耗更多的磁盘

    嗯,是的。所有消费者组都将他们的偏移量存储在那里。这将是迄今为止最大的内部话题,具体取决于您的offsets.retention.minutes

    Kafka 不需要很大的磁盘空间

    它不会在您开始时

    我见过拥有数万 TB 存储空间的集群

    如果您观看大公司的 Kafka 峰会演讲,他们每秒发送 GB 的事件(参考 Netflix、Spotify、Uber 等)


    生产中的卡夫卡

    1. Apache
    2. Confluent

    【讨论】:

    • 所以一开始我不能将我机器中的 tmp 文件夹用作持久存储,也不能把我的 kafka 安装放在家里。但是offset.retention.minutes 怎么样?可以覆盖它吗?
    猜你喜欢
    • 2012-01-20
    • 2012-09-13
    • 2017-10-10
    • 2023-03-29
    • 2022-01-02
    • 2018-07-08
    • 2013-02-17
    • 2018-06-16
    • 1970-01-01
    相关资源
    最近更新 更多