如果我要向其发送消息的分区已满磁盘,Kafka 是否会在同一主题中选择另一个分区?

Does Kafka chose an alternative partition in the same topic if the partition I want to send message to was full of disk?

我的主题有 3 个分区(在 3 个不同的代理中)。我想将消息发送到特定分区 1(添加分区 ID 或在我的消息中指定一个键)。假设分区 1 已满磁盘,是否为此消息选择了替代分区(在本例中为分区 2 或 3)?

运行 磁盘用完的不是主题,而是整个代理。如果代理用完磁盘,它将自行关闭,您将无法向其发送数据或从中接收数据。

由于您专门指向一个分区,因此现在取决于您的 replication-factor 值是否大于 1。如果您已经复制了主题分区,分区领导者将从死代理切换到另一个经纪人有一个分区 in-sync.

如果您没有超过 1 个的复制,您的生产者最终会收到 OutOfMemory 错误,并且它不会将数据生成到备用分区 2 或 3。

为确保这种情况永远不会发生,您可以应用 Kafka 中可用的基于卷的保留策略,如果您将 cleanup.policy 设置为删除并设置 retention.bytes topics/replicas 您不会超出存储限制。