google 云数据流作业中的数据完整性错误

Data integrity errors in google cloud dataflow jobs

我注意到我的一项数据流作业产生了输出,我最好将其描述为随机位翻转过多。例如,年份“2014”(作为文本)被写为“0007”或“2016”或“0052”或其他文本值。在某些情况下,输出行格式是有效的(这表明在处理过程中发生了某些事情)但似乎也有几行格式不正确(例如,“20141215-04-25”而不是“2014-12-25”之类的格式)。

我偶尔会重新 运行 具有相同代码和不同日期范围参数的作业,对于这个特定的日期范围,作业直到大约一周前才成功完成。我一直在尝试不同的机器配置(4 cpus 和 1-cpu 实例),问题似乎更多地发生在 4-cpu 实例上。

有人知道是什么原因导致的吗?

谢谢, G

用户代码中的线程安全问题导致了此类损坏。使用多核实例进行计算时,很可能会出现此类错误。

使用 4-cpu 个实例时,Dataflow 在单个 Java 进程中运行多个线程。如果其中一个转换是线程敌对的,则可能会发生数据损坏,也就是说,多个线程甚至不能安全地访问 class 的单独实例。这通常发生在 class 使用静态非线程安全成员变量时。