Kafka分级存储概念(一)

2024-05-06 14:36
文章标签 概念 存储 kafka 分级

本文主要是介绍Kafka分级存储概念(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Kafka分级存储及实现原理

概述

Kafka社区在3.6版本引入了一个十分重要的特性: 分级存储,本系列文章主要旨在介绍Kafka分级存储的设计理念、设计细节以及具体的代码实现

在这里插入图片描述

背景:为什么要有分级存储?

场景
作为一款具有高吞吐及高性能的消息中间件,Kafka被广泛应用在大数据、日志采集及业务消息领域. 在日常Kafka的运维过程中,往往会遇到以下一些场景:
1、某些消息需要保留特定时间,以便业务需要以及意外恢复场景,这会带来额外的磁盘占用
2、大部分场景下,消息都可以进行及时消费;业务高峰时,会存在一定的消息积压
3、随着业务的拓展,磁盘的容量需要进行扩容;但在业务有变动时,可能又不需要这么大的磁盘空间,需要进行缩容
问题
以上业务场景暴露了当前Kafka设计上的一些缺陷:缺乏弹性能力.
1、对于业务消息来说,大部分消息其实属于“热”消息,也就是所谓的可以被及时消费的消息,而部分“冷”消息则需要等待一定老化时间之后才能够从磁盘上清除;
2、对于磁盘扩容场景,对于增加磁盘容量,运维人员可以通过操作系统LVM实现,对磁盘缩容而言则往往没有这么容易,可能需要额外的业务方案实现
3、对于Kafka的横向扩容来说,新增加的节点上并不会有原有节点上的分区,运维人员往往需要1)增加分区个数 2) 进行分区平衡(reassign)进行分区均衡;而分区平衡则会产生Broker之间的副本同步,抢占节点之间的带宽,往往建议在业务低峰时期进行

思考

所以有没有一种办法,可以将冷热数据分离开来,同时尽量减少在集群扩缩容过程中的数据迁移呢?答案就是分级存储

分级存储是什么

在这里插入图片描述
一句话来说,Kafka分级存储就是将“热”数据存储在访问速度快的本地磁盘(ESSD/SSD),将“冷”数据放在远端(如aws s3), 这样做带来的好处是:
1、对于大部分场景下,正常的生产、消费速率不受影响
2、数据存储在相对成本较低的远端存储上,节约了成本
3、不用关心磁盘大小,冷数据会被自动卸载到远端,本地磁盘使用量有固定上限
4、集群横向拓展时,只需要迁移少量热数据
5、磁盘使用可以弹性伸缩,因为往往远端存储是按量付费的,可以实现存储Serverless化

冷数据真的“冷”吗?

前面提到,我们希望将“冷”数据上传到远端,那么我们如何定义“冷”数据呢,又有什么必要存储这些数据呢,以下是几个场景:

  1. 新消费应用加入
  2. 应用重启
  3. 应用处理时出现异常,可能需要从头开始消费
  4. 全量数据处理
  5. 查询/分析
  6. 故障恢复

  7. 在这里插入图片描述
    TIPS:其实对于Kafka来说,大部分使用场景下都是实时的生产与消费,而且可以充分利用到操作系统页缓存来提高性能,在有大量消息积压场景下,存在的页缓存不命中而冷读磁盘的场景会导致Kafka的性能下降,同时容易产生磁盘IOPS等现象,不利于集群的性能,因此日常的使用中,在非业务高峰时,需要尽量避免产生大量消息积压

小结

本篇文章主要讲述了Kafka分级存储的背景及其解决的业务问题,后续将会继续围绕分级存储具体设计与实现分析其具体实现逻辑和细节供大家参考讨论

这篇关于Kafka分级存储概念(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/964617

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Java Instrumentation从概念到基本用法详解

《JavaInstrumentation从概念到基本用法详解》JavaInstrumentation是java.lang.instrument包提供的API,允许开发者在类被JVM加载时对其进行修改... 目录一、什么是 Java Instrumentation主要用途二、核心概念1. Java Agent

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

k8s搭建nfs共享存储实践

《k8s搭建nfs共享存储实践》本文介绍NFS服务端搭建与客户端配置,涵盖安装工具、目录设置及服务启动,随后讲解K8S中NFS动态存储部署,包括创建命名空间、ServiceAccount、RBAC权限... 目录1. NFS搭建1.1 部署NFS服务端1.1.1 下载nfs-utils和rpcbind1.1

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red

Kotlin 协程之Channel的概念和基本使用详解

《Kotlin协程之Channel的概念和基本使用详解》文章介绍协程在复杂场景中使用Channel进行数据传递与控制,涵盖创建参数、缓冲策略、操作方式及异常处理,适用于持续数据流、多协程协作等,需注... 目录前言launch / async 适合的场景Channel 的概念和基本使用概念Channel 的

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I