【发布时间】:2018-08-25 03:31:39
【问题描述】:
我需要处理大文件,可能有多个文件最终我们可能会并行处理。
- 将针对特定于该文件的规则处理特定文件中的每一行。
- 处理完成后,我们将根据处理后的记录生成输出文件。
我想到的一个选项是推送到代理的每条消息都将具有:行数据 + 要应用的规则 + 一些关联 ID(就像该特定文件的标识符)
我计划使用 kafka 流并使用处理器创建一个拓扑,该处理器将使用消息处理它并接收它的规则。
但是(我是 kafka 流的新手,因此可能是错误的):
- 消息的处理顺序不会是连续的,因为我们在 Tandom 中处理多个文件(这很好,因为我不需要这样做,而且我希望保持分离)。但是,我将如何将其置于逻辑关闭状态,即在我的处理器中,我如何知道文件的所有记录都已处理。
- 我是否需要以 ignite 之类的方式维护记录(关联 ID、记录数等).. 不过我不确定..
【问题讨论】:
-
可以想到的一个选项是有状态存储,其中在密钥库中,每条消息都将具有文件中的总记录数,并且它维护一个像 co-relation-id+total number 这样的键记录作为键并不断更新以值处理的记录,一旦这些匹配,我们可以假设这是该文件的逻辑闭包并相应地接收..
标签: spring apache-kafka apache-kafka-streams