文档

seata参数配置 1.6.0版本

查看1.0.0版本
查看0.9.0.1之前版本

变更记录

20201216(1.6.0):
1.4.0到1.6.0版本配置项的变更记录不再集中维护,请根据配置项单独查看相关版本变更情况
20200716(1.3.0):
1.增加了store.redis相关配置
2.增加了nacos注册中心配置group项,Server和Client端的值需一致
3.新增client.rm.sagaBranchRegisterEnable配置项,默认false
20200421(1.2.0): 
1.增加registry.nacos.application属性,默认seata-server,Server和Client端的值需一致
20200220(1.1.0): 
1.file.conf和registry.conf两个配置文件中的格式统一转换为驼峰格式.
2.统一所有配置文件的默认值(file.conf、registry.conf、seata-spring-boot-starter)
3.优化seata-spring-boot-starter中对于事务分组和TC集群的配置
4.移除client.support.spring.datasource.autoproxy,增加@EnableAutoDataSourceProxy
5.新增server.rollbackRetryTimeoutUnlockEnable配置项,默认false
6.新增transport.shutdown.wait配置项,默认3秒
注解用于开启数据源自动代理,同时可选择代理实现方式(具体请查阅附录5)
20191221: 
1.增加seata.enabled、client.report.success.enable、
transport.enable-client-batch-send-request、client.log.exceptionRate

关注属性(详细描述见全属性)

server端 client端
registry.type registry.type
config.type config.type
#store.mode=db需要以下配置 service.vgroupMapping.my_test_tx_group
store.db.driverClassName service.default.grouplist
store.db.url service.disableGlobalTransaction
store.db.user
store.db.password
#store.mode=redis 需要以下配置
store.redis.host
store.redis.port
store.redis.database
store.redis.password

全属性

公共部分

key desc remark change record
transport.type socket通信方式 TCP、UNIX_DOMAIN_SOCKET,默认TCP
transport.server socket通道类型 NIO、NATIVE(根据操作系统类型和socket通信方式选择KQueue或Epoll,注意Windows只支持NIO,选择这种方式会抛出异常)
transport.enableTmClientBatchSendRequest TM批量发送请求消息开关 默认false 1.5.1版本新增
transport.enableRmClientBatchSendRequest RM批量发送请求消息开关 默认true 1.5.1版本新增
transport.enableTcServerBatchSendResponse TC批量发送回复消息开关 默认false 1.5.1版本新增
transport.rpcRmRequestTimeout RM发送请求超时时间 默认30秒 1.5.1版本新增
transport.rpcTmRequestTimeout TM发送请求超时时间 默认30秒 1.5.1版本新增
transport.rpcTcRequestTimeout TC发送请求超时时间 默认30秒 1.5.1 版本新增
transport.threadFactory.bossThreadSize Netty通信模型Boss group线程数 默认1
transport.threadFactory.workerThreadSize Netty通信模型Worker group线程数 可配置线程数或选择特定线程工作模式下的线程数,线程的默认工作模式有4种:Auto(2*CPU核数 + 1)、Pin(CPU核数,适用于计算密集型任务)、BusyPin(CPU核数 + 1,适用于计算密集型且内存比较有限的场景)、Default(2*CPU核数,适用于IO密集型任务),默认值为Default模式
transport.shutdown.wait 服务端Netty线程池关闭前等待服务下线时间 默认3秒
transport.serialization client和server通信编解码方式 seata(ByteBuf)、protobuf、kryo、hession、fst,默认seata
transport.compressor client和server通信数据压缩方式 none、gzip、zip、sevenz、bzip2、lz4、deflater、zstd,默认none 1.2.0之前:gzip
1.2.0:zip、sevenz、bzip2
1.3.0:lz4
1.4.1:deflater
1.5.1:zstd
transport.heartbeat client和server通信心跳检测开关 默认true开启
registry.type 注册中心类型 默认file,支持file 、nacos 、redis、eureka、zk、consul、etcd3、sofa、custom 1.6.0版本Sever端支持可同时注册到多个注册中心,以逗号分隔注册中心名
config.type 配置中心类型 默认file,支持file、nacos 、apollo、zk、consul、etcd3、springcloud、custom

server端

