事件采购是否适用于批量输入?

时间:2017-07-07 21:53:06

标签: apache-kafka distributed-computing microservices event-sourcing

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

以下是我想采取的方法:

  1. 在file / xml
  2. 中接受输入作为批处理
  3. 在内存中运行一些基本验证。
  4. 将批量输入转换为一系列事件
  5. 将事件日志写入Kafka主题。
  6. 使用事件日志将数据存储到数据库中,发送事件 到搜索引擎,更新缓存,运行spark作业来进行聚合 等,
  7. 对其他传入批次重复此过程。
  8. 如果这种方法效率不高,那么还有哪些其他选项可用于此类输入的分布式处理?

2 个答案:

答案 0 :(得分:0)

您的输入是否来自看似事件存储的内容?即一个充当真理不可变来源的数据库,只附加事件。

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

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

带有事务的传入XML文件批...每个事务已经是一个事件。它听起来并不像你需要将它们转换为事件,然后将它们放入Kafka。您可以将这些内容映射到可以放入Kafka的内容中,然后主题的所有订阅者都可以相应地执行操作。

实际上,您将实施Event Sourcing + CQRS 的阅读方。

实际上,除非您要在写入方面(生成xml文件/接收用户输入的位置)做事情... ... 我不会&#39因为它与DDD和CQRS有关,因此过分关注事件采购的细微之处。我会简单地考虑一下您将数据分发到多个服务的方式

请务必考虑只有在获取这些XML文件时才会更新缓存,搜索引擎等。

答案 1 :(得分:0)

如果这些xml文件中的每个单独事件都有一个时间戳,那么您可以将输出视为Kafka只是迟到事件的蒸汽。 Kafka允许您将这些消息的事件时间设置为事件的时间戳,而不是将其摄取到Kafka的时间。通过这种方式,任何下游处理应用程序(如Kafka Streams)都可以将事件放入正确的时间上下文并聚合到适当的时间窗口或会话窗口中,甚至可以与其他实时输入连接