1.3.8 Stream

优质
小牛编辑
142浏览
2023-12-01

SDS Stream 提供了SDS表中记录更新的有序信息流。当您对表启用Stream时,SDS将捕获表中的记录更新,并根据Stream类型将相关信息以消息形式输出到用户定义的Talos消息队列中。

Stream特性

  • more than once 语义,对于已成功写入SDS的记录,相关更新消息至少会送达Talos Consumer一次
  • 行级别保序

Stream类型及消息格式

  • RECORD_IMAGE,更新后记录视图
    • record : 记录视图,如果是整行删除操作,只包含实体组键和主键
    • rowDeleted : 行是否被删除
    • timestamp : 更新时间戳
    • tableName: 操作的表名
  • MUTATE_LOG,记录更新日志

    • record : 记录,如果是整行删除操作,同RECORD_IMAGE;如果是部分删除,record中的key表示删除的属性,value可忽略, 如果是increment操作,record表示increment后的视图
    • type : 操作类型,包括Put/Delete/Increment
    • rowDeleted : 行是否被删除
    • timestamp : 更新时间戳
    • amounts: increment操作时该值不为空,表示同IncrementRequest的amounts
    • tableName: 操作的表名
  • KEYS_ONLY,记录更新的键值

    • record : 记录键值
    • timestamp : 更新时间戳
    • tableName: 操作的表名

使用流程

  • 在Talos中创建topic
  • 建表或更新表schema时,以topic名作为输入,添加Stream
  • 向表中生产数据
  • 创建Talos consumer,并消费Stream消息

需要注意的问题

  • 消息格式中的timestamp是指SDS服务器端的更新时间戳
  • MUTATE_LOG是指服务器端操作成功执行后对应的日志,并不完全等同于客户端原始操作,主要有两点区别:
    • Batch操作会分解为独立的单元操作,每个单元对应一条消息
    • 带condition的操作,如果成功,消息中不会记录condition;如果失败,不会产生消息
  • Stream根据表的分片数量分布式收集更新,因此建表时建议对表预分片以提高性能
  • 对于MUTATE_LOG类型的stream,在more than once语义下,非幂等操作,如Increment,需要根据消息中得到的记录视图转化成put操作进行重放,或者根据时间戳进行去重再用increment进行重放

进一步工作