如何在大型 kafka / kafka 流应用程序中高效修复数据
How to efficiently repair data in large kafka / kafka streams applications
项目:
我正在处理的应用程序处理金融交易(订单和贸易)数据,每天数百万。
数据被送入 kafka 主题。
kafka 流微服务聚合信息(例如每只股票的交易数量),并且此数据由其他软件使用。另外,数据持久化在mongodb.
问题:
发送到主题的数据有时需要修改,例如由于错误或配置错误导致的价格变化。
由于 kafka 是仅附加的,我在 mongodb 中进行了更正,之后,将更正后的数据通过管道传输到新的 kafka 主题中,从而导致下游聚合的完全重新计算。
但是,随着时间的推移需要重放的数据越来越多,此过程会引起可扩展性问题。
问题
我正在考虑把kafka的大topic拆成daily的topic,这样在大部分数据修复的情况下只需要replay一天的topic
我的问题是,这是否是解决此问题的合理方法,或者是否有更好的解决方案。
数据修复或一般错误处理和 Kafka 在很大程度上取决于用例。在我们的案例中,我们基于 CQRS + 事件溯源原则(通用描述 here)构建我们的系统,因此我们使用 "compensating events" 进行数据修复(即修改另一个事件的影响的事件) 最终系统将保持一致。
项目:
我正在处理的应用程序处理金融交易(订单和贸易)数据,每天数百万。
数据被送入 kafka 主题。
kafka 流微服务聚合信息(例如每只股票的交易数量),并且此数据由其他软件使用。另外,数据持久化在mongodb.
问题:
发送到主题的数据有时需要修改,例如由于错误或配置错误导致的价格变化。
由于 kafka 是仅附加的,我在 mongodb 中进行了更正,之后,将更正后的数据通过管道传输到新的 kafka 主题中,从而导致下游聚合的完全重新计算。
但是,随着时间的推移需要重放的数据越来越多,此过程会引起可扩展性问题。
问题
我正在考虑把kafka的大topic拆成daily的topic,这样在大部分数据修复的情况下只需要replay一天的topic
我的问题是,这是否是解决此问题的合理方法,或者是否有更好的解决方案。
数据修复或一般错误处理和 Kafka 在很大程度上取决于用例。在我们的案例中,我们基于 CQRS + 事件溯源原则(通用描述 here)构建我们的系统,因此我们使用 "compensating events" 进行数据修复(即修改另一个事件的影响的事件) 最终系统将保持一致。