0

我有一个用例,其中应用程序的输入分批进入XML文件。例如,每晚的一批银行交易。我正在尝试查看是否可以使用事件采购创建事件日志。根据我目前阅读的内容,这些示例似乎基于用户驱动的输入(点击流,来自用户界面的更新等)。使用分布式日志机制(如Kafka)的事件采购是基于批处理/文件的输入的有效方法吗?事件采购是否适用于批量输入?

下面是我想采取的方法:

  1. 接受输入的文件/ XML
  2. 运行在内存的一些基本验证了一批。
  3. 将批量输入转换为一系列事件
  4. 将事件日志写入Kafka主题。
  5. 使用事件日志将数据存储到数据库,发送事件 到搜索引擎,更新缓存,运行火花工作要做聚合 等,
  6. 重复此过程,对于其他传入批次。

如果这种方法效率不高,还有哪些其他选项可用于分布式处理此类输入?

回答

0

您的输入是否来自看起来像事件存储的东西?即一个充当事实不变源的数据库,只追加事件。

如果是这种情况,您可以使用事件源以及CQRS。 (他们不是一回事)

你必须意识到的是,所谓的写端/命令端......已经为你完成了。

带有事务处理的XML文件的传入批处理...每个事务都已经是一个事件。听起来你不需要将这些事件转换成事件,然后把它们放入卡夫卡。您可以将这些映射到您可以放入卡夫卡的内容中,然后所有主题的订阅者都可以做相应的工作。

实际上,您将实施Event Sourcing + CQRS的读取面。

实际上,除非你要在写入侧在做的事情(在XML文件生成/,其中接收用户输入)... 我不会太担心的微妙之处与DDD和CQRS有关的事件采购的。我会只是想到你在做什么,以将你的数据分发到多种服务

并且一定要考虑缓存,搜索引擎等只有在获取这些XML文件时才会更新。

0

如果这些xml文件中的每个单独事件都有时间戳,那么您可以将输出到卡夫卡的内容视为迟到事件的蒸汽。卡夫卡允许您将这些消息的事件时间设置为事件的时间戳,而不是卡夫卡摄入的时间。这样,任何下游处理应用程序(如Kafka Streams)都可以将事件置于正确的时间背景下,并聚合到适当的时间窗口或会话窗口中,甚至可以与其他实时输入结合使用。