最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

使用 Kafka 和动态数据网格进行流式数据交换

  • 2022-02-21
  • 本文字数:5244 字

    阅读完需:约 17 分钟

使用 Kafka 和动态数据网格进行流式数据交换

数据网格(Data Mesh)是近来受到广泛重视的一种新型架构范式。每家数据和平台提供商都说明了怎样使用自己的平台来构建最好的数据网格。数据网格的故事包括像亚马逊云科技这样的云计算提供商,像 Databricks 和 Snowflake 这样的数据分析提供商,以及像 Confluent 这样的事件流解决方案。本文详细讨论了这一原理,并探索了为何没有一种技术最适合构建数据网格。本文列举的例子表明,为何像 Apache Kafka 这样的开放和可扩展的分布式实时平台一般都是数据网格基础设施的核心,而其他数据平台则是为了解决业务问题而提供支持。

静态数据与动态数据


在我们开始数据网格的讨论之前,必须先弄清楚静态数据和动态数据之间的差异和关联性。

 

  • 静态数据:数据被摄取并存储在一个存储系统中(数据库、数据仓库、数据湖)。为存储系统执行业务逻辑和查询。日常用例包括:使用业务智能工具的报告、机器学习中的模型训练,以及诸如洗牌、映射和 Reduce 等复杂的批处理分析。因为数据是静态的,所以处理对于实时用例来说太迟了。

  • 动态数据:当将新的事件传送到平台上后,对这些数据进行了连续的处理和关联。实时执行业务逻辑和查询。常见的实时用例包括库存管理、订单处理、欺诈检测、预测性维护,和很多其他的用例。

实时数据优于慢速数据

 

在几乎任何行业的所有用例中,实时数据都优于慢速数据。所以,问问你自己或者你的业务团队,他们希望或者需要在下一个项目如何消费和处理数据。静态数据和动态数据是有取舍的。因此,这两个概念是相辅相成的。基于此,现代云计算的基础设施在其架构中同时应用了这两个概念。《使用 Kafka 的无服务器事件流与亚马逊云科技 Lakehouse 的结合》(Serverless Event Streaming with Kafka combined with the AWS Lakehouse)是一个很好的资源,可以了解更多的信息。


但是,尽管将批处理系统连接到实时神经系统是可能的,但反过来说,将实时消费者连接到批处理存储就不太可能了。关于 《Kappa 与 Lambda 架构》(Kappa vs. Lambda Architecture)文章的讨论,将会给我们带来更多的见解。

 

Kafka 是一种数据库。因此,对于静态数据,也可以使用。比如,如果要确保排序,那么历史事件的可重放性就是很多用例所必需的,也是有帮助的。但是,Kafka 的长期存储存在着一定的局限性,例如,它的查询功能受到了限制。所以,对于很多用例来说,事件流与其他存储系统是相互补充而非相互竞争的。

数据网格:一种架构范式

 

数据网格是一种实现模式(不同于微服务或域驱动设计),但应用于数据。ThoughtWorks 发明了这个词。你可以在网络上发现很多资源。Zhamak Dehghani 在 2021 年欧洲 Kafka 峰会上就“如何构建数据网格基础及其与事件流的关系”(How to build the Data Mesh Foundation and its Relation to Event Streaming) 做了精彩演讲。

域驱动 + 微服务 + 事件流

 

数据网格并非一种全新的范式。它产生了若干具有历史意义的影响:



这种架构的范式能够大规模解锁分析数据,为整个组织的机器学习、分析或数据密集型应用等大量消费场景快速解锁了对数量不断增加的分布式域数据集的访问。数据网格解决了传统的集中式数据湖或数据平台架构的常见故障模式。

数据网格是一种逻辑视图,而非物理视图!

 

数据网格转变为借鉴现代分布式架构的范式:将域视为第一流的关注点,应用平台思维来创建一个自助式数据基础设施,将数据视为一种产品,并实施开放的标准化,从而实现具有互操作的分布式数据产品的生态系统。

 

下面是一个数据网格的例子:



概括:数据网格结合了现有的范式,包括域驱动设计、数据集市、微服务和事件流

数据即产品

 

但是,差异的一面集中在了产品思维(“数据的微服务”),即将数据作为一流的产品。数据产品是事件流与“动态数据”的完美结合,从而构建出创新的、全新的实时用例。


具有事件流的数据网格

为什么事件流很适合数据网格?

 

