为什么我的 kafka tmp 文件夹的大小与磁盘大小几乎相同?

Why my kafka tmp folder have almost same size than disk size?

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

当我运行我的 kafka 操作时,我遇到了错误,提示我的磁盘消耗过多。我检查了我的 kafka tmp 文件夹,大小几乎是我磁盘大小的 2/3,这关闭了我的 kafka 集群。

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

  1. 25 connect_offset 来自 worker no.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 不需要大磁盘space(记录的最大 tmp 是 36 GB)。

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


首先,永远不要使用 /tmp 进行持久存储。并且不要将 /home 用于服务器数据。始终对服务器数据使用单独的 partition/disk 以及 /var + /var/logs

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

最后,

the number of __consumer_offset is consume more disk than the other offset

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

Kafka doesn't need large disk space

刚开始时不会

我见过上百TB存储的集群

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


生产中的 Kafka

  1. Apache
  2. Confluent