流式数据Pipeline质量控制浅谈

一般而言,实现某个特定业务的数据Pipeline都会比较长,这个时候对其中某个组件进行变更就是很有压力的事情。我们如何保证数据的准确性和完整性呢?

引子

以我们公司的实时带宽计算为例,就是一个长长的Pipeline,中间经过的组件其实是很多的,比如解析模块,指标拼接模块,累加器模块等,这些模块可能是独立部署,也可能是在一个系统中,它们根据业务需求会经常发生变更。

因为最终数据需要每一个环节的衔接和计算都没有问题,才能得出正确的结果。然而让人遗憾的是,一个变更可能不影响最终呈现,但是其实是有问题的,这种问题往往令人难以察觉。那问题来了,发生变更后,如何保证数据的正确性?

需要做的事情其实很多的。经过实践,我们发现如下四个举措可以减少变更带来的风险。

变更前并行运行

通常我们有一个模块变更后,我们会在准生产环境并行运行一段时间(一般而言是一周),对计算结果会绘制成曲线图,然后和线上的曲线进行拟合。如果完全重叠,则证明没有问题,具备上线条件。

这个可以保证数据的准确性,而且这种准生产环境的服务器资源也是值得投入的。

探针

探针可以检测全流程数据是否会丢失,而且能检验延时情况。 探针可以是数据源提供的,也可以是自己仿造的。

这个可以一定程度上保证数据的完整性。

离线数据存储

离线数据需要得到保留,可以是最原始的数据,也可以是某个中间结果的数据,还可以是某个数据的偏移量(譬如Kafka的偏移量),这样可以保证上线变更导致计算异常(逻辑上的或者物理上的)能够得到补救。一旦有异常,可以拿这些离线数据进行计算恢复数据曲线。实时计算中很大的一个问题是发生故障或者程序逻辑异常时导致某一段时间区段的结果计算不准确了。

埋点统计

当然,真正要实现全链路的质量监控,保证不发生问题或者及时发现问题,还是需要对每个环节设置各种指标,我们其实对各个环节也抽象出了很多指标,通过一个高效的计数系统来实现。这里唯一的问题是需要进行埋点。

总结

质量控制其实是一个比较复杂的问题,上面的做的事情通过并行运算确保最终结果无异常,离线数据存储保证数据计算结果的可恢复,探针可以检测延时或者数据的完整性,埋点可以让我们对各个组件的状态有更多的追踪。

你可能感兴趣的:(流式数据Pipeline质量控制浅谈)