NiFi 1.13.2 CaptureChangeMySQL如何添加JDBC参数解决CEST时区连接报错
NiFi 1.13.2 CaptureChangeMySQL 时区报错解决方案
问题1:如何在CaptureChangeMySQL处理器中传入额外JDBC参数
CaptureChangeMySQL 底层基于 Debezium MySQL 连接器实现,支持通过动态属性透传自定义配置:
- 进入处理器配置页的「Properties」标签,点击右上角的「+」新建动态属性
- 若要传入 JDBC 连接参数,属性名格式为
jdbc.<参数名>,比如要加 serverTimezone,就设置属性名为jdbc.serverTimezone,值为对应时区即可 - 也可以直接使用 Debezium 原生的时区配置属性,属性名设为
database.connectionTimeZone,值设为符合要求的具体时区,该参数优先级更高,专门用于指定 JDBC 连接的时区规则
问题2:是否存在NiFi全局配置属性,可给所有处理器的全部数据库连接统一添加serverTimezone参数
NiFi 没有原生支持全局统一下发所有数据库连接的 JDBC 参数的配置项,分两类场景处理:
- 对于使用 DBCPConnectionPool 等公共连接池服务的处理器,可以在连接池配置的「Database Connection URL」中统一追加
?serverTimezone=Europe/Berlin后缀,所有引用该连接池的处理器都会生效 - 对于 CaptureChangeMySQL 这类独立管理数据库连接的处理器,需要单独配置动态属性,或者通过修改 JVM 启动参数的方式统一设置默认时区,具体见问题3的备选方案
问题3:在无法修改MySQL服务端时区的前提下,如何让CaptureChangeMySQL处理器正常运行
不需要修改数据库服务端配置,按以下步骤操作即可解决报错:
- 首先确认所在时区对应的 IANA 标准时区标识,CEST 是中欧夏令时缩写,对应的标准时区可选用
Europe/Berlin、Europe/Paris、Europe/Warsaw中的任意一个,这些时区的夏令时规则和 CEST 完全一致,不会出现时间转换偏差 - 进入 CaptureChangeMySQL 处理器配置页,添加动态属性:
- 属性名:
database.connectionTimeZone - 属性值:
Europe/Berlin(替换为你选的对应 IANA 时区即可)
- 属性名:
- 保存配置后重启处理器,报错即可解决
如果需要批量解决所有处理器的时区问题,可以修改 NiFi 启动的 JVM 参数:
- 打开 NiFi 安装目录下的
conf/bootstrap.conf文件 - 新增一行配置:
java.arg.xx=-Duser.timezone=Europe/Berlin(xx替换为现有java.arg配置的最大序号+1,比如现有配置到15,就填16) - 重启整个 NiFi 服务,JVM 默认时区会被修改为指定值,所有未单独配置时区的 JDBC 连接都会自动使用该时区规则
内容的提问来源于stack exchange,提问作者user12396614
相关产品推荐
相关产品推荐

