将云存储与 Apache Kafka 结合使用以实现高效长期数据管理的最佳实践
- Claude Paugh

- 11月30日
- 讀畢需時 4 分鐘
Apache Kafka 以其高吞吐量和低延迟处理实时数据流的能力而闻名。但就长期数据存储而言,Kafka 的原生存储模型存在局限性。本文将探讨 Apache Kafka 如何管理长期数据,云存储桶作为一种替代方案的作用,以及如何将 Kafka 与云存储相结合以实现高效数据访问和检索的最佳实践。

Apache Kafka 如何处理长期数据存储
Apache Kafka 将数据存储在主题中,作为不可变日志存储在 Kafka broker 的本地磁盘上。这种设计支持流式处理场景下的快速读写。然而,由于以下原因,Kafka 的本地存储并未针对长期保留大量数据进行优化:
存储限制:Kafka broker 的磁盘空间有限,因此无限期地保留数据成本高昂且复杂。
保留策略:Kafka 通常使用基于时间或基于大小的保留策略来自动删除旧数据。
恢复复杂性:对于非常大的数据集,在代理发生故障后从 Kafka 恢复数据可能具有挑战性。
Kafka 的存储模型非常适合短期到中期的数据保留,通常为几小时到几周。对于更长时间的数据保留,企业通常会考虑外部存储解决方案。
使用云存储桶代替 Kafka 队列
诸如 Amazon S3、Google Cloud Storage 或 Azure Blob Storage 之类的云存储桶为长期数据存储提供了可扩展、持久且经济高效的解决方案。许多架构不再仅仅依赖 Kafka 的内部存储,而是将较旧的 Kafka 数据卸载到云存储桶中。

定位和检索信息的有效性
云存储桶是对象存储,而不是消息队列。这意味着:
数据以文件或对象的形式存储,而不是以单个消息的形式存储。
检索特定消息需要索引或分区策略。
与 Kafka 本地存储相比,访问延迟更高。
为了提高检索效率,数据通常以支持快速查询和分区修剪的格式和结构存储。
数据格式和分区:Parquet 和 ORC
Apache Kafka 本身并不原生使用 Parquet 或 ORC 格式。这些列式存储格式因其压缩率高、查询效率高而在大数据生态系统中广受欢迎。
将 Kafka 数据导出到云存储时,许多团队会将消息转换为 Parquet 或 ORC 文件。这种方法具有以下优点:
高效压缩可降低存储成本。
列式布局通过仅读取相关列来加快查询速度。
按时间、主题或其他键进行分区可以实现快速筛选。
例如,一种常见的做法是将 Kafka 消息批量处理成按日期和主题分区的每小时 Parquet 文件。这种结构便于下游分析工具快速定位和扫描相关数据。
将云存储与 Apache Kafka 结合使用的最佳实践
1. 将 Kafka Connect 与云存储接收器连接器结合使用
Kafka Connect 提供现成的连接器,用于将 Kafka 主题导出到云存储。这些连接器可自动处理批处理、文件格式转换和分区。
选择支持 Parquet 或 ORC 输出的连接器。
配置与查询模式一致的分区方案。
设置合适的刷新间隔,以平衡延迟和文件大小。
2. 实施分层存储架构
分层存储将存储在 Kafka 代理中的热数据(最近、频繁访问的数据)与存储在云存储桶中的冷数据(较旧、不频繁访问的数据)分开。
将最新数据保存在 Kafka 中,以实现快速流式传输和处理。
将旧数据卸载到云存储,以实现经济高效的长期保留。
使用 Apache Kafka 的分层存储功能(某些发行版中可用)或自定义管道等工具。
3. 仔细设计分区和命名规则
有效的分区是云存储中高效数据检索的关键。
按日期/时间对数据进行分区,以支持基于时间的查询。
在分区键中包含主题或事件类型以进行筛选。
使用一致的文件命名规则可以简化索引。
4. 利用元数据和索引实现快速查找
由于云存储不是消息队列,因此对元数据进行索引至关重要。
维护外部索引或目录(例如,AWS Glue、Apache Hive Metastore)。
使用模式注册表来跟踪数据格式和版本。
利用 Presto 或 Apache Spark 等与云存储和元数据集成的查询引擎。
5. 监控和管理数据生命周期
对云存储桶设置生命周期策略,以管理数据老化和成本。
数据保留期限过后,可将其归档或删除。
对于不常访问的数据,请使用存储类(例如 S3 Glacier)。
自动清理以避免不必要的存储成本。
实际案例:流式分析管道
一家零售公司通过 Apache Kafka 流式传输交易数据。近期交易数据实时处理以进行欺诈检测。较早的交易数据则按小时以 Parquet 格式导出到 Amazon S3,并按日期和门店位置进行分区。
分析师使用 Amazon Athena 查询 S3 数据,Amazon Athena 可以高效地读取 Parquet 文件。这种配置减少了 Kafka broker 的存储需求,并提供了可扩展、经济高效的长期存储,同时保持了快速的查询性能。


