文章目录
环境
系统平台:N/A
版本:14
症状
1.debezium日志报错无法解析
debezium日志显示无法解析2002-01-01 00:00:00 BC的字段值
cat /hgsoft/dbz/logs/connector.log
[2026-02-14 13:21:05,343] ERROR [hg-dbz_test-sdb-V1|task-0] WorkerSourceTask{id=hg-dbz_test-sdb-V1-0} Task threw an uncaught and unrecoverable exception. Task is being killed and will not recover until manually restarted (org.apache.kafka.connect.runtime.WorkerTask:195)
Caused by: org.apache.kafka.connect.errors.ConnectException: java.time.format.DateTimeParseException: Text '2002-01-01 00:00:00 BC' could not be parsed, unparsed text found at index 19
at io.debezium.connector.postgresql.connection.wal2json.DateTimeFormat$ISODateTimeFormat.format(DateTimeFormat.java:166)
at io.debezium.connector.postgresql.connection.wal2json.DateTimeFormat$ISODateTimeFormat.timestampToInstant(DateTimeFormat.java:172)
at io.debezium.connector.postgresql.connection.AbstractColumnValue.asInstant(AbstractColumnValue.java:81)
at io.debezium.connector.postgresql.connection.ReplicationMessageColumnValueResolver.resolveValue(ReplicationMessageColumnValueResolver.java:111)
at io.debezium.connector.postgresql.connection.pgoutput.PgOutputReplicationMessage.getValue(PgOutputReplicationMessage.java:97)
at io.debezium.connector.postgresql.connection.pgoutput.PgOutputMessageDecoder$1.getValue(PgOutputMessageDecoder.java:733)
at io.debezium.connector.postgresql.PostgresChangeRecordEmitter.columnValues(PostgresChangeRecordEmitter.java:184)
at io.debezium.connector.postgresql.PostgresChangeRecordEmitter.getNewColumnValues(PostgresChangeRecordEmitter.java:127)
at io.debezium.relational.RelationalChangeRecordEmitter.emitCreateRecord(RelationalChangeRecordEmitter.java:69)
at io.debezium.relational.RelationalChangeRecordEmitter.emitChangeRecords(RelationalChangeRecordEmitter.java:47)
at io.debezium.connector.postgresql.PostgresChangeRecordEmitter.emitChangeRecords(PostgresChangeRecordEmitter.java:96)
at io.debezium.pipeline.EventDispatcher.dispatchDataChangeEvent(EventDispatcher.java:209)
... 17 more
2.核对查看数据类型及值
sql
dbz_test=# \d test1
数据表 "public.test1"
栏位 | 类型 | 校对规则 | 可空的 | 预设
------+--------------------------------+----------+----------+------
c1 | integer | | not null |
c2 | character varying(100) | | |
c3 | timestamp(3) without time zone | | |
索引:
"test1_pkey" PRIMARY KEY, btree (c1)
发布:
"dbz_test_pub"
dbz_test=# select * from test1;
c1 | c2 | c3
----+-------+------------------------
1 | test1 | 2002-01-01 00:00:00 BC
问题原因
debezium 启动引用操作系统环境LANG,当环境变量为LANG=zh_CN.UTF-8无法解析PostgreSQL及瀚高数据库列类型为timestamp值为BC 标识的列。debezium启动环境改为en_US.utf-8 可以正常解析该字段值。
解决方案
修改debezium语言环境为en_US.UTF8,并重启debezium
root#vi /usr/lib/systemd/system/dbz.service
[Install]
WantedBy=multi-user.target
[Unit]
Description=dbz
After=syslog.target network.target
[Service]
Type=simple
User=root
Group=root
# Start the hghac process
ExecStart= /usr/bin/sh /hgsoft/dbz/dbzServer.sh
# Send HUP to reload from dbz
ExecReload=/bin/kill -s HUP $MAINPID
#Restart=on-failure
KillMode=process
[Install]
WantedBy=multi-user.target
root#vi /hgsoft/dbz/dbzServer.sh
export LANG=en_US.UTF-8
/hgsoft/dbz/bin/connect-distributed.sh /hgsoft/dbz/config/connect-distributed.properties >> /hgsoft/dbz/logs/connect.log
root#systemctl daemon-reload
root#ssystemctl restart dbz