​放弃数据库,改用Kafka!

长期以来,数据库一直充当着记录系统,它们以可靠且持久的方式存储和管理关键数据,也赢得了大多数公司的信赖。

但时代在变。许多新兴趋势正在影响当今数据的存储和管理方式,不得不让一些技术决策者们重新考虑数据存储究竟还有哪些创新途径。或许,关系型数据库开始变得不合时宜了。

本篇文章为诸君提供了一种“跳出框框”的记录系统的新玩法——为什么组织需要以不同的方式思考数据存储、使用 Kafka 作为记录系统的好处以及有哪些好的实现思路等,希望对诸君有所启发。

1、用Kafka替代关系数据库

KOR Financial是一家金融服务初创公司,他们为何会选择Kafka,而不是依赖关系数据库来存储数据呢?该公司的首席技术官Andreas,曾在Pivotal Software和VMware任职,主导过全球范围内的应用程序转型架构实践,他的这一决策有什么玄机?

先说结果,使用Kafka方案,能够“经济高效、安全地存储数十甚至数百PB的数据,并且保留数十年。”Andreas称,“采用这种方法不仅为数据架构提供了巨大的灵活性和可扩展性,而且还实现了精益和敏捷的运营。”

 

2、打破定式:数据库没有为规模设计

时代变了!身处数字化转型时代,数据驱动决策要求企业具备现代灵活的数据架构。而要实现这样的架构,成功的关键就在于,数据存储能否做到强大、可靠和灵活。

诚然,也看到了近二十年来,大数据、分布式系统、云计算和实时数据处理的兴起,但传统的数据库就成了掣肘的瓶颈,已无法跟上每秒生成数据的速度和数量。

首先,这是因为数据库并不是为规模而设计的。它们固有的僵化结构只会阻碍企业数据架构所需的灵活性。

作为服务全球企业金融贸易存储库以及互补模块化服务的运营商,数据的处理级别堪比炼狱。KOR Financial创新式地采取了数据流优先的方法,这也是它区别于竞争对手的地方。“的目标:彻底改变衍生品市场和全球监管机构对交易报告、数据管理和合规性的思考方式。”

以Kafka为架构核心,是一个思考方式上“质”的变化:因为这种架构能够捕获事件而不仅仅是状态。“将数据存储在Kafka而不是数据库中,并将其用作记录系统,就可以实现跟踪所有这些事件、处理它们并根据现在或将来的用例创建数据的物化视图。”

虽然其他贸易存储库和中介服务提供商经常使用Oracle Exadata 等数据库来满足其数据存储需求,但它可能非常昂贵并带来数据管理挑战。虽然它允许执行 SQL 查询,但挑战在于管理大型SQL数据库并确保这些系统内的数据一致性。

从事全球强制贸易报告业务,意味着要为多个管辖区提供服务,每个管辖区都有自己独特的数据模型和解释。如果将所有数据合并到单个架构或模型中,统一管理的任务就会变得越来越复杂。如果没有数据的历史概览,模式演变就具有挑战性,因为它是在特定版本的状态中具体化的,这进一步加剧了数据管理的困境。

另外,在处理大量数据时,传统数据库的可扩展性受到限制。相比之下,将Confluence Cloud用于Kafka及其无限存储,就可以允许用户在Kafka中存储任意数量的数据,只要需要,就可以存储任意长时间,而只需为所使用的存储付费。

虽然分区数量是一个考虑因素,但可以放入 Confluence Cloud 中的数据量是无限的,并且存储空间会根据需要自动增长,并且保留时间不受限制。

它使技术人员能够完全抽象出数据在底层的存储方式,并提供一种经济高效的方式来保存所有数据。更好地是,这使企业能够以一种不受限制的方式扩展自身的运维,并以想要的任何表示方式来解释事件,自由度很高。

3、会整活的Kafka:重播事件、回放数据