流是实时的,所以一旦有新的信息,你可以立即在整个网格中传播数据。流还具有持久性和可重放性,因此它们可以让你用一个基础设施同时捕获实时和历史数据。由于它们是不可改变的,因此它们是一种很好的记录来源,可以帮助治理。

 

在大部分创新用例中,动态数据是关键。正如之前所讨论的,在几乎所有的情况下,实时数据都优于慢速数据。因此,数据网格架构的核心是一个事件流平台,这是合理的。它提供了真正的解耦、可扩展的实时数据处理,以及跨边缘、数据中心和多云的高可靠性操作。

Kafka 流 API:移动数据的事实标准


Kafka API 是事件流的事实标准。我不再对此进行重复的讨论。在我们进入“Kafka + 数据网格”内容之前,这里有一些参考资料:

 

Kafka 支持的数据网格

 

我强烈推荐大家观看 Ben Stopford 和 Michael Noll 关于《Apache Kafka 和数据网格》(Apache Kafka and the Data Mesh)的演讲。本文的几张截图也是来自那个演讲。为我的两位同事点赞!演讲探讨了数据网格的关键概念以及它们与事件流的关系:

 

  • 域驱动的去中心化

  • 数据作为一种自助式服务的产品

  • 一流的数据平台

  • 联合治理

 

下面让我们看看,Kafka 的事件流如何融入数据网架构,以及其他解决方案,如数据库或数据湖如何与之互补。


数据产品,一种“数据世界的微服务”:

 

  • 数据网格中的一个节点,位于域内。

  • 在网格中产生并可能消费高质量的数据。

  • 封装了其功能所需的所有元素,即数据和代码加基础设施。

数据网格不只是一种技术!

 

数据网格基础设施的核心必须是实时、解耦、可靠和可扩展的Kafka 是一个现代的云原生企业集成平台(今天也经常被称为 iPaaS)。因此,Kafka 为数据网格的基础提供了一切功能

 

但是,并非所有的组件都可以或者应当以 Kafka 为基础。为问题选择合适的工具。在接下来的几节中,我们将探索 Kafka 原生技术以及其他的解决方案在数据网格中的应用。

利用 Kafka Stream 和 ksqlDB 在数据产品中进行流处理

 

将来自一个或多个数据源的信息,基于事件的数据产品实时地聚合并将其关联起来。无状态和有状态的流处理是通过 Kafka 原生工具(如 Kafka Streams 或 ksqlDB)实现的:


数据产品中的各种协议和通信范式:HTTP、gRPC、MQTT 等

 

很明显,并非所有的应用都仅将事件流用作技术和通信范式。上图显示了一个消费者应用,它还可以使用 HTTP 或 gRPC 这样的请求/响应技术进行拉取查询。相比之下,另一个应用则用任何编程语言(如 Java、Scala、C、C++、Python、Go 等)的原生 Kafka 消费者持续消费流式推送查询。

 

数据产品往往包括一些互补的技术。例如,如果你构建了一个车联网基础设施,那么你很有可能会利用 MQTT 进行“最后一公里”的整合,将数据摄入 Kafka,然后再通过事件流来进行处理。《Kafka + MQTT 博客系列》(Kafka + MQTT Blog Series)是关于如何利用互补性技术来构建数据产品的一个典型实例。

数据产品内的各种解决方案:事件流、数据仓库、数据湖等

 

微服务架构的美妙之处在于,每个应用都可以选择合适的技术。一个应用程序可以包含数据库、分析工具其他补充性组件,也有可能不包括。数据产品的输入和输出数据端口应该与选定的解决方案无关:



Kafka Connect 是正确的 Kafka 原生技术,可以将其他技术和通信范式与事件流平台连接起来。评估你是否需要另一个集成中间件(如 ETL 或 ESB),或者 Kafka 基础设施是否是数据网内的数据产品更好的企业集成平台(iPaaS)

全球流数据交换

 

数据网格的概念与全球部署有关而不只是局限于某一项目或区域。多个 Kafka 集群是常态,而非例外。很久以前,我就写过《客户将 Kafka 的事件流用于全球架构》(Event Streaming with Kafka in global architectures) 的文章。

 

目前有多种架构可以将 Kafka 部署到不同的数据中心和不同的云上。某些用例要求较低的延迟,将某些 Kafka 的实例部署到边缘或者 5G 区域。其他的用例,包括在全球各地、国家和大陆之间进行数据复制,用于灾难恢复、聚合或分析用例。

 

下面是一个例子,跨越亚马逊云科技、Azure、GCP 或阿里巴巴等多个云计算提供商和内部/边缘站点的流式数据网格



