Kafka分区的大小并写入没有可用磁盘空间的主题

问题描述

出于企业解决方案的目的,我开始学习Kafka。

在阅读期间,我想到了一些问题:

  1. 一个主题上的所有分区是否都相同?

  2. 如果在某个主题上发送Kafka消息并且该主题过载,将会发生什么。没有关于该主题的任何新消息的存储空间吗?

解决方法

一个主题上的所有分区是否都相同?

不,它们通常不是全部相同大小。主要取决于您如何跨分区分配消息。如果您在邮件中使用密钥,则它们将被散列并用于对数据进行分区。如果没有消息中的键,则将为跨分区的循环分配数据。

此外,这还取决于生产者在将其发送到代理之前包装成批处理的消息数量以及要应用的压缩类型。

但是,您可以说TopicPartition的所有副本在同步后都具有相同的大小。

如果针对某个主题发送Kafka消息并且该主题超载,将会发生什么。没有关于该主题的任何新消息的存储空间吗?

主题本身不能重载,而是整个Kafka经纪人。如果代理没有可用磁盘空间,它将关闭自身,并且在这种情况下,如果领导者位于该代理上,则您将无法再将任何数据写入TopicPartition。但是,如果只有一个代理发生故障,并且您在主题中配置了多个复制,则这些副本将接管另一代理。

要确保这种情况永远不会发生,如果您将cleanup.policy设置为delete并设置retention.bytes,则可以应用Kafka中基于卷的保留策略。您不会超过存储限制的主题/副本数。