Apache Kafka不适用于Event Sourcing

2023-10-24 08:18

本文主要是介绍Apache Kafka不适用于Event Sourcing,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

     前段时间着手分布式事务,初布研究方向是基于消息总线事件数据一致性方案,消息总线考虑到之前应用的rabbitMQ,但想到分布式事务锁机制zookeeper有很好的实现,同时Kafka也是基于zookeeper实现的消息队列机制,最近正好看到这相关博文,特此引荐,以观后效.

Eventuate是建立高扩展的事件溯源event sourcing和使用因果一致性建立事件协助的开源服务框架。基于事件驱动和事件溯源的服务能够给予因果顺序的事件流通讯,服务可位于单个服务器本地也可以分布到全球规模,使用因果一致性复制,保持网络分区之间的写操作高可用性。

Eventuate有Java和Scala两个API,基于Akka编写。

具体特性如下:
1.提供建立有态事件溯源服务、持久化和内存查询数据库和事件处理管道。
2.激活服务通过一个可靠分区冗余事件总线通讯,该总线基于因果事件顺序,可分布到大型分布式系统。
3.支持使用因果一致性进行有态服务复制,使用自动和互动的冲突解决方案实现当前状态更新。
4.提供基于操作的CRDTs(Conflict-free replicated data types )实现。
5.允许服务跨多个区域分布开发运行
6.支持用于更新查询数据库的分布式服务的事件聚合
7.提供适配第三方流处理框架用于事件流分析。

基于操作的CRDTs
CRDTs是免冲突复制数据类型Conflict-free replicated data types 的简称。是一种可复制的数据类型,在发生更新时,所有数据类型最终会收敛到相同状态。一个CRDT在更新时无需进行复制协调,因此节约了协调成本,提高效率。这使得CRDT对于写操作高可用,CRDT能够被分类成基于状态的CRDTs和基于操作的CRDTs,简称CvRDTs和CmRDTs。基于状态的CRDTs是于传播状态的复制,而基于操作的CRDTs则是传播操作。

如果操作是通过一个可靠的因果(RCB)中间件广播传播就会保证Cmrdt复制最终一致收敛,他们设计用于并行操作交换。

CvRDTs不需要对底层消息中间件有特别要求,但是状态传播需要增加带宽或降低状态大小。

CmRDT操作分为两个阶段:prepare和effect,prepare在本地节点上执行。它着眼于操作和(可选)当前状态,并产生一个代表操作的消息,然后分发给所有的其他节点。effect适用于所有节点上的传播操作。

与事件溯源有关
CmRDT两个更新阶段:prepare和effect和事件溯源实体的更新阶段(命令处理和事件处理)有关:

1.在命令处理中,传入命令(可选)对实体的当前状态进行了验证,如果验证成功,则表示代表该命令效果的事件可被写入事件日志中。这相当于在cmrdt的prepare阶段产生的操作。

2.在事件处理中,写入事件日志中的写入事件被拿出使用,用于更新实体的当前状态。这相当于将产生cmrdt的effect效果。

Eventuate提供 EventsourcedActor实现定制命令和事件处理。

可靠的因果广播
大多数CmRDT需要更新操作的因果传输顺序,因果传输可通过事件日志提供的前后顺序轻松完成,但是,如果事件日志本身被复制(例如在Kafka集群中的一个分区topic),或它一点也不复制的,这样的事件日志的可用性是有限的,因为它必须协调所有复制备份的更新。

因此,让cmrdts共享一个完全有序的事件日志会受限制于底层的事件日志的可用性,这不是我们想要的。

我们需要的是将cmrdt复制跨分布地理位置(或可用性区域)分布,每个本地都有其自己的本地事件日志,仍然保持可以写入,即使与其他地方分区分开来。在一个本地写入的事件通过异步和可靠地复制到其他位置。能够在这样一个网络复制本地事件日志以达到最强的全局秩序才满足的cmrdts规定的因果关系。

在Eventuate 中本地事件日志称为可复制的event log,可复制的event lg中因果跟踪通过向量时钟实现,向量时钟是作为潜在的因果关系代表,是一种部分顺序。

CRDT服务框架
之前介绍了如何将CmRDT继承到Eventuate的事件溯源和事件协调底层设施,为了解放CmRDT开发者,Eventuate提供CmRDT服务开发框架隐藏了这些底层细节。

详细原理见:https://krasserm.github.io/2016/10/19/operation-based-crdt-framework/

Eventuate项目:
GitHub - RBMHTechnology/eventuate: Global-scale ev

这篇关于Apache Kafka不适用于Event Sourcing的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/273893

相关文章

一文详解kafka开启kerberos认证的完整步骤

《一文详解kafka开启kerberos认证的完整步骤》这篇文章主要为大家详细介绍了kafka开启kerberos认证的完整步骤,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、kerberos安装部署二、准备机器三、Kerberos Server 安装1、配置krb5.con

使用Apache POI在Java中实现Excel单元格的合并

《使用ApachePOI在Java中实现Excel单元格的合并》在日常工作中,Excel是一个不可或缺的工具,尤其是在处理大量数据时,本文将介绍如何使用ApachePOI库在Java中实现Excel... 目录工具类介绍工具类代码调用示例依赖配置总结在日常工作中,Excel 是一个不可或缺的工http://

Apache伪静态(Rewrite).htaccess文件详解与配置技巧

《Apache伪静态(Rewrite).htaccess文件详解与配置技巧》Apache伪静态(Rewrite).htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令,主要的... 一、.htAccess的基本作用.htaccess是一个纯文本文件,它里面存放着Apache服务器

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Kafka拦截器的神奇操作方法

《Kafka拦截器的神奇操作方法》Kafka拦截器是一种强大的机制,用于在消息发送和接收过程中插入自定义逻辑,它们可以用于消息定制、日志记录、监控、业务逻辑集成、性能统计和异常处理等,本文介绍Kafk... 目录前言拦截器的基本概念Kafka 拦截器的定义和基本原理:拦截器是 Kafka 消息传递的不可或缺

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群