这个例子显示了上述章节中所讨论的数据网格的所有特性:

 

  • 跨域和基础设施的分布式实时基础设施

  • 云内和云间的域之间的真正解耦

  • 几种通信范式,包括数据流、RPC 和批处理

  • 与传统和云原生技术的数据集成

  • 在能增加价值的地方进行连续的流处理,并在一些分析汇总中进行批处理

实例:汽车行业跨域的流数据交换

 

以下是汽车行业的一个实例,显示了在不同的公司中,独立的利益相关者是怎样利用公司内部的流数据进行交换的:



创新永远不会止于自己的边界。流复制适用于所有实时性优于慢速数据的用例(对大多数场景有效)。举几个例子:

 

  • 从供应商到 OEM 到中间商到售后的端到端供应链优化

  • 跨国追踪溯源

  • 第三方附加服务与自身数字产品的整合

  • 嵌入和组合外部服务的开放 API,以建立一个新产品。

 

我可以继续列举下去。许多数据产品都需要通过第三方进行大规模的实时访问。在这种情况下,有些 API 网关或 API 管理工具就会发挥作用。

 

一个 由 Kafka 支持的流数据交换的现实世界的实例是移动服务 Here Technologies。他们公开了 Kafka API,可以直接从其映射服务中获取流数据(作为他们的 HTTP API 的一个替代选择):



但是,即便所有的合作伙伴都在自己的架构中使用 Kafka,那么直接向外界公开 Kafka API 并不一定总是正确的。Kafka 生态系统的某些技术能力(例如访问控制或连接到成千上万的设备),以及缺失的业务功能(如货币化或报告),使得事件流基础设施之上的 API 层在许多实际部署中发挥作用。

用于第三方集成和流 API 管理的开放 API

 

API 网关和 API 管理工具有很多种类,包括开源框架、商业产品和 SaaS 云产品。功能包括技术路由、访问控制、货币化和报告

 

然而,大多数人仍然以 RPC 的方式实现开放 API 的概念。我猜 95% 以上的人还在使用 HTTP(S) 来使 API 能够被其他利益相关者(例如其他业务部门或外部各方)访问。如果数据需要实时地大规模处理,那么 RPC 在流数据网格架构中就没有什么意义了。

 

事件流和 API 管理之间仍然存在阻抗不匹配的问题。但是,现在情况有所好转。像 AsyncAPI 这样的规范,自称是“定义异步 API 的行业标准”,还有类似的方法为数据流世界带来了开放 API。我那篇名为《Kafka 与 MuleSoft、Kong 或 Apigee 等工具的 API 管理》(Kafka versus API Management with tools like MuleSoft, Kong, or Apigee)的论文,如果你愿意对此进行更深入的探讨,那么它依然是非常正确的。IBM API Connect 是最早通过 Async API 集成 Kafka 的厂商之一。


从 RPC 到流 API 的演变,一个很好的例子就是机器学习领域。《用 Kafka 原生模型部署流式机器学习》(Streaming Machine Learning with Kafka-native Model Deployment)探讨了 Seldon 等模型服务器如何在 HTTP 和 gRPC 请求—响应通信之外用原生 Kafka API 增强他们的产品:

使用 Kafka 的流式数据网格之旅

 

范式的转变是很大的。数据网格不是免费午餐。对于微服务架构、领域驱动设计、事件流和其他现代设计原则,过去和现在都是如此。

 

与 Confluent 的事件流成熟度模型相类似,我们的团队描述了部署流式数据网格的历程:



这些努力在大多数情况下可能需要几年时间。这一转型不仅涉及技术层面,也涉及组织和业务流程的调整。我认为大部分公司都还处在起步阶段。告诉我你在这个旅途中发生了什么!

流数据交换作为数据网格的基础

 

数据网格是一种实施模式,而非特定的技术。然而,大多数现代企业架构需要一个分散的流数据基础设施,以便在独立的、真正解耦的域中构建有价值的创新数据产品。因此,Kafka 作为事件流的事实上的标准,在许多数据网格架构中起着重要的作用。

 

很多数据网格架构跨越了不同地区,甚至是大陆的许多域。部署在边缘、内部和多云上运行。这种集成连接到许多解决方案,具有不同通信范式的技术。

 

基于开箱即用的云原生事件流基础设施,可以构建一个现代化的数据网格。没有一个数据网格会使用单一的技术或者厂商。从你最喜欢的数据产品提供商(如亚马逊云科技、Snowflake、Databricks、Confluent 等)的鼓舞人心的帖子中学习,从而成功地定义并构建你的自定义数据网格。数据网格是一段旅程,并非一场大爆炸