key desc remark change record
server.undo.logSaveDays undo保留天数 默认7天,log_status=1(附录3)和未正常清理的undo
server.undo.logDeletePeriod undo清理线程间隔时间 默认86400000,单位毫秒
server.maxCommitRetryTimeout 二阶段提交重试超时时长 单位ms,s,m,h,d,对应毫秒,秒,分,小时,天,默认毫秒。默认值-1表示无限重试。公式: timeout>=now-globalTransactionBeginTime,true表示超时则不再重试(注: 达到超时时间后将不会做任何重试,有数据不一致风险,除非业务自行可校准数据,否者慎用)
server.maxRollbackRetryTimeout 二阶段回滚重试超时时长 同commit
server.recovery.committingRetryPeriod 二阶段提交未完成状态全局事务重试提交线程间隔时间 默认1000,单位毫秒
server.recovery.asynCommittingRetryPeriod 二阶段异步提交状态重试提交线程间隔时间 默认1000,单位毫秒
server.recovery.rollbackingRetryPeriod 二阶段回滚状态重试回滚线程间隔时间 默认1000,单位毫秒
server.recovery.timeoutRetryPeriod 超时状态检测重试线程间隔时间 默认1000,单位毫秒,检测出超时将全局事务置入回滚会话管理器
server.rollbackRetryTimeoutUnlockEnable 二阶段回滚超时后是否释放锁 默认false
server.distributedLockExpireTime Sever端事务管理全局锁超时时间 默认10000,单位毫秒 1.5.1版本新增
server.server.xaerNotaRetryTimeout 防止XA分支事务悬挂的重试超时时间 默认60000,单位毫秒 1.5.1版本新增
server.session.branchAsyncQueueSize 分支事务Session异步删除线程池队列大小 默认5000 1.5.1版本新增
server.session.enableBranchAsyncRemove 分支事务Session异步删除开关 默认false 1.5.1版本新增
server.enableParallelRequestHandle 对于批量请求消息的并行处理开关 默认false 1.5.2版本新增
store.mode 事务会话信息存储方式 file本地文件(不支持HA),db数据库,redis(支持HA) 1.5.1版本改用lock和session分离存储
store.lock.mode 事务锁信息存储方式 file本地文件(不支持HA),db数据库,redis(支持HA);配置为空时,取store.mode配置项值 1.5.1版本新增,session和lock可分离存储
store.session.mode 事务回话信息存储方式 file本地文件(不支持HA),db数据库,redis(支持HA);配置为空时,取store.mode配置项值 1.5.1版本新增,session和lock可分离存储
store.publicKey db或redis存储密码解密公钥 1.4.2版本支持
store.file.dir file模式文件存储文件夹名 默认sessionStore
store.file.maxBranchSessionSize file模式文件存储分支session最大字节数 默认16384(16kb),单位byte
store.file.maxGlobalSessionSize file模式文件存储全局session最大字节数 默认512b,单位byte
store.file.fileWriteBufferCacheSize file模式文件存储buffer最大缓存大小 默认16384(16kb),单位byte,写入session等数据量大于该值时会抛出异常
store.file.flushDiskMode file模式文件存储刷盘策略 默认async,可选sync
store.file.sessionReloadReadSize file模式文件存储Server节点重启后从备份文件中恢复的session或lock key上限个数 默认100
store.db.datasource db模式数据源类型 dbcp、druid、hikari;无默认值,store.mode=db时必须指定
store.db.dbType db模式数据库类型 mysql、oracle、db2、sqlserver、sybaee、h2、sqlite、access、postgresql、oceanbase;无默认值,store.mode=db时必须指定。
store.db.driverClassName db模式数据库驱动 store.mode=db时必须指定
store.db.url db模式数据库url store.mode=db时必须指定,在使用mysql作为数据源时,建议在连接参数中加上rewriteBatchedStatements=true(详细原因请阅读附录7)
store.db.user db模式数据库账户 store.mode=db时必须指定
store.db.password db模式数据库账户密码 store.mode=db时必须指定
store.db.minConn db模式数据库初始连接数 默认1
store.db.maxConn db模式数据库最大连接数 默认20
store.db.maxWait db模式获取连接时最大等待时间 默认5000,单位毫秒
store.db.globalTable db模式全局事务表名 默认global_table
store.db.branchTable db模式分支事务表名 默认branch_table
store.db.lockTable db模式全局锁表名 默认lock_table
store.db.queryLimit db模式查询全局事务一次的最大条数 默认100
store.db.distributedLockTable db模式Sever端事务管理全局锁存储表名 默认distributed_lock,多Sever集群下保证同时只有一个Sever处理提交或回滚 1.5.1版本新增
store.redis.mode redis模式 默认single,可选sentinel 1.4.2版本新增sentinel模式
store.redis.single.host 单机模式下redis的host,兼容1.4.2之前的版本,该配置为空时选取store.redis.host作为配置项 1.4.2版本新增
store.redis.single.port 单机模式下redis的port,兼容1.4.2之前的版本,该配置为空时选取store.redis.port作为配置项 1.4.2版本新增
store.redis.sentinel.masterName sentinel模式下redis的主库名称 1.4.2版本新增
store.redis.sentinel.sentinelHosts sentinel模式下sentinel的hosts 多hosts以逗号分隔 1.4.2版本新增
store.redis.host redis模式ip 默认127.0.0.1 1.4.2版本弃用
store.redis.port redis模式端口 默认6379 1.4.2版本弃用
store.redis.maxConn redis模式最大连接数 默认10
store.redis.minConn redis模式最小连接数 默认1
store.redis.database redis模式默认库 默认0
store.redis.password redis模式密码(无可不填) 默认null
store.redis.queryLimit redis模式一次查询最大条数 默认100
metrics.enabled 是否启用Metrics 默认false关闭,在False状态下,所有与Metrics相关的组件将不会被初始化,使得性能损耗最低
metrics.registryType 指标注册器类型 Metrics使用的指标注册器类型,默认为内置的compact(简易)实现,这个实现中的Meter仅使用有限内存计数,性能高足够满足大多数场景;目前只能设置一个指标注册器实现
metrics.exporterList 指标结果Measurement数据输出器列表 默认prometheus,多个输出器使用英文逗号分割,例如"prometheus,jmx",目前仅实现了对接prometheus的输出器
metrics.exporterPrometheusPort prometheus输出器Client端口号 默认9898

