Debezium发布历史75

news2024/9/26 1:18:49

原文地址: https://debezium.io/blog/2019/10/22/audit-logs-with-kogito/

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

使用 Kogito 进行审核日志的管理服务
十月 22, 2019 作者: Maciej Swiderski
讨论 示例 apache-kafka kafka-streams kogito
作为最近使用变更数据捕获和流处理构建审核日志博客文章的后续内容,我们希望使用管理功能扩展该示例,以便能够捕获和修复任何丢失的事务数据。

在上面提到的博客文章中,有一个日志丰富服务,用于将 Vegetable 数据库表中插入或更新的数据与事务上下文数据结合起来,例如

交易编号

执行该工作的用户名

实际更改背后的用例,例如“CREATE VEGETABLE”

只要所有的改变都是通过蔬菜服务完成的,这一切都很有效。但情况总是如此吗?

直接在数据库级别执行的维护活动或迁移脚本怎么样?现在仍然有很多这样的活动在进行,要么是故意的,要么是因为这是我们试图改变的旧习惯……

数据库层面的维护
因此,我们假设需要对库存数据库进行一些维护,这实际上会对蔬菜表中存储的数据进行更改。为了简单起见,我们只需在蔬菜表中添加一个新条目:

insert into inventory.vegetable (id, name, description) values (106, ‘cucumber, ‘excellent’);
添加后,您将看到日志丰富器服务开始打印出相当多的日志消息…并且它会不断地打印。

log-enricher_1 | 2019-10-11 10:30:46,099 INFO [io.deb.dem.aud.enr.ChangeEventEnricher] (auditlog-enricher-c9e5d1bb-d953-42b4-8dc6-bbc328f5344f-StreamThread-1) Processing buffered change event for key {“id”:106}
log-enricher_1 | 2019-10-11 10:30:46,106 WARN [io.deb.dem.aud.enr.ChangeEventEnricher] (auditlog-enricher-c9e5d1bb-d953-42b4-8dc6-bbc328f5344f-StreamThread-1) No metadata found for transaction {“transaction_id”:611}
log-enricher_1 | 2019-10-11 10:30:46,411 INFO [io.deb.dem.aud.enr.ChangeEventEnricher] (auditlog-enricher-c9e5d1bb-d953-42b4-8dc6-bbc328f5344f-StreamThread-1) Processing buffered change event for key {“id”:106}
log-enricher_1 | 2019-10-11 10:30:46,415 WARN [io.deb.dem.aud.enr.ChangeEventEnricher] (auditlog-enricher-c9e5d1bb-d953-42b4-8dc6-bbc328f5344f-StreamThread-1) No metadata found for transaction {“transaction_id”:611}
log-enricher_1 | 2019-10-11 10:30:46,921 INFO [io.deb.dem.aud.enr.ChangeEventEnricher] (auditlog-enricher-c9e5d1bb-d953-42b4-8dc6-bbc328f5344f-StreamThread-1) Processing buffered change event for key {“id”:106}
查看日志,您可以发现它实际上指的是我们刚刚插入的条目(id 106)。除此之外,它指的是它无法找到的丢失的事务上下文数据。这是在数据库级别手动执行而不是通过蔬菜服务的结果。Kafka 主题中没有相应的数据dbserver1.inventory.transaction_context_data,因此日志丰富器无法关联并通过合并/丰富它们。

小吉托来救援
如果我们能有某种管理服务来帮助解决这类问题,那将会是一个非常好的功能(或者像 Gunnar 所说的一个简洁的功能)。主要是因为如果添加这样的条目,它将阻止整个丰富活动,因为第一个丢失的消息将阻止所有其他消息。

Kogito来了——一个云原生业务自动化工具包,用于基于经过考验的功能构建智能业务应用程序。换句话说,它带来了解决特定业务问题的业务流程和规则。在这种情况下,业务问题是阻止日志丰富,这可能导致失去一些(各种类型的)机会。

Kogito 帮助我们定义我们的逻辑,以了解可能会出现什么问题、需要采取哪些措施来解决问题以及导致问题和解决方案的条件是什么。

在这种特殊情况下,我们使用流程和规则来确保我们获得正确的上下文并对蔬菜服务背后的事件做出反应。为了能够发现错误情况,我们需要监控两个主题:

dbserver1.inventory.vegetable- 蔬菜数据变更事件

dbserver1.inventory.transaction_context_data- 来自蔬菜服务的事件以及附加上下文数据

