跟踪一组预期的 Kafka 事件
Tracking an expected set of Kafka events
假设我有 N 个城市,每个城市都将通过生成 Kafka 事件来报告他们每小时 (H) 的温度。我有一个复杂的模型,我想 运行 但要确保它不会在读取所有 N 之前尝试启动。
说是分批生产,我理解是为了保证at-least-once consumption,如果一个consumer在batch中失败了,那么它会在batch的前面接。我已将其构建到我的模型中以按唯一城市进行计数(如果多次发送一个城市,它将覆盖现有记录)。
我目前的计划是设置如下:
- 一个应用程序创建了一个初始事件,上面写着“预计这 N 个城市将在几点钟报告”。
- 事件由另一个应用程序保存(在数据库、Redis 等中)。写入后,它会产生一个事件,说明到目前为止 H 总共报告了多少个独特的城市。
- 一些进程将初始的“Expect N”事件与“N Written”事件相匹配。当它们相等时,它会提醒系统的其余部分 H 的数据集已准备好创建模型。
这个问题有名称吗?是否有通用模式或库可用于管理它?
概述的解决方案是否有明显的漏洞或使问题过于复杂?
您描述的内容听起来像 Aggregator,Gregor Hohpe 和 Bobby Woolf 的“企业集成模式”将其描述为:
a special Filter that receives a stream of messages and identifies messages that are correlated. Once a complete set of messages has been received [...], the Aggregator collects information from each correlated message and publishes a single, aggregated message to the output channel for further processing.
这可以在 Kafka Streams 之上完成,使用其内置聚合,或使用您建议的有状态服务。
另一个建议 -- 使用事件驱动的编排设计这样的流程可能很棘手。我见过强大的工程团队由于没有先学会游泳就潜入深水区而无法提供类似的解决方案。如果您的规模需要它,并且您的组织已经为事件驱动的分布式架构做好了准备,那就去做吧,但如果没有,请考虑基于编排的替代方案(例如,AWS Step Functions、Airflow 或其他工作流编排工具)。这些更容易推理和调试。
假设我有 N 个城市,每个城市都将通过生成 Kafka 事件来报告他们每小时 (H) 的温度。我有一个复杂的模型,我想 运行 但要确保它不会在读取所有 N 之前尝试启动。
说是分批生产,我理解是为了保证at-least-once consumption,如果一个consumer在batch中失败了,那么它会在batch的前面接。我已将其构建到我的模型中以按唯一城市进行计数(如果多次发送一个城市,它将覆盖现有记录)。
我目前的计划是设置如下:
- 一个应用程序创建了一个初始事件,上面写着“预计这 N 个城市将在几点钟报告”。
- 事件由另一个应用程序保存(在数据库、Redis 等中)。写入后,它会产生一个事件,说明到目前为止 H 总共报告了多少个独特的城市。
- 一些进程将初始的“Expect N”事件与“N Written”事件相匹配。当它们相等时,它会提醒系统的其余部分 H 的数据集已准备好创建模型。
这个问题有名称吗?是否有通用模式或库可用于管理它?
概述的解决方案是否有明显的漏洞或使问题过于复杂?
您描述的内容听起来像 Aggregator,Gregor Hohpe 和 Bobby Woolf 的“企业集成模式”将其描述为:
a special Filter that receives a stream of messages and identifies messages that are correlated. Once a complete set of messages has been received [...], the Aggregator collects information from each correlated message and publishes a single, aggregated message to the output channel for further processing.
这可以在 Kafka Streams 之上完成,使用其内置聚合,或使用您建议的有状态服务。
另一个建议 -- 使用事件驱动的编排设计这样的流程可能很棘手。我见过强大的工程团队由于没有先学会游泳就潜入深水区而无法提供类似的解决方案。如果您的规模需要它,并且您的组织已经为事件驱动的分布式架构做好了准备,那就去做吧,但如果没有,请考虑基于编排的替代方案(例如,AWS Step Functions、Airflow 或其他工作流编排工具)。这些更容易推理和调试。