项目:
我正在处理的应用程序每天处理数百万个财务交易(订单和贸易)数据。
数据被输入到kafka主题中。
kafka流微服务汇总信息(例如每只股票的nr交易),并且该数据被其他软件使用。此外,数据还保存在mongodb中。
问题:
发送到主题的数据有时需要修改,例如由于错误或配置错误而导致的价格变化。
由于kafka仅允许追加,因此我在mongodb中进行了更正,然后,将更正后的数据通过管道传递到新的kafka主题中,从而导致对下游聚合的完整重新计算。
但是,随着时间的推移,越来越多的数据需要重播,此过程会引起可扩展性问题。
问题
我正在考虑将大型kafka主题分解为日常主题,以便在大多数数据修复情况下仅需要重播一天的主题。
我的问题是,这是否是解决此问题的合理方法,还是有更好的解决方案。
答案 0 :(得分:1)
数据修复或一般的错误处理,Kafka在很大程度上取决于用例。在本例中,我们基于CQRS +事件源原则(通用描述here)构建系统,因此,为了进行数据修复,我们使用了“补偿事件”(即,对另一个事件的影响进行修正的事件)最终系统将是一致的。