Debezium发布历史51

原文地址: https://debezium.io/blog/2019/03/14/debezium-meets-quarkus/

欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯.

Debezium 遇见 Quarkus
三月 14, 2019 作者: Jiri Pechanec
quarkus 示例 微服务 apache-kafka
上周Quarkus的发布引发了 Java 社区的极大兴趣:它采用同类最佳的 Java 库和标准精心打造,允许基于 GraalVM 和 OpenJDK HotSpot 构建 Kubernetes 原生应用程序。在这篇博文中,我们将演示基于 Quarkus 的微服务如何通过 Apache Kafka 使用 Debezium 的数据更改事件。为此,我们将了解如何将我们最近关于发件箱模式的文章中的发货微服务转换为基于 Quarkus 的服务。

Quarkus 是一个 Java 堆栈,旨在开发基于 Java 平台的云原生应用程序。它结合并紧密集成了成熟的库,如 Hibernate ORM、Vert.x、Netty、RESTEasy 和 Apache Camel,以及来自Eclipse MicroProfile计划的 API,如Config或Reactive Messaging。使用 Quarkus,您可以使用命令式和反应式风格开发应用程序,还可以根据需要组合这两种方法。

它旨在显着减少内存消耗并缩短启动时间。最后但并非最不重要的一点是,Quarkus 支持 OpenJDK HotSpot 和 GraalVM 虚拟机。使用 GraalVM 可以将应用程序编译为本机二进制文件,从而进一步减少资源消耗和启动时间。

要了解有关 Quarkus 本身的更多信息,我们建议您查看其优秀的入门指南。

使用 Quarkus 消费 Kafka 消息
在演示发件箱模式的原始示例应用程序中,有一个基于 Thorntail 的微服务(“发货”),它消耗 Debezium 连接器生成的事件。我们使用名为“shipment-service-quarkus”的新服务扩展了该示例。它提供与“shipment-service”相同的功能,但作为基于 Quarkus 而不是 Thorntail 的微服务实现。

这使得整体架构看起来像这样:
图片来自于官网原文
在这里插入图片描述

发件箱模式概述
要将原始服务改造为基于 Quarkus 的应用程序,只需要进行一些更改:

Quarkus 目前仅支持 MariaDB,不支持 MySQL;因此我们包含了服务正在写入的 MariaDB 实例

