使用 Amazon MSK 构建 Apache Kafka 流处理平台 - 集群设计与运维
设计 Apache Kafka 的托管集群,并介绍与 MSK Serverless 的选择区分以及通过 MSK Connect 进行数据集成的模式。
MSK 的特点以及与 Kinesis 的选择区分
MSK 是 Apache Kafka 的托管服务,由 AWS 管理 Broker 的预置、补丁应用和故障恢复。由于 MSK 运行的是开源版的 Apache Kafka,现有的 Kafka 生产者、消费者、Kafka Streams 应用程序和 Connect 连接器都可以直接使用。关于与 Kinesis Data Streams 的选择区分,需要与现有 Kafka 生态系统兼容时选择 MSK,优先考虑 AWS 原生集成和简洁性时选择 Kinesis。在计费单位上,Kinesis 是按分片的按量计费,MSK 是 Broker 实例的按小时计费。
集群设计与 MSK Serverless
在预置集群中,指定 Broker 的实例类型(kafka.m5.large 等)、Broker 数量和存储容量。生产环境建议至少 3 个 Broker(每个可用区 1 台),并通过复制因子 3、min.insync.replicas 2 的设置确保数据的持久性。MSK Serverless 是 2022 年 GA 的方式,用户无需自行管理集群的容量和扩缩。可以只专注于创建主题和收发数据,吞吐量按分区自动扩展。适合希望使用自动增减容量的应用程序。不过,在自定义 Kafka 的配置参数方面,预置集群更灵活。
通过 MSK Connect 进行数据集成
MSK Connect 是以托管方式运行 Kafka Connect 连接器的服务。使用 S3 Sink Connector 可以将主题的数据自动写入 S3,并通过 Redshift 或 Athena 进行分析。也可以使用 DynamoDB Sink Connector 实时更新表,或使用 Debezium Source Connector 捕获 RDS 的表变更并发送到 Kafka 主题。连接器的扩缩可以设置为自动或手动,通过增减 Worker 数量来调整吞吐量。由于连接器插件是从上传到 S3 的 JAR 文件创建的,因此可以使用 Confluent Hub 和开源社区的连接器。
MSK 的费用
预置集群的费用由 Broker 实例的按小时计费和存储构成。kafka.m5.large 每小时约 0.21 美元(每月约 151 美元),最小 3 个 Broker 的配置每月约 453 美元(截至 2026 年 8 月)。存储每 GB 每月约 0.10 美元。MSK Serverless 按集群小时(约 0.75 美元/小时)和分区小时计费,是用多少付多少的计费体系。与 Kinesis Data Streams(每分片小时约 0.015 美元)相比,需要 Kafka 生态系统兼容性时选择 MSK,重视 AWS 原生集成时选择 Kinesis。
高可用性与数据持久性的设计
在生产环境的 Kafka 平台中,设计成 Broker 故障时不丢失数据。将 Broker 分散部署在多个可用区,并将各主题的数据复制到多个 Broker。通过设置在判定写入成功之前至少同步到多少个副本,即使部分 Broker 宕机也可以保持数据的一致性。如果跨可用区配置副本,也能够承受整个可用区的故障。通过组合副本数和写入确认的阈值,在持久性、可用性和性能之间取得平衡。
认证与加密的安全性
MSK 具备多种认证和加密方式。客户端与 Broker 之间的通信使用 TLS 加密,防止窃听。认证方面,除了基于用户名和密码的方式外,还可以选择使用 AWS IAM 的方式。在 IAM 认证中,可以通过 IAM 策略控制以主题为单位的读写权限,并集成到 AWS 基于角色的机制中。静态数据也会加密,并管理密钥。以最小权限设计谁能写入和读取哪个主题,从而收窄对流处理平台中流动数据的访问。根据需求选定认证方式。
通过 Tiered Storage 优化成本
Kafka 会在一定期间内保留数据,但保留期越长,对 Broker 存储的压力越大,成本也越高。使用 Tiered Storage 后,新数据保留在高速的 Broker 存储中,旧数据会自动移到低价的层级。由此可以降低长期保留数据的成本,并可将其用于追溯过去的重新处理。由于无需持续增加 Broker 存储,容量规划也变得容易。将访问频率高的近期数据和很少查阅的历史数据按层级分开,在保留与费用之间取得平衡。
监控与扩缩
通过多个指标持续监控 Kafka 集群的健康状况。利用 CloudWatch 的指标掌握 Broker 的负载、磁盘使用量和消费者的延迟,并检测异常。如果需要更详细的 Kafka 特有指标,则启用兼容 Prometheus 的监控进行收集。负载增加时,通过添加 Broker 扩大处理能力、扩展存储等方式进行扩缩。为了避免磁盘可用空间耗尽,在 CloudWatch 中设置使用率告警,并通过自动扩展、增加存储和缩短保留期来做好准备。
总结
MSK 是在将 Apache Kafka 的运维管理委托给 AWS 的同时保持 Kafka 生态系统兼容性的服务。通过 MSK Serverless 将集群容量的管理交给 AWS,通过 MSK Connect 以托管方式运行 Kafka Connect 连接器。通过 Tiered Storage 将冷数据自动移到低成本的存储层,降低 Broker 的存储成本。
参考资料(AWS 官方)
本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。
如本页内容与官方文档不一致,请以官方文档为准。