如何基于日志,同步实现数据的一致性和实时抽取?
无论是遇到增删改任何的数据,我们面临的问题都是:
对于第一个问题,其实就需要定位数据要找一个唯一的键,常见的有:
对于第二个问题,就涉及到_ums_id_了,因为我们已经保证了_ums_id_大的值更新,因此在找到对应数据行后,根据这个原则来进行替换更新. 之所以要软删除和加入_is_active_列,是为了这样一种情况: 如果已经插入的_ums_id_比较大,是删除的数据(表明这个数据已经删除了),如果不是软删除,此时插入一个_ums_id_小的数据(旧数据),就会真的插入进去. 这就导致旧数据被插入了.不幂等了.所以被删除的数据依然保留(软删除)是有价值的,它能被用于保证数据的幂等性. HBase的保存 插入数据到Hbase中,相当要简单一些.不同的是HBase可以保留多个版本的数据(当然也可以只保留一个版本)默认是保留3个版本; 因此插入数据到HBase,需要解决的问题是:
Version的选择很有意思,利用_ums_id_的唯一性和自增性,与version自身的比较关系一致:即version较大等价于_ums_id_较大,对应的版本较新. 从提高性能的角度,我们可以将整个Spark Streaming的Dataset集合直接插入到HBase,不需要比较.让HBase基于version自动替我们判断哪些数据可以保留,哪些数据不需要保留. Jdbc的插入数据: 插入数据到数据库中,保证幂等的原理虽然简单,要想提高性能在实现上就变得复杂很多,总不能一条一条的比较然后在插入或更新. 我们知道Spark的RDD/dataset都是以集合的方式来操作以提高性能,同样的我们需要以集合操作的方式实现幂等性. (编辑:开发网_新乡站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |