Kafka可以作为数据存储吗

首先,Kafka消息是基于磁盘存储,持久化到硬盘,有数据检查,多副本容错,并且数据的保存时间可以设置的,所以,如果把数据保留策略设置为”永久“后者启用主题的日志压缩功能,那么数据就是可以被永久保留的,设计意图之一就是要作为数据存储系统,而且现在其实大家一直这么干了,但是为啥要这么做呢

 

应用场景:

① 你可能在应用程序里使用了缓存,并从 Kafka 上获取数据来更新缓存。你可以将 Kafka 的主题设置为压缩型日志,应用程序每次在重启时就可以从零偏移量位置重新刷新缓存

② 你的流式作业数据流来自 Kafka,在流式作业的逻辑发生变更后,需要重新计算结果。最简单的办法就是将偏移量重置为零,让新代码重新计算结果

③ Kafka 经常被用于捕获和分发数据库的变更事件。应用程序可能只需要最新的数据库变更,但却要处理完整的数据快照,而这是相当耗时的操作。但是,如果启用主题的日志压缩功能,就可以让应用程序直接从零偏移量位置重新加载数据

 

为什么大家认为不应该在kafka中存储数据呢?

这可能和大家的理解有关系,大家普遍吧kafka认为是一个消息队列系统,而消息队列有一些不成文的规则,而”不要在消息队列中保存消息“就是其中之一。之所以有这个原则,是因为传统的消息系统在消息读取后就被删除了,不能保存消息,且伸缩性查,缺乏健壮的复制机制。消息存储是消息系统的基础

但是,kafka也并非传统意义上的消息队列,它更像是一个分布式的日志文件系统后者是数据库,

 

它与传统消息系统之间的三个关键区别:

① Kafka 日志持久化,这些日志可以被重复读取和无限期保留

② Kafka 分布式系统:它以集群的方式运行,可以灵活伸缩,在内部通过复制数据提升容错能力和高可用性

③ Kafka 支持实时的流式处理,可以看成是一个流式处理平台

 

消息系统、存储系统、kafka关系

消息系统:传播的是”未来“的消息

存储系统:保存过去的某个时间写入的数据

流式处理(kafka):二者的结合体,可以写入过去的数据,也可以处理未来的消息

综上来说,Kafka 的核心就是一个持续的、基于时间排序的日志存文件系统

 

Kafka不可能取代其他存储引擎

数据库主要是关于查询,而kafka是基于磁盘的顺序读写,大家都知道磁盘的读取速度是非常慢的,如果加入随机访问机制,对kafka是没有好处的

Kafka的目标是一个流式数据处理平台,而不是数据存储系统。如果要查询,其数据可以被复制到其他数据库、缓存、流式处理器、搜索引擎上

posted @ 2022-05-17 15:28  蚂蚁力量  阅读(567)  评论(0编辑  收藏  举报