用于反序列化传入 JSON 消息的JSON -P API目前无法在没有 RESTEasy 的情况下使用(请参阅问题 #1480,该问题应该很快就会修复);因此代码已被修改为使用 Jackson API

使用 MicroProfile 定义的Reactive Messaging API代替 Kafka Consumer API来接收来自 Apache Kafka 的消息;作为该 API 的实现,使用SmallRye 项目提供的 API ,它捆绑为 Quarkus 扩展

虽然前两个步骤只是技术问题,但响应式消息传递 API 对原始消费者中的轮询循环进行了很好的简化。消费来自 Kafka 主题的消息所需要做的就是用 注释一个方法@Incoming,当新消息到达时它将自动调用:

@ApplicationScoped
public class KafkaEventConsumer {

@Incoming("orders")
public CompletionStage<Void> onMessage(KafkaMessage<String, String> message)throws IOException {// handle message...return message.ack();
}

}
“orders”消息源通过 MicroProfile Config API 进行配置,该 API 将其解析为从原始发件箱示例中已知的“OrderEvents”主题。

构建过程
构建过程与以前基本相同。现在不再使用 Thorntail Maven 插件,而是使用 Quarkus Maven 插件。

使用以下 Quarkus 扩展:

io.quarkus:quarkus-hibernate-orm:支持 Hibernate ORM 和 JPA

io.quarkus:quarkus-jdbc-mariadb:支持通过 JDBC 访问 MariaDB

io.quarkus:quarkus-smallrye-reactive-messaging-kafka:支持通过 MicroProfile Reactive Messaging API 访问 Kafka

他们还引入了一些其他扩展,例如quarkus-arc(Quarkus CDI 运行时)和quarkus-vertx(由反应式消息支持使用)。

此外,还需要进行两项更改:

native添加了一个名为的新构建配置文件;这用于使用 Quarkus Maven 插件将服务编译为本机二进制映像

native-image.docker-build运行构建时启用系统属性;这意味着本机映像构建是在 Docker 容器内完成的,因此不必在开发人员的计算机上安装 GraalVM

所有繁重的工作都是由 Quarkus Maven 插件完成的,该插件在pom.xml中配置如下:

shipment ... io.quarkus quarkus-maven-plugin ${version.quarkus} build ... native io.quarkus quarkus-maven-plugin ${version.quarkus} native-image true false 配置 与任何 Quarkus 应用程序一样,运输服务是通过application.properties文件配置的:

quarkus.datasource.url: jdbc:mariadb://shipment-db-quarkus:3306/shipmentdb
quarkus.datasource.driver: org.mariadb.jdbc.Driver
quarkus.datasource.username: mariadbuser
quarkus.datasource.password: mariadbpw
quarkus.hibernate-orm.database.generation=drop-and-create
quarkus.hibernate-orm.log.sql=true

smallrye.messaging.source.orders.type=io.smallrye.reactive.messaging.kafka.Kafka
smallrye.messaging.source.orders.topic=OrderEvents
smallrye.messaging.source.orders.bootstrap.servers=kafka:9092
smallrye.messaging.source.orders.key.deserializer=org.apache.kafka.common.serialization.StringDeserializer
smallrye.messaging.source.orders.value.deserializer=org.apache.kafka.common.serialization.StringDeserializer
smallrye.messaging.source.orders.group.id=shipment-service-quarkus
在我们的例子中它包含

发货服务写入数据的数据源(基于 MariaDB)的定义,

消息源的定义,由“OrderEvents”Kafka 主题支持,使用给定的引导服务器、反序列化器和 Kafka 消费者组 ID。

执行
Docker Compose 配置文件已通过两项服务进行了丰富:MariaDB 和新的基于 Quarkus 的运输服务。因此,在docker-compose up执行时,会同时启动两项运输服务:最初的基于 Thorntail 的服务和使用 Quarkus 的新服务。当订单服务收到新的采购订单并通过发件箱表将相应的事件导出到 Apache Kafka 时,两个发货服务都会处理该消息,因为它们使用不同的消费者组 ID。

性能数据
这些数字绝对不科学,但很好地表明了基于 Quarkus 的本机应用程序和 JVM 上运行的 Thorntail 服务之间的数量级差异:

夸库斯服务 刺尾服务
内存[MB]

33.8

第1257章

开始时间 [毫秒]

260

5746

应用程序包大小 [MB]

54

131

内存数据是通过htop实用程序获得的。测量启动时间直到打印有关应用程序准备就绪的消息。与所有性能测量一样,您应该根据您的设置和工作负载进行自己的比较,以深入了解特定用例的实际差异。

概括
在这篇文章中,我们成功地证明了可以在使用 Quarkus Java 堆栈编写的 Java 应用程序中使用 Debezium 生成的事件。我们还表明,可以提供二进制图像形式的应用程序,并提供粗略的性能数据,证明可以显着节省资源。

如果您想亲自体验将 Java 微服务部署为本机映像的美妙之处,可以在 Debezium 示例存储库中找到实现的完整源代码。如果您有任何问题或反馈,请在下面的评论中告诉我们;期待您的回音!

非常感谢 Guillaume Smet 审阅本文的早期版本!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

瓢虫目标检测数据集VOC格式400张

瓢虫&#xff0c;一种小巧玲珑、色彩鲜艳的昆虫&#xff0c;因其独特的形态和生态习性而受到广泛欢迎。 瓢虫的体型小巧&#xff0c;一般为圆球形&#xff0c;体色鲜艳&#xff0c;有红、黄、黑等多种颜色。它们通常有一个坚硬的外壳&#xff0c;可以保护自己不受天敌的侵害。…

Spark回归分析与特征工程

回归分析是统计学和机器学习中的一个重要分支&#xff0c;用于建立因变量与自变量之间的关系模型。在大数据领域&#xff0c;Apache Spark为回归分析提供了强大的工具和库&#xff0c;以处理大规模数据集。本文将深入探讨如何使用Spark进行回归分析以及如何进行特征工程&#x…

AtomicReference自旋加CAS保证对象引用原子性

AtomicReference类提供了对象引用的非阻塞原子性读写操作&#xff0c;并且提供了其他一些高级的用法&#xff0c;对象的引用其实是一个4字节的数字&#xff0c;代表着在JVM堆内存中的引用地址&#xff0c;对一个4字节数字的读取操作和写入操作本身就是原子性的 package Atomic…

【微服务合集】

文章目录 MyBatisPlusMyBatisPlus 注解WrapperMybatisPlus批量插入(saveBatch)MyBatisPlus 分页插件 DockerDockerfileDocker网络Docker部署项目 黑马微服务文档尚硅谷SpringBoot2尚硅谷SpringBoot3 MyBatisPlus MyBatisPlus 注解 TableName TableId TableField MyBatisPlu…

冬天夺去的清爽,可爱,春天都会还给你

这款外套上身可太时尚好看了 春天日常穿着或者出行游玩 应对早晚温差&#xff0c;兼具时尚和温度两不误 干净率性闲适的洒脱范整件衣服干净不失细节 下摆有橡筋收紧更加保暖了工艺方面也毫不逊色&#xff0c;防水拉链 四合扣、猪鼻扣一应俱全简直就是一件实用与时尚并存的…

Embedded-Project项目介绍

Embedded-Project项目介绍 Server后端项目后端启动连接数据库启动时可能遇到的问题架构介绍 web前端项目前端启动启动时可能遇到的问题架构介绍 前后端分离开发流程 项目地址&#xff1a; https://github.com/Catxiaobai/Embedded-Project Server后端项目 系统后端项目&#…

字符编码类型有哪些mysql中编码类型的定义

字符编码类型有很多种&#xff0c;以下是一些常见的字符编码类型&#xff1a; ASCII码&#xff1a;这是最常用的字符编码&#xff0c;它用7位二进制数表示一个字符&#xff0c;总共可以表示128种不同的字符。 ISO/IEC 8859-1码&#xff1a;这是一种8位字符编码&#xff0c;也被…

Unity中URP下的线性雾

文章目录 前言一、线性雾 雾效因子二、MixFog1、ComputeFogIntensity 雾效强度计算2、雾效颜色混合 lerp(fogColor, fragColor, fogIntensity); 前言 在之前的文章中&#xff0c;我们实现了URP下的雾效支持。 Unity中URP下的添加雾效支持 在上一篇文章中,我们解析了 URP 下统…

【读书】《白帽子讲web安全》个人笔记Ⅱ-1

目录 第二篇 客户端脚本安全 第2章 浏览器安全 2.1同源策略 2.2浏览器沙箱 2.3恶意网址拦截 2.4高速发展的浏览器安全 第二篇 客户端脚本安全 第2章 浏览器安全 近年来随着互联网的发展&#xff0c;人们发现浏览器才是互联网最大的入口&#xff0c;绝大多数用户使用互联…

[Flutter]WebPlatform上运行遇到的问题总结

[Flutter]WebPlatform上运行遇到的问题总结 目录 [Flutter]WebPlatform上运行遇到的问题总结 写在开头 正文 Q1、file_version_info.dart Q2、不兼容判断 Q3、跨域问题 Q4、flutter clean &#xff0c;无法删除build文件夹 其他 写在结尾 写在开头 Flutter项目已能在…

nvidia-smi 完整查看显卡型号

当我们在使用nvidia-smi查看显卡的型号的时候&#xff0c;会发现出现如下问题&#xff1a; 可以看到我们此时无法看到显卡的准确型号&#xff0c;只能看到NVIDIA GeForce ... 解决方法&#xff1a;使用如下命令即可完整显示显卡型号 nvidia-smi -L 如下所示&#xff1a;

前端 富文本编辑器原理

富文本编辑器是一种用于编辑和展示富文本内容&#xff08;包括文字、图片、视频等&#xff09;的工具。它通常提供了类似于Microsoft Word的功能&#xff0c;使用户可以对文本进行格式化、插入图片和链接、调整字体样式等操作。在前端开发中&#xff0c;我们可以使用JavaScript…

线性代数 --- 为什么LU分解中L矩阵的行列式一定等于正负1?

以下是关于下三角矩阵L的行列式一定等于-1的一些说明 笔者的一些话(写在最前面)&#xff1a; 这是一篇小文&#xff0c;是我写的关于求解矩阵行列式的一篇文章中的一部分。之所以把这一段专门提溜出来&#xff0c;是因为这一段相对于原文是可以完全独立的&#xff0c;也是因为我…

前端 js/浏览器/node /js 引擎的事件循环机制,宏任务、微任务

首先我们知道js是单线程的&#xff0c;所以有了事件循环机制来处理异步任务&#xff0c; 我们一般说的事件循环机制指 js 引擎的事件循环机制&#xff0c;js是一个编程语言&#xff0c;哪来的事件循环&#xff0c;前端常见的 js 引擎有浏览器和node。 所以在面试中问道【你知…

代码随想录训练营第五十九天| ● 503.下一个更大元素II ● 42. 接雨水

503.下一个更大元素II 这道题和 739. 每日温度 几乎如出一辙&#xff0c;可以自己尝试做一做 代码随想录 这道题是循环数组&#xff0c;因此在遍历时要遍历nums.size()*2次&#xff0c;然后再读取nums中的元素时要使用i % nums.size()来得到对应的下标。 vector<int> ne…

吉他打谱软件Guitar Pro8苹果Mac电脑简体中文特别版

Guitar Pro 8 Mac是一款吉他编曲学习软件&#xff0c;用于吉他、贝和其他弦乐器的制谱和演奏&#xff0c;这是一个多轨编辑器&#xff0c;具有集成的 MIDI 编辑器、合唱绘图仪、吉他、节拍器和其他音乐家工具。它使您能够编辑吉他、贝司和尤克里里、乐谱、指法谱&#xff0c;并…

第11章 GUI Page462~476 步骤二十三,二十四,二十五 Undo/Redo ③实现“Undo/Redo”菜单项

工程六 添加“编辑”菜单和子菜单 菜单ID分别为 idMenuEditUndo 和 idMenuEditRedo 热键&#xff08;快捷键&#xff09;分别为CtrlZ 和 CtrlShiftZ 变量名分别为 MenuItemEditUndo 和 MenuItemEditRedo 分别添加事件 ActionLink类增加成员函数 运行效果&#xff1a;“添加…

【LMM 016】3D-LLM:将 3D 点云特征注入 LLM

论文标题&#xff1a;3D-LLM: Injecting the 3D World into Large Language Models 论文作者&#xff1a;Yining Hong, Haoyu Zhen, Peihao Chen, Shuhong Zheng, Yilun Du, Zhenfang Chen, Chuang Gan 作者单位&#xff1a;University of California, Los Angeles, Shanghai J…

操作系统----期末判断题大全

目录 操作系统----期末判断题大全 三、判断题 操作系统----期末判断题大全 三、判断题 1&#xff0e; 系统调用与程序级的子程序调用是一致的。&#xff08; &#xff09; 【答案】错 2&#xff0e; I/O控制方式不断发展的推动因素之一…

服务器的关键参数指标

服务器的关键参数指标 5.1 操作系统 5.1.1 Windows Server 重要版本 Windows NT Server 4.0、Windows 2000 Server、Windows Server 2003、Windows Serve2003 R2、Windows Server 2008、Windows Server 2008 R2 、Windows Server 2012...... Windows服务器操作系统派应用&#…