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

问题描述 投票:0回答:1

我发现Kafka的分区机制很尴尬和不舒服。 Kafka不支持自动分区重新分配功能,导致以下内容:

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

问题:

  1. Kafka没有/不应该重新分配自动分区有任何架构/设计原因吗?那是因为它降低了性能吗?
  2. 什么是bin/kafka-reassign-partitions.sh背后的分区重新分配算法? Kafka是否使用任何优化(即一致哈希)或原始哈希范围分区?
architecture apache-kafka partitioning database-partitioning
1个回答
2
投票
  1. 由于数据存储在代理中,如果将分区重新分配给另一个代理,则必须复制所有数据。 此外,为了不丢失任何保证,在复制期间,您必须保留额外的副本(旧的和新的副本)。请注意,正在进行KIP以改善特定行为(KIP-435)。 移动数据是群集上的额外负载,显然会对性能产生重大影响
  2. kafka-reassign-partitions.sh的默认行为非常天真,如果您打算在真实环境中使用它,我真的建议您自己制作一个重新分配文件。 默认情况下,它将重新分配所有分区,基本上模拟使用新代理创建所有主题。虽然这很好地平衡了领导者,但这导致需要复制大量数据。 实际上,通过仅移动分区的非常小的部分可以实现类似的结果,从而限制数据复制和对集群的影响。 如果您不确定如何制作重新分配文件,可以使用一系列工具生成并应用重新分配:kafka-kitcruise-control
© www.soinside.com 2019 - 2024. All rights reserved.