1

我的应用程序生成包含多个应用程序指标的旋转日志文件。日志文件每分钟轮换一次,但每个文件还是比较大的(超过30MB,有100ks行)

我想将日志提供给 PipelineDB(在同一台机器上运行),Countiuous View 可以为我准确地创建我需要的指标聚合。

我可以使用标准输入的副本轻松地将日志发送到 PipelineDB,效果很好。

但是,在复制日志文件期间,机器可能偶尔会意外断电(例如,由于电力不足)。这意味着一旦重新上线,不确定有多少文件已插入 PipelineDB。

在这种情况下,如何确保日志中的每一行都只插入一次?(获得完整和准确的聚合非常重要)

请注意,日志文件中的每一行都有一个唯一标识符(由我的应用程序创建的序列号),但我在文档中找不到在流中定义唯一字段的选项。我假设 PipelineDB 的设计不是为了处理流行中的唯一字段

尽管如此,有没有其他解决方案可以解决这个问题?

4

1 回答 1

1

流式(无限行)上下文中的恰好一次语义是一个非常复杂的问题。大多数大型 PipelineDB 部署在 PipelineDB 前面使用某种消息总线基础设施(例如 Kafka)来实现交付语义和可靠性,因为这不是 PipelineDB 的核心重点。

话虽如此,您可以在这里使用一些值得考虑的方法。

首先,您可以在 PipelineDB 中维护一个常规表,用于跟踪每个日志文件及其成功写入 PipelineDB 的行号。开始发送新的日志文件时,对照此表检查它以确定从哪个行号开始。

其次,您可以DELETE在发送之前通过日志文件(通过在分组中包含路径或其他内容)以及该日志文件的任何现有行来分离您的聚合。然后使用combine在读取时聚合所有日志文件,可能使用VIEW.

于 2018-05-09T21:32:53.847 回答