【问题标题】:Does Kafka chose an alternative partition in the same topic if the partition I want to send message to was full of disk?如果我要向其发送消息的分区已满磁盘,Kafka 是否会在同一主题中选择替代分区?
【发布时间】:2021-01-21 23:45:00
【问题描述】:

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

【问题讨论】:

    标签: apache-kafka kafka-topic kafka-partition


    【解决方案1】:

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

    当您专门指向一个分区时,它现在取决于您的复制因子值是否大于 1。如果您复制了主题分区,则分区领导者将从死代理切换到另一个代理有一个分区同步。

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

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

    【讨论】:

    • 如果我没有这个分区的副本会怎样?
    • 你的生产者会得到类似 OutOfMemory 异常的东西。
    • 所以不管有多少同一个topic的其他partition可用,如果我连续写到一个dead partition(run out of disk),会导致异常,没有其他partition来服务这个消息?
    • 是的,这是正确的。 Kafka 现在应该如何写入哪个分区,2 或 3,或两者兼而有之?此外,Kafka 对分区内消息的顺序有一些保证。如果它现在将数据写入另一个分区,尽管客户端想将其写入分区 1,它将破坏此顺序保证。
    • 好的,非常感谢。
    猜你喜欢
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 2017-04-29
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    相关资源
    最近更新 更多