项目:
我正在开发的应用程序处理金融交易(订单和交易)数据,每天数百万。
数据被输入Kafka主题。
kafka streams微服务聚合信息(例如,每只股票的交易次数),这些数据被其他软件使用。此外,数据将持久保存在mongodb中。
问题:
发送到主题的数据有时需要修改,例如由于错误或配置错误导致的价格变化。
由于kafka是append only,所以我在mongodb中进行了修正,修正后的数据通过管道传输到一个新的kafka主题中,从而完成下游聚合的重新计算。
但是,这个过程会引起可伸缩性问题,因为随着时间的推移,需要重放的数据越来越多。
问题
我正在考虑将大型Kafka主题拆分为日常主题,以便在大多数数据修复情况下只需要回放一天的主题。
我的问题是,这是否是一个合理的方式来解决这个问题,或者是否有更好的解决办法。
1条答案
按热度按时间1sbrub3j1#
数据修复或一般的错误处理和kafka很大程度上取决于用例。在我们的案例中,我们基于cqrs+事件源原则(这里的一般描述)构建系统,因此对于数据修复,我们使用“补偿事件”(即修正另一事件影响的事件),最终系统将保持一致。