热门标签 | 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的包装和定价细节还没有透露,价格不太可能透露。


推荐阅读
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • RocketMQ在秒杀时的应用
    目录一、RocketMQ是什么二、broker和nameserver2.1Broker2.2NameServer三、MQ在秒杀场景下的应用3.1利用MQ进行异步操作3. ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 在本地环境中部署了两个不同版本的 Flink 集群,分别为 1.9.1 和 1.9.2。近期在尝试启动 1.9.1 版本的 Flink 任务时,遇到了 TaskExecutor 启动失败的问题。尽管 TaskManager 日志显示正常,但任务仍无法成功启动。经过详细分析,发现该问题是由 Kafka 版本不兼容引起的。通过调整 Kafka 客户端配置并升级相关依赖,最终成功解决了这一故障。 ... [详细]
  • Kafka 是由 Apache 软件基金会开发的高性能分布式消息系统,支持高吞吐量的发布和订阅功能,主要使用 Scala 和 Java 编写。本文将深入解析 Kafka 的安装与配置过程,为程序员提供详尽的操作指南,涵盖从环境准备到集群搭建的每一个关键步骤。 ... [详细]
  • 一家位于长沙的知名网络安全企业,现面向全国诚聘高级后端开发工程师,特别欢迎具有一线城市经验的技术精英回归故乡,共创辉煌。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 本文总结了一次针对大厂Java研发岗位的面试经历,探讨了面试中常见的问题及其背后的原因,并分享了一些实用的面试准备资料。 ... [详细]
  • 本文探讨了有效学习专业技能的方法,包括编程语言、操作系统、软件组件及前沿技术的探索,旨在为初学者提供一套系统的自学指南。 ... [详细]
  • 本文总结了近年来在实际项目中使用消息中间件的经验和常见问题,旨在为Java初学者和中级开发者提供实用的参考。文章详细介绍了消息中间件在分布式系统中的作用,以及如何通过消息中间件实现高可用性和可扩展性。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 在当今的软件开发领域,分布式技术已成为程序员不可或缺的核心技能之一,尤其在面试中更是考察的重点。无论是小微企业还是大型企业,掌握分布式技术对于提升工作效率和解决实际问题都至关重要。本周的Java架构师实战训练营中,我们深入探讨了Kafka这一高效的分布式消息系统,它不仅支持发布订阅模式,还能在高并发场景下保持高性能和高可靠性。通过实际案例和代码演练,学员们对Kafka的应用有了更加深刻的理解。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
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社区 版权所有