client端

key desc remark change record
seata.enabled 是否开启spring-boot自动装配 true、false,(SSBS)专有配置,默认true(附录4)
seata.enableAutoDataSourceProxy=true 是否开启数据源自动代理 true、false,seata-spring-boot-starter(SSBS)专有配置,SSBS默认会开启数据源自动代理,可通过该配置项关闭.
seata.useJdkProxy=false 是否使用JDK代理作为数据源自动代理的实现方式 true、false,(SSBS)专有配置,默认false,采用CGLIB作为数据源自动代理的实现方式
transport.enableClientBatchSendRequest 客户端事务消息请求是否批量合并发送 默认true,false单条发送
client.log.exceptionRate 日志异常输出概率 默认100,目前用于undo回滚失败时异常堆栈输出,百分之一的概率输出,回滚失败基本是脏数据,无需输出堆栈占用硬盘空间
service.vgroupMapping.my_test_tx_group 事务群组(附录1) my_test_tx_group为分组,配置项值为TC集群名
service.default.grouplist TC服务列表(附录2) 仅注册中心为file时使用
service.disableGlobalTransaction 全局事务开关 默认false。false为开启,true为关闭
client.tm.degradeCheck 降级开关 默认false。业务侧根据连续错误数自动降级不走seata事务(详细介绍请阅读附录6)
client.tm.degradeCheckAllowTimes 升降级达标阈值 默认10
client.tm.degradeCheckPeriod 服务自检周期 默认2000,单位ms.每2秒进行一次服务自检,来决定
client.rm.reportSuccessEnable 是否上报一阶段成功 true、false,从1.1.0版本开始,默认false.true用于保持分支事务生命周期记录完整,false可提高不少性能
client.rm.asyncCommitBufferLimit 异步提交缓存队列长度 默认10000。 二阶段提交成功,RM异步清理undo队列
client.rm.lock.retryInterval 校验或占用全局锁重试间隔 默认10,单位毫秒
client.rm.lock.retryTimes 校验或占用全局锁重试次数 默认30
client.rm.lock.retryPolicyBranchRollbackOnConflict 分支事务与其它全局回滚事务冲突时锁策略 默认true,优先释放本地锁让回滚成功
client.rm.reportRetryCount 一阶段结果上报TC重试次数 默认5次 1.4.1版本新增
client.rm.tableMetaCheckEnable 自动刷新缓存中的表结构 默认false 1.5.1版本新增
client.rm.tableMetaCheckerInterval 定时刷新缓存中表结构间隔时间 默认60秒
client.rm.sagaBranchRegisterEnable 是否开启saga分支注册 Saga模式中分支状态存储在状态机本地数据库中,可通过状态机进行提交或回滚,为提高性能可考虑不用向TC注册Saga分支,但需考虑状态机的可用性,默认false
client.rm.sagaJsonParser saga模式中数据序列化方式 默认fastjson,可选jackson 1.5.1版本新增
client.rm.tccActionInterceptorOrder tcc拦截器顺序 默认Ordered.HIGHEST_PRECEDENCE + 1000,保证拦截器在本地事务拦截器之前执行,也可自定义tcc和业务开发的拦截器执行顺序 1.5.1版本新增
client.tm.commitRetryCount 一阶段全局提交结果上报TC重试次数 默认1次,建议大于1
client.tm.rollbackRetryCount 一阶段全局回滚结果上报TC重试次数 默认1次,建议大于1
client.tm.defaultGlobalTransactionTimeout 全局事务超时时间 默认60秒,TM检测到分支事务超时或TC检测到TM未做二阶段上报超时后,发起对分支事务的回滚 1.4.0版本新增
client.tm.interceptorOrder TM全局事务拦截器顺序 默认Ordered.HIGHEST_PRECEDENCE + 1000,保证拦截器在本地事务拦截器之前执行,也可自定义全局事务和业务开发的拦截器执行顺序 1.5.1版本新增
client.undo.dataValidation 二阶段回滚镜像校验 默认true开启,false关闭
client.undo.logSerialization undo序列化方式 默认jackson
client.undo.logTable 自定义undo表名 默认undo_log
client.undo.onlyCareUpdateColumns 只生成被更新列的镜像 默认true
client.undo.compress.enable undo log压缩开关 默认true 1.4.1版本新增
client.undo.compress.type undo log压缩算法 默认zip,可选NONE(不压缩)、GZIP、ZIP、SEVENZ、BZIP2、LZ4、DEFLATER、ZSTD 1.4.1版本新增
client.undo.compress.threshold undo log压缩阈值 默认值64k,压缩开关开启且undo log大小超过阈值时才进行压缩 1.4.1版本新增
client.rm.sqlParserType sql解析类型 默认druid,可选antlr
参数同步到配置中心使用demo