作者介绍:

 

Kai Wähner,在 Confluent 担任技术布道师。他的主要专业领域是大数据分析、机器学习/深度学习、消息传递、集成、微服务、物联网、流处理和区块链等领域。他经常在国际会议上发言,如 JavaOne、O'Reilly 软件架构或 ApacheCon,为专业期刊撰写文章,并在他的博客(www.kai-waehner.de/blog)上分享他对新技术的经验。

 

原文链接:

 

https://dzone.com/articles/streaming-data-exchange-with-kafka-and-a-data-mesh

2022-02-21 11:306711

评论

发布
暂无评论
发现更多内容

Python 中的文本分类,2021Python面试真题精选干货整理

程序媛可鸥

Python 程序员 面试

架构实战营模块六作业

刘洋

#架构实战营 「架构实战营」

【愚公系列】2022年03月 RabbitMQ EasyNetQ的用法(window11+vs2022+.NET 6)

愚公搬代码

3月月更

百度交易中台之账房系统架构浅析

百度Geek说

百度 架构 后端 交易中台

解密GaussDB(for Influx)时序洞察

华为云开发者联盟

Influxdb 时序数据库 GaussDB(for Influx) 时序数据 时序洞察

18年程序员生涯,读了200多本编程书,挑出一些精华分享给大家

程序媛可鸥

Python 程序员 面试

Python3通过函数名调用函数的几种场景实现,贼厉害

程序媛可鸥

Python 程序员 面试

Newton迭代法开方(Python),最详细的docker中安装并配置redis

程序媛可鸥

Python 程序员 面试

百度一线工程师浅谈日新月异的云原生

百度Geek说

云原生 后端

NFS服务器原理、搭建、配置,Python面试题选择题

程序媛可鸥

Python 程序员 面试

OBV指标交易策略(累积能量潮与移动能量潮,成交量多空比率净额及相关应用原则)

程序媛可鸥

Python 程序员 面试

【愚公系列】2022年03月 Docker容器 Oracle的搭建

愚公搬代码

3月月更

【愚公系列】2022年03月 RabbitMQ 环境搭建和初步使用(window11+vs2022+.NET 6)

愚公搬代码

3月月更

【技术加油站】揭秘百度智能测试规模化落地

百度Geek说

百度 测试 后端 智能化测试

Girlfriend含苞待笑——一次性处理上百份文档,BAT这种大厂履历意味着什么

程序媛可鸥

Python 程序员 面试

【愚公系列】2022年03月 Docker容器 RabbitMQ集群的搭建

愚公搬代码

3月月更

【愚公系列】2022年03月 RabbitMQ之Erlang-Window11下的安装

愚公搬代码

3月月更

Matlab初级学习者,15个经典面试问题及回答思路

程序媛可鸥

Python 程序员 面试

复盘归因,提高交付质量的秘诀

老张

软件测试 交付质量 复盘归因

Python 蜻蜓fm有声书批量下载 支持账号登录 原创源码,斩获offer

程序媛可鸥

Python 程序员 面试

Python 金融量化 随机指标交易策略,闭关60天学懂NDK+Flutter

程序媛可鸥

Python 程序员 面试

Python两个内置函数locals 和globals,Python项目开发如何设计整体架构

程序媛可鸥

Python 程序员 面试

这应该是目前市面上最好用的一款安卓兼容工具了!

优麒麟

Linux 开源 操作系统 优麒麟 KMRE

【愚公系列】2022年03月 Docker容器 Mysql主从复制的搭建

愚公搬代码

3月月更

Linux grep命令详解,手把手教你写

程序媛可鸥

Python 程序员 面试

Python 中的八个“无代码”特性,这原因我服了

程序媛可鸥

Python 程序员 面试

Python 中进程和线程的用法基本一样,跪了

程序媛可鸥

Python 程序员 面试

物联网应用开发实践案例-智慧农业

DS小龙哥

3月月更

15 本你必须阅读的 PyTorch 书籍,【2021Python最新学习路线

程序媛可鸥

Python 程序员 面试

python DataFrame数据分组统计groupby()函数,值得推荐

程序媛可鸥

Python 程序员 面试

Python 下载的9种方法,如何才能通过一线互联网公司面试

程序媛可鸥

Python 程序员 面试

使用 Kafka 和动态数据网格进行流式数据交换_架构_Kai Wähner_InfoQ精选文章