本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Ama LinkedIn zon 上使用 Apache Kafka 的巡航控制系统 MSK
您可以使用 LinkedIn的 Cruise Control 来重新平衡您的 Amazon MSK 集群、检测和修复异常以及监控集群的状态和运行状况。
下载并构建 Cruise Control
在与亚马逊MSK集群VPC相同的亚马逊中创建一个 Amazon EC2 实例。
在上一步中创建的EC2亚马逊实例上安装 Prometheus。记下私有 IP 和端口。默认端口号为 9090。有关如何配置 Prometheus 以聚合集群指标的信息,请参阅使用 Prometheus 监控MSK已配置的集群。
-
在 Amazon EC2 实例上下载 C ruise Control
。(或者,如果您愿意,也可以使用单独的 Amazon EC2 实例进行巡航控制。) 对于具有 Apache Kafka 版本 2.4.* 的集群,请使用最新的 2.4.* Cruise Control 版本。如果集群的 Apache Kafka 版本早于 2.4.*,请使用最新的 2.0.* Cruise Control 版本。 -
解压缩 Cruise Control 文件,然后转到解压缩后的文件夹。
-
运行以下命令以安装 Git:
sudo yum -y install git
-
运行以下命令以初始化本地存储库。
Your-Cruise-Control-Folder
替换为当前文件夹(您在解压Cruise Control下载文件时获得的文件夹)的名称。git init && git add . && git commit -m "Init local repo." && git tag -a
Your-Cruise-Control-Folder
-m "Init local version." -
运行以下命令以安装并构建源代码。
./gradlew jar copyDependantLibs
配置和运行 Cruise Control
-
对
config/cruisecontrol.properties
文件进行以下更新。将示例引导服务器和引导代理字符串替换为集群的值。要获取集群的这些字符串,您可以在控制台中查看集群详细信息。或者,您可以使用GetBootstrapBrokers和DescribeClusterAPI运算或它们的CLI等效操作。# If using TLS encryption, use 9094; use 9092 if using plaintext bootstrap.servers=b-1.test-cluster.2skv42.c1.kafka.us-east-1.amazonaws.com:9094,b-2.test-cluster.2skv42.c1.kafka.us-east-1.amazonaws.com:9094,b-3.test-cluster.2skv42.c1.kafka.us-east-1.amazonaws.com:9094 # SSL properties, needed if cluster is using TLS encryption security.protocol=SSL ssl.truststore.location=/home/ec2-user/kafka.client.truststore.jks # Use the Prometheus Metric Sampler metric.sampler.class=com.linkedin.kafka.cruisecontrol.monitor.sampling.prometheus.PrometheusMetricSampler # Prometheus Metric Sampler specific configuration prometheus.server.endpoint=1.2.3.4:9090 # Replace with your Prometheus IP and port # Change the capacity config file and specify its path; details below capacity.config.file=config/capacityCores.json
对于 Express brokers,我们建议您不要
DiskCapacityGoal
在分析器配置中配置的任何目标中使用。 -
编辑
config/capacityCores.json
文件以指定正确的磁盘大小和CPU内核以及网络输入/输出限制。对于 Express 经纪商,只有在设置巡航控制时才需要输入DISK
容量。由于MSK管理 Express 经纪商的所有存储,因此应将此值设置为极高的数字,例如Integer.MAX_VALUE (2147483647)
。对于标准代理,您可以使用DescribeClusterAPI操作(或 desc ribe-clusterCLI)来获取磁盘大小。有关CPU核心和网络输入/输出限制,请参阅 Amazon EC2 实例类型 。 -
您可以选择安装 Cruise Control UI。如需下载,请转到 Setting Up Cruise Control Frontend
。 -
运行以下命令以启动 Cruise Control。考虑使用类似
screen
或tmux
的工具来保持长时间运行的会话处于开放状态。<path-to-your-kafka-installation>
/bin/kafka-cruise-control-start.sh config/cruisecontrol.properties 9091 使用 Cruise Control APIs 或 UI 来确保 Cruise Control 拥有集群负载数据并提出重新平衡建议。获得有效的指标窗口可能需要几分钟时间。
重要
只有Cruise Control版本2.5.60及以上版本与Express经纪人兼容,因为Express经纪人不会公开Zookeeper端点
使用 Amazon 巡航控制系统的自动部署模板 MSK
您还可以使用此CloudFormation 模板
主要功能:
自动配置预配置巡航控制和 Prometheus 的亚马逊EC2实例。
支持 Amazon MSK 预配置的集群。
使用PlainText 和进行灵活的身份验证IAM。
Cruise Control 不依赖 Zookeeper。
通过提供存储在 Amazon S3 存储桶中的您自己的配置文件,轻松自定义 Prometheus 目标、Cruise Control 容量设置和其他配置。
分区重新平衡指南
Kafka 分区重新分配指南
Kafka 中的分区重新分配可能占用大量资源,因为它涉及跨代理传输大量数据,从而可能导致网络拥塞并影响客户端操作。以下最佳实践可通过调整限制速率、利用并发控制和了解重新分配类型来最大限度地减少对集群操作的干扰,从而帮助您有效地管理分区重新分配。
在巡航控制中管理并发性
Cruise Control 提供自动调整参数,以控制分区和领导层动作的并发性。以下参数有助于在重新分配期间保持可接受的负荷:
最大并发分区移动:定义
num.concurrent.partition.movements.per.broker
以限制并发的经纪商间分区移动,避免网络利用率过高。例 示例
num.concurrent.partition.movements.per.broker = 5
此设置限制每个代理在任何给定时间移动不超过 10 个分区,从而平衡代理间的负载。
使用限制来控制带宽
Throttle Parameter:使用执行分区重新分配时
kafka-reassign-partitions.sh
,使用设置代理之间数据移动的最大传输速率(以每秒字节为单位)。--throttle parameter
例 示例
--throttle 5000000
这将最大带宽设置为 5 Mb/s。
-
平衡油门设置:选择合适的油门速率至关重要:
如果设置得太低,则重新分配可能需要更长的时间。
如果设置得太高,客户端可能会遇到延迟增加的情况。
从保守的节流速率开始,然后根据集群性能监控进行调整。在应用到生产环境之前,请先测试您选择的油门,以找到最佳平衡。
在暂存环境中进行测试和验证
在生产环境中实施重新分配之前,请在配置相似的暂存环境中执行负载测试。这使您可以微调参数并最大限度地减少现场制作中的意外影响。