7.3. 优化提议概述
				您可以使用 KafkaRebalance 资源来生成并应用推荐的更改。优化的 提议 是生成更平衡的 Kafka 集群的建议更改概述,在代理中平均分配分区工作负载。
			
每个优化建议都基于用于生成 它的优化目标 集合,取决于代理资源的任何配置容量限制。
所有优化的提议都是对提议重新平衡的影响的估算。您可以批准或拒绝提议。您不能在不生成优化提议的情况下批准集群重新平衡。
您可以以以下重新平衡模式之一运行优化提议:
- 
						
full - 
						
add-brokers - 
						
remove-brokers 
7.3.1. 重新平衡模式 复制链接链接已复制到粘贴板!
					您可以使用 KafkaRebalance 自定义资源的 spec.mode 属性指定一个重新平衡模式。
				
full- 
								通过将副本移到集群中的所有代理中,
完整模式会运行完全重新平衡。如果KafkaRebalance自定义资源中没有定义spec.mode属性,则这是默认模式。 add-brokers- 
								
add-brokers模式通过添加一个或多个代理来扩展 Kafka 集群后使用。通常,在扩展 Kafka 集群后,新代理仅用于托管新创建的主题的分区。如果没有创建新的主题,则不会使用新添加的代理,并且现有代理保留在同一负载下。通过在向集群添加代理后立即使用add-brokers模式,重新平衡操作会将副本从现有代理移到新添加的代理中。您可以使用KafkaRebalance自定义资源的spec.brokers属性将新代理指定为列表。 remove-brokers- 
								
remove-brokers模式通过删除一个或多个代理来缩减 Kafka 集群。如果您缩减 Kafka 集群,代理也会关闭,即使它们的主机副本也是如此。这可能导致死机分区,并可能导致某些分区处于最小 ISR 下(in-sync 副本)。为了避免这个问题,remove-brokers模式会从要删除的代理中移出副本。当这些代理不再托管副本时,可以安全地运行缩减操作。您可以在KafkaRebalance自定义资源的spec.brokers属性中指定您移除的代理。 
					通常,通过在代理中分散负载,使用 完整 重新平衡模式来重新平衡 Kafka 集群。只有在您要扩展集群或缩减并相应地重新平衡副本时,才使用 add-brokers 和 remove-brokers 模式。
				
					运行重新平衡的步骤在三种不同模式之间是相同的。唯一区别是通过 spec.mode 属性指定模式,如果需要,列出已添加或将通过 spec.brokers 属性删除的代理。
				
7.3.2. 优化方案的结果 复制链接链接已复制到粘贴板!
当生成优化提议时,返回摘要和代理负载。
- 概述
 - 
								摘要包含在 
KafkaRebalance资源中。摘要介绍了所提议的集群重新平衡概述,并指示涉及的更改规模。KafkaRebalance资源的Status.OptimizationResult属性中包括成功生成的优化建议概述。提供的信息是全面优化提议的摘要。 - 代理负载
 - 代理负载存储在包含作为 JSON 字符串数据的 ConfigMap 中。代理负载显示在所提议重新平衡的值之前和之后,您可以看到对集群中的每个代理的影响。
 
7.3.3. 批准或拒绝优化提议 复制链接链接已复制到粘贴板!
优化建议摘要显示了建议的更改范围。
					您可以使用 KafkaRebalance 资源的名称返回命令行的摘要。
				
返回优化方案概述
oc describe kafkarebalance <kafka_rebalance_resource_name> -n <namespace>
oc describe kafkarebalance <kafka_rebalance_resource_name> -n <namespace>
					您还可以使用 jq 命令行 JSON parser 工具。
				
使用 jq 返回优化的提议概述
oc get kafkarebalance -o json | jq <jq_query>.
oc get kafkarebalance -o json | jq <jq_query>.
使用摘要来确定是否批准或拒绝优化提议。
- 批准优化方案
 - 
								您可以通过设置 
KafkaRebalance资源的strimzi.io/rebalance注解来批准优化的提议。Cruise Control 将提议应用到 Kafka 集群,并启动集群重新平衡操作。 - 拒绝优化的提议
 - 
								如果您选择不批准优化方案,您可以更改优化目标或更新任何重新平衡性能调优选项,然后生成另一个提议。您可以使用 
