热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Kafka猛然醒来,突然变成了数据库

有时候,数据库就像一堆蜡板,可以堆叠和归整来进行更新;而如今,有时候数据库更像一条河流,形状取决于流经的地域,但是数据库在不断变化和流动,而这种流动恰恰比其他任何因素更加定义了驱动

有时候,数据库就像一堆蜡板,可以堆叠和归整来进行更新;而如今,有时候数据库更像一条河流,形状取决于流经的地域,但是数据库在不断变化和流动,而这种流动恰恰比其他任何因素更加定义了驱动业务发展的信息。没有时间使数据库持久化、整理并查询数据库。

在这种情况下,将数据库径直嵌入到该数据流中有其道理,这也正是Confluent所做的,这家公司使Apache Kafka实现了商业化,而Apache Kafka是由商务社交网络LinkedIn创建,在2011年初开源的一种分布式消息队列架构。众所周知,Kafka最初是一种数据流服务,将数据传送到诸如Hadoop之类的系统,但是它本身正在逐渐成为一个平台。实际上,KSQL数据流数据库正是将Kafka转变成一种正宗平台的那个缺失的环节,也是Confluent的联合创始人尼哈·纳克赫德(Neha Narkhede)长期想要搞的技术,他当初帮助开发了Kafka及相关的Samza数据流处理框架,这种框架在LinkedIn将Kafka和Hadoop混合起来。

我们生活在一个完全颠倒的世界,数据库正试图添加数据流函数,而数据流服务器正变成数据库。许多现代应用系统以消息传送为中心(比如金融服务应用已存在了几十年),尤其是需要为数百万、数千万甚至数十亿用户确保高性能的那些应用系统,然后数据流服务和数据库服务依托于这些应用。

KSQL覆盖在Kafka上面有其道理,但这并不意味着因此很容易将源源不断的数据流转换到外观感觉如同传统的SQL驱动型关系数据库的数据库。纳克赫德告诉IT外媒The Next Platform,SQL接口的主要目的是,为使用基于Kafka的数据流服务降低准入门槛,这就好比Hadoop上的SQL覆盖层旨在让普通的SQL用户更容易充分利用在Hadoop上运行的数据湖,而过去不得不编写MapReduce脚本,以便对它提出问题。

《Kafka猛然醒来,突然变成了数据库》
《Kafka猛然醒来,突然变成了数据库》