因此,我们定义了两个业务流程,每个流程都将根据来自各个 Kafka 主题的传入消息启动:
图片来自于原文
在这里插入图片描述

蔬菜事件流程定义
交易上下文数据流程定义
如上所述,这两个过程都是基于传入消息启动的。那么之后的逻辑就明显不同了。

“事务上下文数据”进程负责检索事件并将其推入处理阶段 - 这本质上意味着将其插入到用于规则评估的所谓“工作内存”中。在那一刻就完成了。

“蔬菜事件”过程以类似的方式开始…它检索消息,然后(首先以与日志丰富服务相同的方式忽略快照消息)将在匹配蔬菜和事务之前等待预定义的时间(2秒)上下文事件。一旦有匹配,它将简单地完成其执行。但是,如果没有找到匹配项,它将创建一个用户任务(该任务需要人类参与者在流程继续前进之前提供数据)。

这是通过管理用户界面(http://localhost:8085/)完成的,该界面允许轻松发现此类实例并对其进行修复以修复丢失的数据。
图片来自于原文
在这里插入图片描述

用于修复丢失的事务上下文数据的管理服务 UI
一旦提供了Use case和User name属性,该流程将创建一个新的事务上下文事件,将其推送到 Kafka 主题并自行完成。

将丢失事务上下文数据事件置于主题后,日志丰富器将恢复其操作,您将能够在日志中看到以下行:

log-enricher_1 | 2019-10-11 10:31:00,385 INFO [io.deb.dem.aud.enr.ChangeEventEnricher] (auditlog-enricher-c9e5d1bb-d953-42b4-8dc6-bbc328f5344f-StreamThread-1) Processing buffered change event for key {“id”:106}
log-enricher_1 | 2019-10-11 10:31:00,389 INFO [io.deb.dem.aud.enr.ChangeEventEnricher] (auditlog-enricher-c9e5d1bb-d953-42b4-8dc6-bbc328f5344f-StreamThread-1) Enriched change event for key {“id”:106}
通过此功能,您可以轻松管理审核日志,以确保快速解决任何错误情况,而不影响任何其他活动。

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

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

相关文章

三维重建(3)--单视几何

目录 一、无穷远点、无穷远线、无穷远平面 1、2D平面上的无穷远问题 2、3D平面上的无穷远问题 二、影消点与影消线 1、2D平面上的无穷远点,无穷远线变换 2、影消点 3、影消线 三、单视重构 1、两平行线夹角与影消线关系 2、单视图标定 一、无穷远点、无…

Apifox 国产接口自动化利器 之入门篇

Apifox 产品介绍 Apifox 是集 API 文档、API 调试、API Mock、API 自动化测试多项实用功能为一体的 API 管理平台,定位为 Postman Swagger Mock JMeter。旨在通过一套系统、一份数据,解决多个工具之间的数据同步问题。只需在 Apifox 中定义 API 文档…

Java 全栈知识点问题汇总(上)

Java 全栈知识点问题汇总(上) 1 Java 基础 1.1 语法基础 面向对象特性?a a b 与 a b 的区别3*0.1 0.3 将会返回什么? true 还是 false?能在 Switch 中使用 String 吗?对equals()和hashCode()的理解?final、finalize 和 finally 的不同…

Win10 打开文件突然鼠标变成一个蓝色大圈卡住点不了也打不开文件,重启电脑也是这样

环境: Win10 专业版 加密客户端环境 问题描述: Win10 打开桌面word文件突然鼠标变成一个蓝色大圈卡住点不了也打不开文件,重启电脑也是这样,只有蓝色圈变大没有鼠标指针出现圈卡着不会动,和那些有鼠标箭头加小蓝色圈不一样 解决方案: 某网上查看的,还是要自己排查…

OceanBase集群扩缩容

​ OceanBase 数据库采用 Shared-Nothing 架构,各个节点之间完全对等,每个节点都有自己的 SQL 引擎、存储引擎、事务引擎,天然支持多租户,租户间资源、数据隔离,集群运行的最小资源单元是Unit,每个租户在每…

LeetCode、2300. 咒语和药水的成功对数【中等,排序+二分】

文章目录 前言LeetCode、2300. 咒语和药水的成功对数【中等,排序二分】题目及类型思路及代码 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域…

聚铭入选“2023中国数字安全能力图谱(精选版)”安全运营领域

近日,国内权威数字安全领域第三方调研机构数世咨询正式发布《2023年度中国数字安全能力图谱(精选版)》。聚铭网络作为国内领先的安全运营商,凭借在细分领域突出优势,成功入选该图谱“安全运营”领域代表厂商。 据悉&a…

python tkinter 最简洁的计算器按钮排列

代码如下,只要再加上按键绑定事件函数,计算器既可使用了。 import tkinter as tk from tkinter.ttk import Separator,Buttonif __name__ __main__:Buttons [[%,CE,C,←],[1/x,x,√x,],[7, 8, 9, x],[4, 5, 6, -],[1, 2, 3, ],[, 0, ., ]]root tk.T…

MyBatis 使用报错: Can‘t generate mapping method with primitive return type

文章目录 前言问题原因解决方案个人简介 前言 今天在新项目中使用 MyBatis 报如下错误:Cant generate mapping method with primitive return type 问题原因 发现是 Mapper 注解引入错误,错误引入 org.mapstruct.Mapper, 实际应该引入 org.apache.ibat…

FlinkAPI开发之状态管理

案例用到的测试数据请参考文章: Flink自定义Source模拟数据流 原文链接:https://blog.csdn.net/m0_52606060/article/details/135436048 Flink中的状态 概述 有状态的算子 状态的分类 托管状态(Managed State)和原始状态&…

如何实现 H5 秒开?

我在简历上写了精通 H5,结果面试官上来就问: 同学,你说你精通 H5 ,那你能不能说一下怎么实现 H5 秒 由于没怎么做过性能优化,我只能凭着印象,断断续续地罗列了几点: 网络优化:http2、…

JOSEF约瑟 双位置继电器UEG/C-4H4D AC220V 新款导轨安装 端子号可订做

系列型号: UEG/C-2H双稳态中间继电器;UEG/C-1H1D双稳态中间继电器; 双稳态中间继电器UEG/C-4H4D;UEG/C-3H1D双稳态中间继电器; UEG/C-2H2D双稳态中间继电器;UEG/C-4H双稳态中间继电器; UEG/…

HarmonyOS—开发环境诊断的功能

为了大家开发应用/服务的良好体验,DevEco Studio提供了开发环境诊断的功能,帮助大家识别开发环境是否完备。可以在欢迎界面单击Help > Diagnose Development Environment进行诊断。如果已经打开了工程开发界面,也可以在菜单栏单击Help >…

04 SpringBoot整合Druid/MyBatis/事务/AOP+打包项目

整合Druid 项目结构&#xff1a; 引入依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaL…

【网站项目】331基于jsp的超市库存商品管理系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

【C语言深度剖析——第三节(关键字3)】《C语言深度解剖》+蛋哥分析+个人理解

本文由睡觉待开机原创&#xff0c;未经允许不得转载。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言&#xff0c;共同进步&#xff01; 目录 1.基本数据类型2.sizeof关键字 前言&#xff1a; 本期我们继续探讨关于C深度解剖这本书相关内容&#…

AI智慧导诊系统(源码),利用人工智能技术,通过根据患者症状描述智能推荐挂号科室。

什么是智慧导诊系统? 简单地说&#xff0c;智慧导诊系统是一种利用人工智能技术&#xff0c;为医生提供帮助的系统。它可以通过分析患者的症状和病史为医生提供疾病诊断和治疗方案的建议。 智慧导诊系统可根据患者症状描述智能推荐挂号科室。系统采用对话式询问患者症状&…

C++初阶类与对象(二):详解构造函数和析构函数

上次为类与对象开了一个头&#xff1a;C初阶类与对象&#xff08;一&#xff09;&#xff1a;学习类与对象、访问限定符、封装、this指针 今天就来更进一步 文章目录 1.类的6个默认成员函数2.构造函数2.1引入和概念2.2构造函数特性2.2.1特性1~42.2.2注意2.2.3特性5~72.2.4注意 …

安装布隆过滤器

上传并解压文件解压文件 tar -zxvf RedisBloom-2.2.4.tar.gz 进入解压好的文件 make一下 返回进入conf 配置文件 loadmodule /usr/local/etc/redis/redisbloom.so 粘入 拷贝redisbloom.so到容器 : docker cp redisbloom.so redis:/usr/local/etc/redis 重启redis : docker …

如何编写一个好的测试用例?才能防止背黑锅

如何编写一个好的测试用例&#xff1f;才能防止背黑锅 什么是测试用例&#xff1f;一个好的测试用例包含什么&#xff1f;测试用例的编写思路总结 什么是测试用例&#xff1f; 在这之前&#xff0c;思考一个问题&#xff0c;下面这个简单的QQ登录页面&#xff0c;一共又多少条…