使用Kafka作为记录系统的显着优势之一在于它能够回放数据,这是传统数据库所缺乏的原生功能。对于金融场景来说来说,此功能与“存储事件与状态”的偏好非常契合,这对于准确计算交易状态至关重要。

“我们收到一大堆delta(增量),我们称之为提交或消息,它们在给定的时间点对贸易状态有贡献。每个传入的消息或事件都会修改交易并更改其当前状态。如果在我们的流处理逻辑过程中发生任何错误,都可能导致不正确的状态输出。”

如果该信息直接存储在固定表示或传统数据库中,则导致该状态的事件就会丢失。即使对这些事件的解释不正确,也无法重新审视导致该解释的背景。

然而,通过在不可变且仅追加的日志中保留事件的历史顺序,Kafka 提供了重播这些事件的能力。

鉴于业务的监管要求,必须以不可变的方式存储所有内容。需要捕获并保留最初收到的所有数据。虽然大多数数据库(包括SQL)都允许修改,但 Kafka 在设计上禁止对其不可变日志进行任何更改。

使用 Kafka 作为记录系统并拥有无限存储意味着可以回到过去,分析事情是如何展开的,更改的解释,管理时间点历史更正并创建替代表示,而不会影响当前的操作工作负载。

这种灵活性提供了显着的优势,尤其是在高度监管的市场中运营时,能及时有效地纠正错误,这一点至关重要。

 

4、灵活性征服一切 

使用 Kafka 作为记录系统为的数据架构带来了显著的灵活性。可以针对每个用例建立特定的视图,并使用与这些需求精确一致的专用数据库或技术,然后读取包含这些事件来源的 Kafka 主题。

以客户数据管理为例。可以使用专门为该用例设计的图数据库,而无需围绕图数据库构建整个系统,因为它只是基于 Kafka 的视图或投影。

这种方法允许根据用例使用不同的数据库,而无需将它们指定为的记录系统。相反,它们充当数据的表示,使能够保持灵活性。否则,就将被插入数据库、数据湖或数据仓库,这些都是僵化的,不允许将数据转换为针对特定用例优化的表示形式。

从初创公司的角度来看,这种灵活性也使能够避免过早地被锁定在某个特定的技术方向。KOR成立于2021年,遵循将决策推迟到最后一个负责时刻的架构最佳实践,可以推迟对特定技术选择的承诺,直到它是必要的并且符合的要求。这种方法意味着,可以随着业务需求的发展而调整和发展的技术环境,并实现未来的可扩展性和灵活性。

除了灵活性之外,模式注册表(Schema Registry)的使用还确保了数据的一致性,因此开发者就可以知道数据的来源和与之相关的模式。Confluence Cloud 还允许通过架构注册表设置明确的演进策略。例如,如果将所有数据放入数据湖中,那么管理该数据的所有不同版本、不同模式和不同表示就会变得更加困难。

5、切换技术的背后:事件驱动思维

放弃数据库,而采用 Kafka 作为存储数据的记录系统,看起来是一件非常新鲜的做法。

并不是所有公司上来就能接受这种做法,Andreas认为,这需要公司培育“事件驱动模型”的文化,并且这种思维转变还应该扩展到通过流处理开发应用程序的方式,不然就会引起兼容性不匹配的问题。

这样做的目的,是帮助团队成员意识到:他们正在处理不可变的数据,如果他们编写了某些内容,他们就不能直接进去更改它。

Andreas还建议道,要实现以Kafka为核心的架构,可以从理解“流处理和事件作为证明系统的重要性”的团队开始。通过展示该团队内的优势,他们可以充当其他团队的大使,鼓励采用事件作为最终真相,并采用以状态作为最终表示的流处理。

6、写在最后:Kafka可以取代数据库吗?

早在2017年,Apache Kafka和Confluent的共同创始人Jay Kreps就明确表示过“ 可以在Apache Kafka中存储数据 ”。

