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

  1. 设置HBase处理程序中行操作的时间戳。
  2. 检测删除插入操作,确保插入操作具有插入后的时间戳。列表项目

缺省gg.handler.hbase.setHbaseOperationTimestamp值为false,表示HBase服务器提供行的时间戳。这可能导致不同步问题。

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

  1. 由于时间戳是在客户端设置的,如果多个应用程序将数据提供给同一HBase表,则可能会产生问题。
  2. 如果删除和重新插入是用例中的常见模式,则每次遇到此方案时,HBase处理程序必须将时间戳增加1毫秒。

程序不允许在未来进行太长时间,因此HBase Handler仅允许时间戳在未来尝试等待进程之前增加100毫秒,以便客户端HBase操作时间戳和实时重新同步。当使用delete-insert而不是源数据库中的更新时,这种同步方案将非常普遍。如果这种情况很常见,那么不允许HBase时间戳超过100毫秒就会影响处理速度。