我有一个用例,其中对应用程序的输入是成批的xml文件。例如,每晚一批银行交易。我正在尝试查看是否可以使用事件源来创建事件日志。根据我到目前为止所读的内容,这些示例似乎是基于用户驱动的输入(单击流、用户界面的更新等等)。使用分布式日志机制(如kafka)的事件源是基于批/文件输入的有效方法吗?
下面是我想采取的方法:
以批处理形式接受文件/xml中的输入
在内存中运行一些基本的验证。
将批输入转换为一系列事件
将事件日志写入Kafka主题。
使用事件日志将数据存储到数据库中,将事件发送到搜索引擎,更新缓存,运行spark作业进行聚合等。,
对其他进料批次重复此过程。
如果这种方法效率不高,还有什么其他方法可用于分布式处理此类输入?
2条答案
按热度按时间knsnq2tg1#
您的输入是否来自类似事件存储的东西?i、 一个数据库,作为真理的不可变来源,只附加事件。
如果是这样的话,你就有了使用事件源的基础,另外还有CQRS。它们不是一回事)
您必须意识到,所谓的写端/命令端。。。已经为你做了。
包含事务的传入xml文件批。。。每个事务已经是一个事件。听起来你不需要把这些转化成事件,然后把这些转化成Kafka。你可以把这些Map到你可以放入Kafka的东西上,然后所有主题的订阅者都可以做相应的事情。
实际上,您将实现事件源+cqr的读取端。
实际上,除非您要在写端(生成xml文件/接收用户输入的地方)进行操作。。。我不会太担心事件来源的微妙之处,因为它与ddd和cqrs有关。我只想把您正在做的事情看作是将数据分发到多个服务的一种方式。
并确保考虑缓存、搜索引擎等仅在您获得这些xml文件时才会更新。
a5g8bdjr2#
如果这些xml文件中的每个事件都有一个时间戳,那么您可以将对kafka的输出看作是延迟事件的蒸汽。kafka允许您将这些消息上的事件时间设置为事件的时间戳,而不是事件被接收到kafka的时间。这样,像kafka streams这样的任何下游处理应用程序都可以将事件放入正确的时间上下文中,并聚合到适当的时间窗口或会话窗口中,甚至可以与其他实时输入连接起来