Nacos

shell:

sh ${SEATAPATH}/script/config-center/nacos/nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 5a3c7d6c-f497-4d68-a71a-2e5e3340b3ca

参数说明:

-h: host,默认值 localhost

-p: port,默认值 8848

-g: 配置分组,默认值为 'SEATA_GROUP'

-t: 租户信息,对应 Nacos 的命名空间ID字段, 默认值为空 ''

Apollo

sh ${SEATAPATH}/script/config-center/apollo/apollo-config.sh -h localhost -p 8070 -e DEV -a seata-server -c default -n application -d apollo -r apollo -t 3aa026fc8435d0fc4505b345b8fa4578fb646a2c

参数说明:

-h: host,默认值 localhost

-p: port,默认值 8070

-e: 所管理的配置环境,默认值 DEV

-a: Namespace 所属的 AppId,默认值 seata-server

-c: 所管理的配置集群名, 一般情况下传入 default 即可。如果是特殊集群,传入相应集群的名称即可,默认值 default

-n: 所管理的 Namespace 的名称,如果是非 properties 格式,需要加上后缀名,如 sample.yml,默认值 application

-d: item 的创建人,格式为域账号,也就是 sso 系统的 User ID

-r: 发布人,域账号,注意:如果 ApolloConfigDB.ServerConfig 中的 namespace.lock.switch 设置为 true 的话(默认是 false),那么该环境不允许发布人和编辑人为同一人。所以如果编辑人是 zhangsan,发布人就不能再是 zhangsan。

-t: Apollo 管理员在 http://{portal_address}/open/manage.html 创建第三方应用,创建之前最好先查询此AppId是否已经创建。创建成功之后会生成一个 token

以上参数说明详情请看:

https://github.com/ctripcorp/apollo/wiki/Apollo开放平台

Consul

sh ${SEATAPATH}/script/config-center/consul/consul-config.sh -h localhost -p 8500

参数说明:

-h: host,默认值 localhost

-p: port,默认值 8500

Etcd3

sh ${SEATAPATH}/script/config-center/etcd3/etcd3-config.sh -h localhost -p 2379

参数说明:

-h: host,默认值 localhost

-p: port,默认值 2379

python:

python ${SEATAPATH}/script/config-center/nacos/nacos-config.py localhost:8848

ZK

sh ${SEATAPATH}/script/config-center/zk/zk-config.sh -h localhost -p 2181 -z "/Users/zhangchenghui/zookeeper-3.4.14"

参数说明:

-h: host,默认值 localhost

-p: port,默认值 2181

-z: zk所属路径

附录1:

