实时数据处理中的常见数据转换与去重策略
1. 实时系统中数据重复的原因
在实时系统的数据处理流程里,数据重复是一个常见且棘手的问题。其产生的原因主要分为以下两类:
- 数据源引入的重复数据 :这种情况通常是由于源系统自身的问题导致同一行数据出现多个副本。比如,人工操作时在 Excel 表格中复制粘贴数据,随后将其导出为 CSV 文件并加载到数据平台;或者关系型数据库的模式设计存在缺陷,未强制实施唯一约束,使得重复数据能够被添加并导入到数据平台。这些重复数据的产生不受数据平台的控制。
- 实时系统故障/恢复过程引入的重复数据 :实时系统需要在多个参数之间进行平衡,包括提供低延迟响应、适应不断增长的数据量,以及确保数据在系统部分组件故障时不会丢失。为了保证数据不丢失,系统会引入重试机制,但这可能会导致数据重复。例如,当生产者向分区写入消息时,如果底层机器出现网络问题,消息虽已写入磁盘,但确认信息无法发送给生产者。生产者会重试写入相同的消息,从而可能导致同一消息在不同机器上被写入两次。此外,消费者也容易受到此类问题的影响。如果消费者在处理消息后崩溃,或者遇到类似的网络问题,偏移量无法保存到存储系统,重启后就会重新处理相同的消息,造成重复。
2. 实时系统中数据去重的方法
了解了实时系统中数据重复的原因后,下面介绍几种可行的去重方法:
- 使用时间窗口 :时间窗口是实时处理中的一个重要概念。通过为每条写入实时系统的消息分配一个时间戳,可以将消息按时间分组。例如,可以将最近五分钟、一小时内到达的消息分组。常见的时间窗口类型包括滑动窗口和翻滚窗口