如果使用 HBase Handler 配置属性,则源数据库可能与 HBase Handler 表中的数据不同步。
这是由于可能存在源库先删除行然后立即重新插入行引起的。HBase 为由特定时间戳标识的删除创建逻辑删除标记,此逻辑删除标记将 HBase 中的所有行记录标记为与删除时相同的行键,这些行记录在逻辑删除标记之前或之前具有时间戳。当立即重新插入已删除的行时,可能会发生这种情况。插入操作可能会无意中具有与删除操作相同的时间戳,因此删除操作会导致后续插入操作错误地显示为已删除。 gg.handler.hbase.setHBaseOperationTimestamp
要解决此问题,您需要设置 gg.handler.hbase.setHbaseOperationTimestamp=true

设置 HBase 处理程序中行操作的时间戳。
检测删除插入操作,确保插入操作具有插入后的时间戳。列表项目
缺省 gg.handler.hbase.setHbaseOperationTimestamp 值为 false,表示 HBase 服务器提供行的时间戳。这可能导致不同步问题。

在 HBase 处理程序中设置行操作时间戳可能会产生以下后果:

由于时间戳是在客户端设置的,如果多个应用程序将数据提供给同一 HBase 表,则可能会产生问题。
如果删除和重新插入是用例中的常见模式,则每次遇到此方案时,HBase 处理程序必须将时间戳增加 1 毫秒。
程序不允许在未来进行太长时间,因此 HBase Handler 仅允许时间戳在未来尝试等待进程之前增加 100 毫秒,以便客户端 HBase 操作时间戳和实时重新同步。当使用 delete-insert 而不是源数据库中的更新时,这种同步方案将非常普遍。如果这种情况很常见,那么不允许 HBase 时间戳超过 100 毫秒就会影响处理速度。