当前位置: 首页 > 知识库问答 >
问题:

Apache Kafka中的Eventsourcing

冯宏恺
2023-03-14

但是对于事件源,您很可能希望读取给定实体/聚合ID的事件。当然,您可以使用分区,但这似乎滥用了这个概念,而且很难实际添加新实体,因为分区计数更多的是静态的,即使您可以更改它。有什么明智的解决办法吗?Apache Kafka文档本身只简单地提到了事件来源。

共有1个答案

汝岳
2023-03-14

关于你对另一个问题的评论:

谢谢你在这里的努力,答案是相当偏离主题。“真的是你想表达的吗?”不。问题不是关于DDD或CQRS。我对那些很熟悉。我在问如何或者是否可以用Kafka来处理事件。假设我有1000万个实体,我可能不想让它们同时跨服务器加载到内存中。我可以使用Kafka W/O重播所有内容来加载单个聚合的数据吗?

答案是肯定的:您可以使用Kafka流来处理这些事件。您的streams逻辑生成聚合并将它们存储在本地状态存储区(RocksDB),这样生成的聚合就不需要在内存中,无需重放所有事件即可访问。您可以使用Interactive Queries API访问这些聚合。挺好看的!此时,编写可回放的事件处理逻辑说起来容易做起来难,但无论如何也不是不可能的。

 类似资料:
  • 我已经在kafka上工作了相当长的六个月,我对用户延迟和存储到主题分区中的数据有一些疑问。 问题1:最初,当我开始阅读Kafka并了解如何使用Kafka的功能时,我被教导说,一个只有一部分和一个复制因子的主题会创造奇迹。经过相当长的六个月的工作,将我的项目迁移到live之后,使用我的主题消息的消费者开始给我一个延迟。我阅读了许多关于消费者延迟的堆栈溢出答案,得出结论,如果我增加某个主题的分区和复制

  • 为了实现Kafka消费者对消息的一次处理,我一次提交一条消息,如下所示 上面的代码将消息的处理异步委托给下面的另一个类。 但是,这仍然不能保证只发送一次,因为如果处理失败,它可能仍会提交其他消息,并且以前的消息将永远不会被处理和提交,我在这里的选项是什么?

  • 我想使用Avro来序列化我的Kafka消息的数据,并想将其与Avro模式存储库一起使用,这样我就不必将模式包含在每条消息中。 将Avro与Kafka结合使用似乎是一件很流行的事情,许多博客/堆栈溢出问题/用户组等都提到了将模式Id与消息一起发送,但我找不到一个实际的示例来说明它应该去哪里。 我想它应该放在Kafka消息头的某个地方,但我找不到一个明显的地方。如果它在Avro消息中,则必须根据模式对

  • 我已经创建了要将它们连接在一起的kstream。两个流的输出如下所示: 流1: 流2: 我想创建这两个Stream的连接流(内连接),所以我创建了以下KStream: 在这个KStream中,我只使用了一个连接,我正在更改输出消息的格式,仅此而已。 通过一个例子,我将解释我想做什么: 在窗口内发布以下消息: 流1 流2 加入流 出版的是什么 我想出版什么 总之,我只想在窗口中发布最新消息,而不是所

  • 我们有一个应用程序,它使用来自Kafka主题(3个分区)的消息,丰富数据,并将记录保存在DB(Spring JPA)中,然后将消息发布到另一个Kafka主题(在同一个代理上),所有这些都通过使用Camel 2.4.1和Spring Boot 2.1.7进行编排。释放 我们想为 kafka 消费者-生产者组合实现“exactly-once”语义。 消费者设置: 生产者设置: 豆接线: 骆驼路线: 但

  • 据我所知,生产者不得重试任何发送失败,消费者必须在执行某些处理之前提交,以提供最多一次的交付语义。但复制因素是否也与交付语义相关?《KafkaReactor》样本项目中的注释如下: 复制因子为1的主题与acks=0且不重试的生产者相结合,可确保在第一次尝试时无法发送到Kafka的消息被丢弃 在ApacheKafka中,复制因素应该是最多提供一次交付语义的因素吗?