Kafka本身是结合Scala和Java编写而成的,Kafka Streams数据流处理器好比Spark Streaming、Flink及类似系统,将其表覆盖内容存储到分布式RocksDB数据存储系统中。(RocksDB是一种低级存储引擎(http://rocksdb.org/),处于谷歌Spanner数据存储系统的CockroachDB克隆版的核心,RocksDB本身源自Google开源、受到谷歌的BigTable和Spanner数据库服务启发的LevelDB键/值存储引擎。)RocksDB数据存储区在服务器集群上加以分片和分布,这恰恰为Kafka赋予了带宽和弹性。Samza将Hadoop的YARN作业调度程序和数据复制功能与Kafka(因而现在的KSQL)整合成一个应用程序框架。

编者注:当然了,如果哪天早上Kafka醒来,发现已变成了CockroachDB,那将会有趣得多。

KSQL是完全用Java编写的,这是Confluent从头开始创建的一种分布式实时SQL引擎,如今该公司开源该SQL引擎(采用Apache 2.0许可证),这与LinkedIn当初开源Kafka如出一辙。KSQL覆盖层支持各种数据流函数,比如开窗聚合以便流式传送表连接,目前正处于开发者预览版状态。纳克赫德表示,Confluent想在接下来的四到六个月,征集Kafka社区的反馈意见,看看如何才能最好地调整或改动,然后将其商用、用于生产环境。KSQL还没有准备好迎来黄金时段。

对于刚接触数据流的人来说,一个显而易见的问题是:为什么将数据库放到数据流层。

《Kafka猛然醒来,突然变成了数据库》
《Kafka猛然醒来,突然变成了数据库》

纳克赫德解释道:“大多数关系数据库用于对存储的数据执行按需查找和修改这类操作。KSQL目前还不是旨在执行查询――它很快会支持这种功能,而是旨在执行连续查询;从某种意义上来说,它正在彻底颠覆数据库。关系数据库拥有事务日志,这是系统的数据源或真相源(source of truth),而它拥有从该日志派生而来的表,表是最重要的构件。如果使用Kafka和KSQL,日志是最重要的构件,表是派生视图,并存储在RocksDB中,对这些表所作的更新可建模成数据流。KSQL就是位于Kafka数据流表上面的接口,你可以将数据作为数据流来读取(每个更新独立于所有其他更新),也可以作为表来读取(每个更新可能是对进入到数据流的上一个更新的更新)。一旦你有了数据流表,可以将它们连接起来,或者对它们执行聚合操作,或者在将来某个时候查询这些表。这样的好处是,表实际上与传统数据库中的表全然不同,原因就在于每当新的事件到达数据流,表不断加以更新。数据流进来时,查询会生成更多事件,或者更新表。”

关系数据库有一个类似的概念,名为物化视图(materialized view):信息发生变化后,物化视图会自动更新从许多数据库表的连接和聚合而来的派生表。源表中的数据若有更新,不断运行的查询会运行,但是这些数据和派生表必须不断被写入到数据库底层的磁盘存储设备。KSQL是为一直变化的数据设计的,而不是为很少变化的数据设计的,并不断流式传送可实时查询的物化视图。

往数据流引擎上添加SQL层的并非只有Confluent这一家。与之竞争的Apache Flink数据流处理框架有一个基于Apache Calcite项目的SQL引擎,该框架脱胎于柏林技术大学、柏林洪堡大学和波茨坦大学哈索普拉特纳研究所三方合作的Stratosphere项目。 PipelineDB是一个数据流数据库层,作为PostgreSQL数据库和Vertica数据库的扩展而运行。Spark Streaming是Spark内存数据库的数据流层,它有自己的DataFrame和SQL层,允许查询数据流。

严格来说,面向Kafka的KSQL数据库层不符合ANSI SQL标准,这主要是由于流媒体平台所需要的数据流函数不是那些数据库标准的一部分。关系数据库以表为中心,Kafka和KSQL以数据流为中心,KSAL数据库实际上来源于数据流。(就像Facebook创建的HBase数据库覆盖层其实来源于Hadoop分布式文件系统。)纳克赫德表示,关系数据库上司空见惯的SQL开窗函数需要大量修改,才能支持数据流。他补充说,在数据流系统上的所有SQL层都是如此。

Kafka Streams和KSQL不需要很庞大的系统。如果一台标准的X86服务器在两个插槽上有16个到24个核心,另外搭载合理的内存和磁盘数量,如果输入输出需要的话,可能还需要一些闪存,它就可以胜任重任。对于大多数客户来说,集群中Kafka节点之间的10 Gbps以太网结构(Ethernet fabric)就足够了。这完全取决于数据的性质和使用数据的应用。在延迟很重要的场合,可能需要容量更多的内存和闪存以及速度更快的网络,甚至可能需要更多的计算,或至少需要速度更快的计算。如果你需要更强大的数据流功能,只需要为Kafka集群添加更多节点。

商业级KSQL的包装和定价细节还没有透露,价格不太可能透露。


推荐阅读
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • MongoDB用户验证auth的权限设置及角色说明
    本文介绍了MongoDB用户验证auth的权限设置,包括readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase、cluster相关的权限以及root权限等角色的说明和使用方法。 ... [详细]
  • 2018深入java目标计划及学习内容
    本文介绍了作者在2018年的深入java目标计划,包括学习计划和工作中要用到的内容。作者计划学习的内容包括kafka、zookeeper、hbase、hdoop、spark、elasticsearch、solr、spring cloud、mysql、mybatis等。其中,作者对jvm的学习有一定了解,并计划通读《jvm》一书。此外,作者还提到了《HotSpot实战》和《高性能MySQL》等书籍。 ... [详细]
  • 本文介绍了在Python中使用zlib模块进行字符串的压缩与解压缩的方法,并探讨了其在内存优化方面的应用。通过压缩存储URL等长字符串,可以大大降低内存消耗,虽然处理时间会增加,但是整体效果显著。同时,给出了参考链接,供进一步学习和应用。 ... [详细]
  • Hadoop源码解析1Hadoop工程包架构解析
    1 Hadoop中各工程包依赖简述   Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。   GoogleCluster:ht ... [详细]
  • 《Spark核心技术与高级应用》——1.2节Spark的重要扩展
    本节书摘来自华章社区《Spark核心技术与高级应用》一书中的第1章,第1.2节Spark的重要扩展,作者于俊向海代其锋马海平,更多章节内容可以访问云栖社区“华章社区”公众号查看1. ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • nginx+多个tomcat
    学习nginx的时候遇到的问题:nginx怎么部署两台tomcat?upstream在网上找的资源,我在nginx配置文件(nginx.conf)中添加了两个server。结果只显 ... [详细]
  • 7.4 基本输入源
    一、文件流1.在spark-shell中创建文件流进入spark-shell创建文件流。另外打开一个终端窗口,启动进入spark-shell上面在spark-shell中执行的程序 ... [详细]
author-avatar
a-小胖子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有