前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kafka 能成为一个数据库吗?

Kafka 能成为一个数据库吗?

作者头像
哒呵呵
发布2021-03-16 14:36:05
1.4K0
发布2021-03-16 14:36:05
举报
文章被收录于专栏:鸿的学习笔记

近些年,圈子里有一个讨论很有趣,是关于 Kafka 到底可不可以认为是一个数据库,这个讨论起始于2017年,并由此衍生出了 KSQL、KarelDB 等基于 Kafka 完成的数据库。这篇文章简单回顾下争论双方的观点。

正方观点是支持 Kafka 是数据库,他们认为 Kafka 有潜力成为数据的 source-of-truth ,也就是说取代传统数据库的某一项职能。

反方观点则认为 Kafka 不是一个数据库。

正方观点

首先,讨论 Kafka 是不是数据库的起点来源于 Apache Kafka 和 Confluent 的联合创始人 Jay Kreps 在 2017 年的文章It's Okay To Store Data In Kafka(稍微解释下,Jay Kreps 也是网上流传很广的The Log: What every software engineer should know about real-time data's unifying abstraction的作者)。在It's Okay To Store Data In Kafka这篇文章里作者认为 Kafka 不应该仅仅是一个消息队列,也可以实现日志存储功能,用户可以基于 Kafka 里的存储的日志回放任一时刻的数据快照。注意:此时,Jay Kreps 依然认为 Kafka 不能作为一个通用数据库使用。

直到is apache kafka a database the 2020 update这篇文章的诞生(其实前面还有martin kleppmann对数据库的讨论Is Kafka a Database?),又一次引发了 Kafka 到底能不能作为一个数据库使用的讨论。在这篇文章里,主要观点有下面几个:

  • 存储是 Kafka 的主要原则之一,因此,根据你的需求和定义,Kafka 是可以作为数据库来使用的;
  • "Kafka Core"(指的是 Kafka brokers 及其分布式提交日志、复制、分区、保证排序等概念)可以与数据库的 ACID(Atomicity、Consistency、Isolistency、Isolation、Durability)事务属性相匹配。

并由此得出了一个结论:

Kafka 是一个数据库,提供了 ACID 保证,然而,它的工作方式与其他数据库不同。Kafka 也不是要取代其他数据库,相反,它是你的工具集中的一个补充工具。

反方观点

反方观点很简单,他们认为 Kafka 没有传统数据库的数据模型,也没有索引机制,也没有很好地查询优化,最重要的 Kafka 没有严格的隔离机制,也就无从谈起在并发读写情况下的数据准确性。

我的观点

关于 Kafka 是一个数据库的理论基础来源于《Streaming Systems》中提到的流和表的一体两面,表是静态的数据,流是动态的数据。简而言之:

流平台捕捉事件,将事件形成事件流。事件流按照事件的顺序记录了真实世界发生的历史。也就是说:流代表了过去和现在:当时间从今天走向明天,或者从这一毫秒走到下一毫秒,新的事件会持续不断地被追加到历史中。 数据库的表代表的是世界在某个时间点的状态,通常是“现在”。表是事件流的一个视图,在捕捉到新事件时就会更新这个视图。

Kafka 团队就在试图将上述理论变为现实,在某种意义上实现流和表的统一,这个时候 Kafka 也就成为了所谓的 source-of-truth。

理想是美好的,现实是残酷的。

不是使用 SQL 查询数据就可以认为是数据库,数据库也不仅仅具有存储功能,Kafka 缺失了数据库应该有的索引、事务等特性。所以我认为:Kafka 最好的定位还是作为一个事件流的处理中心,用于保证各个不同系统的数据一致性,而不是取代传统的数据库。

参考文章:

  1. https://martin.kleppmann.com/2018/10/17/kafka-summit.html
  2. https://davidxiang.com/2021/01/10/kafka-as-a-database/
  3. https://www.infoq.cn/article/aeefntmytyucupxquttf
  4. https://www.infoq.cn/article/wmb56ukwlg12pwfljamg
  5. https://www.confluent.io/blog/okay-store-data-apache-kafka/
  6. https://www.zhihu.com/column/p/29059530
  7. https://www.infoq.cn/article/rt4tqsckirxxxj06es2m
  8. https://blog.csdn.net/Gavin_ke/article/details/105762088
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正方观点
  • 反方观点
  • 我的观点
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档