Kafka 分区重新分配算法和原因



我发现Kafka的分区机制既尴尬又不舒服。Kafka 不支持导致以下情况的自动分区重新分配功能:

  1. 如果要添加节点,则必须手动执行bin/kafka-reassign-partitions.sh脚本。您必须以 JSON 格式手动写出每个主题的分区重新分配。
  2. 在代理失败时,我想应该在不重新分区的情况下激活副本。这可能会导致热点。我说的对吗?

问题:

  1. Kafka 没有/不应该重新分配自动分区有什么架构/设计原因吗?那是因为它降低了性能吗?
  2. 什么是bin/kafka-reassign-partitions.sh后面的分区重新分配算法?Kafka 是否使用任何优化(即一致哈希)或原始哈希范围划分?
  1. 由于数据存储在代理上,如果将分区重新分配给另一个代理,则必须复制所有数据。

    此外,为了不失去任何保证,在 复制,您必须维护额外的副本(旧副本和新副本) 的)。请注意,正在进行一个 KIP 来改善该特定行为 (KIP-435)。

    移动数据是集群的额外负载,显然会对性能产生重大影响

  2. kafka-reassign-partitions.sh的默认行为非常幼稚,如果您打算在真实环境中使用它,我真的建议您自己制作重新分配文件。

    默认情况下,它将重新分配所有分区,基本上模拟使用新代理创建所有主题。虽然这可以很好地平衡领导者,但这会导致需要复制大量数据。

    在实践中,只需移动分区的一小部分即可获得类似的结果,从而限制数据复制和对集群的影响。

    如果您不确定如何制作重新分配文件,有一堆工具可以生成和应用重新分配:kafka-kit,巡航控制

相关内容

  • 没有找到相关文章

最新更新