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

相关文章

Apache Ignite缓存基本操作实例详解

《ApacheIgnite缓存基本操作实例详解》文章介绍了ApacheIgnite中IgniteCache的基本操作,涵盖缓存获取、动态创建、销毁、原子及条件更新、异步执行,强调线程池注意事项,避免... 目录一、获取缓存实例(Getting an Instance of a Cache)示例代码:二、动态

SpringBoot整合Apache Flink的详细指南

《SpringBoot整合ApacheFlink的详细指南》这篇文章主要为大家详细介绍了SpringBoot整合ApacheFlink的详细过程,涵盖环境准备,依赖配置,代码实现及运行步骤,感兴趣的... 目录1. 背景与目标2. 环境准备2.1 开发工具2.2 技术版本3. 创建 Spring Boot

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

Spring Boot 整合 Apache Flink 的详细过程

《SpringBoot整合ApacheFlink的详细过程》ApacheFlink是一个高性能的分布式流处理框架,而SpringBoot提供了快速构建企业级应用的能力,下面给大家介绍Spri... 目录Spring Boot 整合 Apache Flink 教程一、背景与目标二、环境准备三、创建项目 & 添

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

解决Maven项目报错:failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0的问题

《解决Maven项目报错:failedtoexecutegoalorg.apache.maven.plugins:maven-compiler-plugin:3.13.0的问题》这篇文章主要介... 目录Maven项目报错:failed to execute goal org.apache.maven.pl

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

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

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