3.11. 对可用性进行分区重新平衡
分区可以在代理之间复制,以进行容错。对于给定分区,选择一个代理被选择,用于处理所有生成的请求(写入日志)。在领导失败时,在其他代理中,分区遵循器复制分区领导分区数据以获得数据可靠性。
遵循者通常不为客户端提供服务,但 机架
配置允许在 Kafka 集群跨越多个数据中心时消耗来自最接近的副本的消息。followers 仅操作从分区领导复制消息,并允许恢复机制失败。恢复需要一个同步后续程序。followers 通过向领导发送获取请求来保持同步,该请求会向后续者返回消息。如果后续者在领导上最近提交的消息已耗尽,则它被视为处于同步状态。领导通过查看后续请求的最后偏移量来检查这一点。除非允许未清理领导选举机制,否则通常不同步后续者作为领导机 线。
您可以在后续者被视为不同步前调整滞后时间:
... ...
# ...
replica.lag.time.max.ms=30000
# ...
滞后时间限制将消息复制到所有同步副本的时间限制,以及制作者必须等待确认的时长。如果后续者无法发出获取请求并使用指定滞后内的最新消息捕获,它将从同步的副本中删除。您可以减少更快检测失败副本的时间,但这样做可能会增加不需要同步的跟随者数量。右后时间值取决于网络延迟和代理磁盘带宽。
当领导分区不再可用时,会选择其中一个同步副本作为新领导。分区列表中的第一个代理称为 首选 领导。默认情况下,会根据定期检查领导分发,为自动分区领导重新平衡启用 Kafka。也就是说,Kafka 会检查首选领导 是当前的 领导。重新平衡可确保领导在代理和代理间平均分布不会过载。
您可以使用 Cruise Control for AMQ Streams 来找出副本分配到集群中平均平衡负载的代理。计算考虑领导和后续人员遇到的差异负载。失败的领导会影响 Kafka 集群的平衡,因为剩余的代理会获得前导额外分区的额外工作。
对于 Cruise Control 发现的分配,实际上平衡,分区需要由首选领导领导提供。Kafka 可以自动确保使用首选领导机制(可能),根据需要更改当前的领导。这样可确保集群保持在 Cruise Control 找到的 balanced 状态。
在触发重新平衡前,您可以控制重新平衡检查的频率,以及代理允许的最大不可变百分比。
#... auto.leader.rebalance.enable=true leader.imbalance.check.interval.seconds=300 leader.imbalance.per.broker.percentage=10 #...
#...
auto.leader.rebalance.enable=true
leader.imbalance.check.interval.seconds=300
leader.imbalance.per.broker.percentage=10
#...
代理的领导机机是当前分区数量之间的比例,代理是当前领导的领导数,以及它是首选领导分区数量。您可以将百分比设置为零,以确保始终选择首选领导,假设它们同步。
如果对重新平衡的检查需要更多控制,您可以禁用自动重新平衡。然后,您可以选择何时使用 kafka-leader-election.sh
命令行工具触发重新平衡。
由 AMQ Streams 提供的 Grafana 仪表板显示没有活跃领导的分区和分区的指标。