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