如何在大型kafka / kafka流应用程序中有效修复数据

时间:2018-11-06 23:35:28

标签: apache-kafka scalability apache-kafka-streams

项目

我正在处理的应用程序每天处理数百万个财务交易(订单和贸易)数据。

数据被输入到kafka主题中。

kafka流微服务汇总信息(例如每只股票的nr交易),并且该数据被其他软件使用。此外,数据还保存在mongodb中。

问题:

发送到主题的数据有时需要修改,例如由于错误或配置错误而导致的价格变化。

由于kafka仅允许追加,因此我在mongodb中进行了更正,然后,将更正后的数据通过管道传递到新的kafka主题中,从而导致对下游聚合的完整重新计算。

但是,随着时间的推移,越来越多的数据需要重播,此过程会引起可扩展性问题。

问题

我正在考虑将大型kafka主题分解为日常主题,以便在大多数数据修复情况下仅需要重播一天的主题。

我的问题是,这是否是解决此问题的合理方法,还是有更好的解决方案。

1 个答案:

答案 0 :(得分:1)

数据修复或一般的错误处理,Kafka在很大程度上取决于用例。在本例中,我们基于CQRS +事件源原则(通用描述here)构建系统,因此,为了进行数据修复,我们使用了“补偿事件”(即,对另一个事件的影响进行修正的事件)最终系统将是一致的。