strimzi.io/refresh注解为KafkaRebalance资源生成一个新的优化建议。 
使用优化提议来评估重新平衡所需的移动。例如,摘要描述了 inter-broker 和 in-broker 的移动。在不同的代理间重新平衡数据移动数据。在使用 JBOD 存储配置时,代理会在同一代理上的磁盘间移动数据。即使您无法继续并批准提议,这些信息也很有用。
您可能会拒绝优化的提议,或延迟其批准,因为在重新平衡时 Kafka 集群上的额外负载。
在以下示例中,建议建议在单独的代理之间重新平衡数据。重新平衡涉及在代理间移动 55 分区副本(总计 12MB 数据)。虽然对分区副本的干预移动会对性能有严重影响,但数据总量并不大。如果总数据较大,您可以拒绝提议,或当批准重新平衡时限制 Kafka 集群性能的影响。
重新平衡性能调优选项有助于降低数据移动的影响。如果可以扩展重新平衡周期,您可以将重新平衡分成较小的批处理。一次减少数据移动可减少群集的负载。
优化建议概述示例
提议也会将 24 个分区领导人移到不同的代理中。这需要一个对 ZooKeeper 配置的更改,这对性能有较低的影响。
均衡的分数是在处理建议前和之后的 Kafka 集群总体平衡的衡量。均衡分数基于优化目标。如果满足所有目标,则分数为 100。对于不满足的每个目标,分数降低。比较 balancedness 分数,以查看 Kafka 集群是否少于其重新平衡。
7.3.4. 优化建议概述属性 复制链接链接已复制到粘贴板!
下表说明了优化建议部分中包含的属性。
| JSON 属性 | Description | 
|---|---|
|   
									  |   集群代理磁盘之间传输的分区副本数量。 
									重新平衡操作期间的性能影响 :相对高,但小于   | 
|   
									  |   尚不受支持。返回空列表。  | 
|   
									  |   在独立代理之间移动的分区副本数量。 重新平衡操作期间的性能影响 :相对高.  | 
|   
									  |   Kafka 集群的整体 平衡 度量,在生成优化建议前和之后。 
									分数的计算是通过减去每个违反软目标的  
									  | 
|   
									  |   
									在同一代理上的磁盘间移动的每个分区副本的总和(请参阅  
									重新平衡操作期间的性能影响 :变量.集群重新平衡所需的时间越大,完成集群重新平衡所需的时间。在同一代理上的磁盘间移动大量数据的影响要低于独立的代理(请参阅   | 
|   
									  |   优化提议的指标窗口数量。  | 
|   
									  |   
									将移到一个单独的代理的每个分区副本的大小总和(请参阅  重新平衡操作期间的性能影响 :变量.集群重新平衡所需的时间越大,完成集群重新平衡所需的时间。  | 
|   
									  |   
									Kafka 集群中由优化提议覆盖的分区百分比。受   | 
|   
									  |   
									如果您在   | 
|   
									  |   领导程序切换到不同副本的分区数量。这包括对 ZooKeeper 配置的更改。 重新平衡操作期间的性能影响 :相对较低的.  | 
|   
									  |   尚不受支持。返回空列表。  | 
7.3.5. 代理负载属性 复制链接链接已复制到粘贴板!
代理负载作为 JSON 格式的字符串存储在 ConfigMap 中(与 KafkaRebalance 自定义资源的名称相同)。此 JSON 字符串由一个 JSON 对象组成,其中包含每个代理 ID 的键,用于链接到每个代理的指标。每个指标由三个值组成:第一种是应用优化的提议前的指标值,第二个是应用提议后的指标的预期值,第三个值是前两个值(之前减号)。
						当 KafkaRebalance 资源处于 ProposalReady 状态时,ConfigMap 会出现,并在重新平衡完成后保留。
					
您可以使用 ConfigMap 的名称从命令行查看其数据。
返回 ConfigMap 数据
oc describe configmaps <my_rebalance_configmap_name> -n <namespace>
oc describe configmaps <my_rebalance_configmap_name> -n <namespace>
					您还可以使用 jq 命令行 JSON parser 工具从 ConfigMap 中提取 JSON 字符串。
				
使用 jq 从 ConfigMap 中提取 JSON 字符串
oc get configmaps <my_rebalance_configmap_name> -o json | jq '.["data"]["brokerLoad.json"]|fromjson|.'
oc get configmaps <my_rebalance_configmap_name> -o json | jq '.["data"]["brokerLoad.json"]|fromjson|.'
下表说明了优化提议的代理负载 ConfigMap 中包含的属性:
| JSON 属性 | Description | 
|---|---|
|   
									  |   这个代理中的副本数量是分区领导的。  | 
|   
									  |   此代理上的副本数量。  | 
|   
									  |   CPU 使用率作为定义容量的百分比。  | 
|   
									  |   磁盘利用率作为定义容量的百分比。  | 
|   
									  |   绝对磁盘使用量(以 MB 为单位)。  | 
|   
									  |   代理的网络输出率总数。  | 
|   
									  |   此代理上所有分区领导副本的网络输入率。  | 
|   
									  |   此代理中所有后续副本的网络输入率。  | 
|   
									  |   如果此代理成为当前主机的所有副本的领导人,则这种代理成为当前主机的所有副本的领导数,这将实现的最多网络输出率。  | 
7.3.6. 缓存的优化方案 复制链接链接已复制到粘贴板!
Cruise Control 会根据配置的默认 优化目标维护一个缓存的优化提议。从工作负载模型生成,缓存的优化方案每 15 分钟更新一次,以反映 Kafka 集群的当前状态。如果您使用默认优化目标生成优化建议,Cruise Control 将返回最新的缓存提议。
					要更改缓存的优化建议刷新间隔,请编辑 Cruise Control 部署配置中的 proposal.expiration.ms 设置。对于快速更改的集群,请考虑一个较短的间隔,但这会增加 Cruise Control 服务器中的负载。