而且,数据可以在Kafka中想保存多久就保存多久。《纽约时报》的Apache Kafka发布是用Kafka永远存储数据的著名例子。Kafka被用来存储《纽约时报》曾经发布的所有文章,并取代了他们基于API的方式。

那么Kafka可以取代数据库吗?显然并不现实,即便文中提到了许多传统数据库的“不合时宜”之处,比如,“数据库并不是为规模设计的”等观点,但也仅限于金融等强实时性场景中的方案。

不过,倡导的打破传统数据库的思维定式去重新设计底层架构的方法,值得反思和借鉴。

7、相关领域拓展

近10年间,甚至连传统企业都开始大面积数字化时,我们发现开发内部工具的过程中,大量的页面、场景、组件等在不断重复,这种重复造轮子的工作,浪费工程师的大量时间。

针对这类问题,低代码把某些重复出现的场景、流程,具象化成一个个组件、api、数据库接口,避免了重复造轮子。极大的提高了程序员的生产效率。

推荐一款程序员都应该知道的软件JNPF快速开发平台,采用业内领先的SpringBoot微服务架构、支持SpringCloud模式,完善了平台的扩增基础,满足了系统快速开发、灵活拓展、无缝集成和高性能应用等综合能力;采用前后端分离模式,前端和后端的开发人员可分工合作负责不同板块,省事又便捷。体验官网:https://www.jnpfsoft.com/?csdn

还没有了解低代码这项技术可以赶紧体验学习!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/99095.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker Compose 安装使用 教程

Docker Compose 1.1 简介 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的 快速编排 。从功能上看,跟 OpenStack 中的 Heat 十分类似。 其代码目前在 https://github.com/docker/compose 上开源。 Compose 定位是 「定义和运行多个…

C# VS调试技巧

一.按照条件调试步骤 ①在需要代码执行的行打断点 ②触发此断点,让代码执行到此处 ③鼠标滑至在断点处,点击设置 ④设置断点条件,如下图所示 二、多线程调试技巧 ①在需要代码执行的行打断点 ②触发此断点,让代码执行到此处…

Sharding-JDBC分片策略

Sharding-JDBC分片策略 包含分片键和分片算法,由于分片算法的独立性,将其独立抽离。真正可用于分片操作的是分片键 分片算法,也就是分片策略。目前提供5种分片策略。 一个好的分片策略好的分片键好的的分片算法 1. 标准分片策略 对应Stan…

如何在访问一个页面时,将访问时刻的时间显示在页面上

