Kafka 是否能够用作长期数据存储?

问题

“把 Kafka 做为长期存储有问题吗?” 这是一个很是常见的问题,咱们知道,只要把数据保留时间设置为“永久”,或者开启日志压缩,数据就会被一直保存sql

把数据长期存储在 Kafka,这个作法并不疯狂,不少人已经在这么用,而且 Kafka 的设计中也涵盖了这种用法,下面是一些实际应用的场景数据库

应用场景

(1)你有一个应用,使用了事件模式,并须要对变动日志进行存储,理论上可使用不少系统来存储日志,可是 Kafka 直接解决了不少此类场景的问题,例如日志的不可变,纽约时报就使用 Kafka 来存储他们全部文章的数据api

(2)在应用中有一个内存缓存,数据源于 Kafka,这时能够把 Kafka topic 中的日志压缩,应用从新启动时,从偏移量为0的位置从新读取数据到缓存缓存

(3)须要对来自 Kafka 的流数据进行流计算,当流计算逻辑发生变化时,咱们但愿从新计算一遍,这时就能够把偏移量置为0,重头计算分布式

(4)Kafka 常被用于捕获数据库的变动,关心数据变化的应用就能够从中获取变动记录,作相应的业务操做,这时出现了一个新的应用,须要所有的数据快照,若是对一个大型产品数据执行全量 dump 操做是不现实的,很是耗时,但咱们能够对 Kafka 中的记录在0偏移量从新加载一遍性能

为何能够?

这些长期存储的场景都是真实可行的,由于 Kafka 就是这么设计的spa

数据在 Kafka 中是持久化到硬盘的,有数据检查,有多副原本容错,而且持续累加的数据不会使性能变慢设计

实际应用案例中,已经有存储 PB 量级数据的 Kafka cluster 在运行日志

人们之因此对 kafka 长期存储数据的用法存在疑虑,是由于咱们一般认为 kafka 是一个消息队列队列

使用“消息队列”时有一个原则:不要在消息队列中存储消息

由于,读消息时就要移除这个消息、消息系统的扩张能力不足、消息系统也缺乏强壮的复制特性

传统消息系统不重视消息的存储,而 kafka 认为这点是很是关键的,认为消息系统的基础功能就是存储,即便一个消息很快被消费,那也是须要短暂的存储,必需要保证消费者可以接收到消息,必须提供容错存储机制

因此,kafka 的设计中有如下特色:

  1. kafka 存储可被从新读取的持久数据

  2. kafka 是一个分布式系统,以 cluster 形式运行,能够弹性的扩展和缩减,有容错复制系统,具备高可用性

  3. kafka 容许实时的数据流处理,而不是一次处理一条消息

kafka 已经不是一个传统的消息队列,而应该归类到“流处理平台”

Kafka 会成为数据库吗?

既然 kafka 这么牛,很适合长期储存,那么 kafka 会不会发展为一个数据库呢?

答案是不会,主要缘由有2个:

  1. 数据库主要是关于查询的,kafka 是顺序读写机制,若是加入随机访问机制,对 kafka 没有什么好处

  2. kafka 的发展目标不在于成为第1001个数据库,而是要成为主流的流数据处理平台,成为现代数字业务中的核心系统

小结

kafka 已经不是一个简单的消息系统,kafka 在不断壮大,有 connector 能够方便的链接其余系统,有 stream api 进行流计算,最近又推出 KSQL,流处理的代码都不用咱们写了,用 sql 就能够方便的进行流处理

相关文章
相关标签/搜索