事务分组说明。
1.事务分组是什么?
事务分组是seata的资源逻辑,类似于服务实例。在file.conf中的my_test_tx_group就是一个事务分组。
2.通过事务分组如何找到后端集群?
首先程序中配置了事务分组(GlobalTransactionScanner 构造方法的txServiceGroup参数),程序会通过用户配置的配置中心去寻找service.vgroupMapping
.事务分组配置项,取得配置项的值就是TC集群的名称。拿到集群名称程序通过一定的前后缀+集群名称去构造服务名,各配置中心的服务名实现不同。拿到服务名去相应的注册中心去拉取相应服务名的服务列表,获得后端真实的TC服务列表。
3.为什么这么设计,不直接取服务名?
这里多了一层获取事务分组到映射集群的配置。这样设计后,事务分组可以作为资源的逻辑隔离单位,当发生故障时可以快速failover。

附录2:

关于grouplist问题说明下。
1. 什么时候会用到file.conf中的default.grouplist?
当registry.type=file时会用到,其他时候不读。
2. default.grouplist的值列表是否可以配置多个?
可以配置多个,配置多个意味着集群,但当store.mode=file时,会报错。原因是在file存储模式下未提供本地文件的同步,所以需要使用store.mode=db,通过db来共享TC集群间数据
3. 是否推荐使用default.grouplist?
不推荐,如问题1,当registry.type=file时会用到,也就是说这里用的不是真正的注册中心,不具体服务的健康检查机制当tc不可用时无法自动剔除列表,推荐使用nacos 、eureka、redis、zk、consul、etcd3、sofa。registry.type=file或config.type=file 设计的初衷是让用户再不依赖第三方注册中心或配置中心的前提下,通过直连的方式,快速验证seata服务。    
4.seata-spring-boot-starter中的配置为什么是grouplist.default,也就是说和file.conf中的default.grouplist写法刚好颠倒了位置?  
由于spring-boot本身配置文件语法的要求,这个地方需要将file.conf中的default.grouplist写成grouplist.default,效果是一样的.

附录3:

log_status=1的是防御性的,是收到全局回滚请求,但是不确定某个事务分支的本地事务是否已经执行完成了,这时事先插入一条branchid相同的数据,插入的假数据成功了,本地事务继续执行就会报唯一索引冲突自动回滚。
假如插入不成功说明表里有数据这个本地事务已经执行完成了,那么取出这条undolog数据做反向回滚操作。

附录4:

是否开启spring-boot自动装配,如果开启,则会自动配置seata与spring-boot的集成,包括数据源的自动代理以及GlobalTransactionScanner初始化。
注:1.0版本新特性,需依赖seata-spring-boot-starter。

附录5:

seata1.1.0版本新加入以下注解,用于开启数据源自动代理功能
@EnableAutoDataSourceProxy
attribute desc remark
useJdkProxy 是否使用JDK代理作为数据源自动代理的实现方式 false、true,默认false,采用CGLIB作为数据源自动代理的实现方式
1.对于使用seata-spring-boot-starter的方式,默认已开启数据源自动代理,如需关闭,请配置seata.enableAutoDataSourceProxy=false,该项配置默认为true。
  如需切换代理实现方式,请通过seata.useJdkProxy=false进行配置,默认为false,采用CGLIB作为数据源自动代理的实现方式。
2.对于使用seata-all的方式,请使用@EnableAutoDataSourceProxy来显式开启数据源自动代理功能。如有需要,可通过该注解的useJdkProxy属性进行代理实现方式
  的切换。默认为false,采用CGLIB作为数据源自动代理的实现方式。

附录6:

关于服务自动降级策略的具体实现介绍:
首先通过读取client.tm.degradeCheck是否为true,决定是否开启自检线程.随后读取degradeCheckAllowTimes和degradeCheckPeriod,确认阈值与自检周期.
假设degradeCheckAllowTimes=10,degradeCheckPeriod=2000
那么每2秒钟会进行一个begin,commit的测试,如果失败,则记录连续失败数,如果成功则清空连续失败数.连续错误由用户接口及自检线程进行累计,直到连续失败次数达到用户的阈值,则关闭Seata分布式事务,避免用户自身业务长时间不可用.
反之,假如当前分布式事务关闭,那么自检线程继续按照2秒一次的自检,直到连续成功数达到用户设置的阈值,那么Seata分布式事务将恢复使用

附录7:

在store.mode=db,由于seata是通过jdbc的executeBatch来批量插入全局锁的,根据MySQL官网的说明,连接参数中的rewriteBatchedStatements为true时,在执行executeBatch,并且操作类型为insert时,jdbc驱动会把对应的SQL优化成`insert into () values (), ()`的形式来提升批量插入的性能。
根据实际的测试,该参数设置为true后,对应的批量插入性能为原来的10倍多,因此在数据源为MySQL时,建议把该参数设置为true。