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

VB_*_*VB_ 4 architecture partitioning database-partitioning apache-kafka

我发现 Kafka 的分区机制笨拙且不舒服。Kafka 不支持自动分区重新分配功能,这会导致以下情况:

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

问题:

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

Mic*_*son 5

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

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

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

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

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

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

    如果您不确定如何制作重新分配文件,有很多可以生成和应用重新分配的工具:kafka-kitcruise-control