Uber在Apache Kafka中引入分层存储功能
Uber在其博客中详细介绍了他们在Apache Kafka中添加分层存储功能的工作。该功能于Kafka 3.6.0版本中引入,目前处于早期访问阶段,旨在解决大型Kafka集群在可扩展性和效率方面的挑战。
分层存储的功能与优势
分层存储允许Kafka将其存储能力扩展到本地代理磁盘之外,支持如HDFS、Amazon S3、Google Cloud Storage和Azure Blob Storage等远程存储系统。这种增强使得Kafka集群能够独立扩展存储和计算资源,从而降低成本和操作复杂性。
Uber表示,Kafka集群通常通过增加代理节点来扩展存储,但这也会增加不必要的内存和CPU资源,导致存储成本效率低下。分层存储通过引入本地和远程两个存储层,解决了这一问题。本地层由代理的本地存储组成,而远程层则是扩展的存储系统,如HDFS或云对象存储。两个存储层可以根据具体用例设置不同的保留策略。
分层存储的架构与实现
分层存储系统通过将符合条件的日志段从本地复制到远程存储来工作。Uber的实现引入了三个新组件:
- RemoteStorageManager:处理远程日志段的操作,包括复制、获取和删除。
- RemoteLogMetadataManager:管理远程日志段的元数据,确保强一致性。
- RemoteLogManager:管理远程日志段的生命周期,包括复制到远程存储、清理过期段以及从远程存储获取数据。
AWS的Amazon MSK分层存储
AWS在其Amazon Managed Streaming for Apache Kafka(Amazon MSK)中进一步发展了这一概念。AWS表示,分层存储显著提高了Kafka集群的可用性和弹性,具有以下优势:
- 更快的代理恢复:数据自动从Amazon EBS卷移动到更经济的存储层,代理恢复时只需同步本地层的数据。
- 高效的负载均衡:负载均衡操作更加高效,因为需要移动的数据量减少。
- 更快的扩展:添加新代理时无需大量数据传输,扩展操作更加迅速。
AWS通过实际测试展示了这些优势。在没有分层存储的情况下,分区移动操作耗时约75分钟,启用分层存储后,操作时间缩短至15分钟,且CPU使用率显著降低。
行业观点与批评
尽管分层存储带来了潜在优势,但并非所有人都持乐观态度。WarpStream的Richard Artoul指出,分层存储虽然可以降低成本,但可能引入新的复杂性和潜在故障模式。他担心从远程存储获取数据可能引入延迟,影响实时处理能力,并指出云环境中的跨区域网络费用可能抵消成本节约。
当前限制与注意事项
Red Hat的分析指出,分层存储功能目前尚不支持多个日志目录(JBOD)或压缩主题。关闭分层存储需要将数据转移到其他主题或外部存储。Uber和Red Hat都强调了监控的重要性,并引入了新的指标来跟踪远程存储操作。
总结
分层存储为大规模数据流的管理提供了更高效和经济的解决方案,特别是在AWS的Amazon MSK中展示了显著的集群弹性和可扩展性提升。然而,这一功能并非适用于所有Kafka用户,特别是在增加复杂性和操作负担方面可能存在挑战。用户在生产环境中部署前应进行充分测试和监控,权衡其潜在优势与新增的复杂性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。