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

时间:2019-04-08 19:13:01

标签: architecture apache-kafka partitioning database-partitioning

我发现卡夫卡的分区机制笨拙且不舒服。 Kafka不支持导致以下问题的自动分区重新分配功能:

  1. 如果要添加节点,则必须手动执行bin/kafka-reassign-partitions.sh脚本。您必须手动以JSON格式写出每个主题的分区重新分配。
  2. 在代理失败时,我认为应激活副本而不进行重新分区。那会引起热点。 我说的对吗?

问题:

  1. 是否有任何架构/设计原因导致Kafka不/不应该进行自动分区重新分配?那是因为它会降低性能吗?
  2. bin/kafka-reassign-partitions.sh后面的分区重新分配算法是什么? Kafka是否使用任何优化(即一致哈希)还是原始哈希范围划分?

1 个答案:

答案 0 :(得分:2)

  1. 由于数据存储在代理中,因此,如果您将分区重新分配给另一个代理,则必须复制所有数据。

    此外,在有效期内,不要失去任何保证 复制,您必须维护额外的副本(旧副本和新副本 那些)。请注意,正在进行KIP改进特定行为(KIP-435)。

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

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

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

    实际上,仅移动分区的一小部分即可达到类似的结果,从而限制了数据复制以及对集群的影响。

    如果您不确定如何制作重新分配文件,可以使用一系列工具来生成和应用重新分配:kafka-kitcruise-control