Kafka的存储需求,在功能面是存储的数据是消息流,数据量级非常大;数据CRUD操作足够简单,主要为并发非常高和百万级TPS的追加写、无需更改、能根据消费位移offset和时间戳timestamp查询消息、能定期删除过期的消息;在非功能性面是高性能要求、高可用的稳定性要求、高扩展性要求。
在存储的选择过程中,服务器本地盘、外置SAN存储和外置NAS存储的主要能力对比如下:
• 性能:服务器本地盘性能较好,但存在故障率高、故障后恢复慢、不同节点容量使用不均衡、容量使用率低、扩容难等问题;而且容器化部署后,使用本地盘会限制POD漂移能力,影响组件的高可用。外置的高性能存储是更好的选择。同时在单副本部署状态下,外置存储的性能明显占优,在可靠性和性能之间达成了完美的平衡。
• 隔离:部署多Kafka集群或者Kafka集群与其他业务集群共享一套存储时需要做数据隔离;NAS在对接K8S平台时具备多租户能力,可以实现多集群共享存储资源池。NAS在隔离性上优于SAN。
• 可靠性:使用外置存储,尤其是共享的NAS存储时,在Kafka集群节点故障后,POD容器漂移后可直接在目的端重新挂载存储,不需要拷贝数据,恢复时长可降低至分钟级别,快速实现故障自动切换。
在容器云环境中,Kafka集群的持久化存储是非常重要的,因为它直接影响到Kafka集群的性能、可靠性和可扩展性。以下是为容器云环境的Kafka集群选择合适持久化存储的建议:
总之,在选择持久化存储时,需要考虑Kafka集群的性能、可靠性和可扩展性。根据实际需求和预算,选择合适的存储解决方案。同时,需要注意与容器编排工具的集成,以便更好地管理和扩展Kafka集群。