1.如何在访问一个页面时,将访问时刻的时间显示在页面上 GetMapping("/append") public ModelAndView append() {ModelAndView mvnew ModelAndView("expense/append");String date LocalDate.now().toString();mv.addObject("date",d…

百度文心一言GPT免费入口也来了!!!

文心一言入口地址:文心一言能力全面开放 文心一言是百度全新一代知识增强大语言模型,文心大模型家族的新成员,能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。 文心一言的技…

从钉钉到金蝶云星空通过接口配置打通数据

从钉钉到金蝶云星空通过接口配置打通数据 对接系统钉钉 钉钉(DingTalk)是阿里巴巴集团打造的企业级智能移动办公平台,是数字经济时代的企业组织协同办公和应用开发平台。钉钉将IM即时沟通、钉钉文档、钉闪会、钉盘、Teambition、OA审批、智能…

生成对抗网络(GAN):在图像生成和修复中的应用

文章目录 什么是生成对抗网络(GAN)?GAN在图像生成中的应用图像生成风格迁移 GAN在图像修复中的应用图像修复 拓展应用领域总结 🎉欢迎来到AIGC人工智能专栏~生成对抗网络(GAN):在图像生成和修复…

阿里云CDN缓存预热与刷新以及常见的故障汇总

文章目录 1.为CDN缓存的文件增加过期时间2.CDN缓存预热配置3.CDN缓存刷新配置4.常见故障 CDN缓存预热指的是主动将要缓存的文件推送到全国各地的CDN边缘加速器上,减少回源率,提供命中率。 缓存刷新指的是后期上传了同名的文件,之前的缓存已经…

【LeetCode】剑指 Offer Ⅱ 第5章:哈希表(6道题) -- Java Version

题库链接:https://leetcode.cn/problem-list/e8X3pBZi/ 类型题目解决方案哈希表的设计剑指 Offer II 030. 插入、删除和随机访问都是O(1) 的容器HashMap ArrayList ⭐剑指 Offer II 031. LRU 缓存HashMap 双向链表 ⭐哈希表的应用剑指 Offer II 032. 有效的变位…

气候变化下的DNDC模拟

DNDC(Denitrification-Decomposition,反硝化-分解模型)是目前国际上最为成功的模拟生物地球化学循环的模型之一,自开发以来,经过不断完善和改进,从模拟简单的农田生态系统发展成为可以模拟几乎所有陆地生态…

计算机毕业设计之基于Python+MySQL的健身房管理系统(文档+源码+部署教程)

系统主要采用python技术和MySQL数据库技术以及Django框架进行开发。系统主要包括个人中心、用户管理、教练管理、健身课程管理、健身器材管理、健身记录管理、身体数据管理、在线留言、系统管理、订单管理等功能,从而实现智能化的健身房管理方式,提高健身…

Jenkins 持续集成:Linux 系统 两台机器互相免密登录

背景知识 我们把public key放在远程系统合适的位置,然后从本地开始进行ssh连接。 此时,远程的sshd会产生一个随机数并用我们产生的public key进行加密后发给本地,本地会用private key进行解密并把这个随机数发回给远程系统。 最后&#xf…

excel怎么设置任意选一个单元格纵横竖横都有颜色

有时excel表格内容过多的时候,我们通过excel设置任意选一个单元格纵横,竖横背景颜色,这样会更加具有辨识度。设置方式截图如下 设置成功后,预览的效果图

计网第四章(网络层)(五)

目录 静态路由配置 默认路由: 特定主机路由: 示例: 广播域和冲突域: 静态路由配置 在第四节(计网第四章(网络层)(四)_永无魇足的博客-CSDN博客)有提到过…

【C++】C++11新特性 lambda表达式

C11新特性 lambda表达式1、引入2、lambda表达式语法3、 捕获列表说明4、 lambda表达式的原理5、 lambda对象的大小 lambda表达式 1、引入 在C98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法,如果待排序元素为自定义类…

BookStack开源免费知识库docker-compose部署

BookStack(书栈)是一个功能强大且易于使用的开源知识管理平台,适用于个人、团队或企业的文档协作和知识共享。 一、BookStack特点 简单易用:BookStack提供了一个直观的用户界面,使用户能够轻松创建、编辑和组织文档多…

8. 损失函数与反向传播

8.1 损失函数 ① Loss损失函数一方面计算实际输出和目标之间的差距。 ② Loss损失函数另一方面为我们更新输出提供一定的依据。 8.2 L1loss损失函数 ① L1loss数学公式如下图所示,例子如下下图所示。 import torch from torch.nn import L1Loss inputs torch.tens…

visual studio编写DLL,python调用

选择第一个c DLL&#xff0c; 然后项目源文件下右击新建项&#xff0c;这里名字随便取&#xff0c;在代码中输入一下内容&#xff1a; #include <iostream>#define EXPORT extern "C" __declspec(dllexport)EXPORT int sub(int a, int b) {return a - b; } 在…

【GO】LGTM_Grafana_Tempo(1)_架构

最近在尝试用 LGTM 来实现 Go 微服务的可观测性&#xff0c;就顺便整理一下文档。 Tempo 会分为 4 篇文章&#xff1a; Tempo 的架构官网测试实操跑通gin 框架发送 trace 数据到 tempogo-zero 微服务框架使用发送数据到 tempo 第一篇是关于&#xff0c;tempo 的架构&#xff…
最新文章