liuyi-stack opened a new issue, #9626:
URL: https://github.com/apache/seatunnel/issues/9626

   ### Search before asking
   
   - [x] I had searched in the 
[issues](https://github.com/apache/seatunnel/issues?q=is%3Aissue+label%3A%22bug%22)
 and found no similar issues.
   
   
   ### What happened
   
   ### 🐛 Bug Report
   ### 描述
   
   在使用 SeaTunnel CDC(MySQL → Doris)进行数据同步时,任务运行若干小时后突然崩溃,提示 
EventDataDeserializationException,源自 
shyiko/mysql-binlog-connector-java。重启任务可以恢复,但过一段时间仍会再次失败。
   
   ### 日志部分如下所示:
   Caused by: 
com.github.shyiko.mysql.binlog.event.deserialization.EventDataDeserializationException:
 Failed to deserialize data of EventHeaderV4{timestamp=1753472097000, 
eventType=EXT_UPDATE_ROWS, serverId=1476473036, headerLength=19, 
dataLength=827, nextPosition=41373241, flags=0}] 
   
   ### 环境信息
   SeaTunnel 版本: 2.3.11
   
   部署模式: 集群(Cluster)
   
   Source: MySQL CDC (Debezium)
   
   Sink: Doris
   
   使用的 CDC connector: MySQL-CDC
   
   操作系统: CentOS 7
   
   JDK: Java 11+
   
   ### 配置要点
   execution.parallelism = 1
   checkpoint.interval = 120000
   restart-strategy {
     type = "fixed-delay"
     attempts = 10
     delay = "30s"
   }
   source {
     MySQL-CDC {
       base-url = "jdbc:mysql://<host>:<port>/<db>"
       username = "seatunnel"
       password = "***"
       table-names = ["<db>.ice_user"]
       server_id = 5404
       startup_mode = "initial"
       scan.incremental.snapshot.enabled = true
       incremental.snapshot.chunk.size = 3000
       chunk-key-column = "s_id"
       debezium.skipped.operations = "none"
       include.schema.changes = true
       debezium.properties = {
         "poll.interval.ms" = "600000"
         "heartbeat.interval.ms" = "180000"
         "max.batch.size" = "4096"
         "max.queue.size" = "16384"
       }
     }
   }
   sink {
     doris {
       fenodes = "<host>:8030"
       username = "root"
       password = "***"
       database = "<db>"
       table = "ice_user"
       sink.model = "UNIQUE_KEYS"
       sink.primary_key = "s_id"
       sink.enable-2pc = true
       sink.enable-delete = true
       batch_size = 2000
       interval_ms = 30000
       max_retries = 10
       doris.config = {
         format = "json"
         read_json_by_line = "true"
         strip_outer_array = "false"
         max_filter_ratio = "0.5"
         strict_mode = "false"
       }
     }
   }
   ### 问题重现
   该任务运行稳定性依赖 binlog 解析,但某些 binlog event 导致 CDC fetcher 
崩溃,并整体中断。重启可临时恢复,但仍在几个小时后再次出现。
   
   ### 期望行为
   希望:
   
   任务在解析 binlog 出现反序列化异常时能跳过该事件,或降级为错误日志记录,不影响整体运行。
   
   支持配置 "skip.broken.events" = true 或其他容错机制。
   
   SeaTunnel 可以通过内部重试机制对这种 binlog 反序列化错误进行隔离。
   
   如社区需要复现数据或进一步分析,可提供脱敏数据样本或运行环境。期待修复建议 🙏
   
   
   
   ### SeaTunnel Version
   
   SeaTunnel version : 2.3.11
   
   ### SeaTunnel Config
   
   ```conf
   {
   source {
     MySQL-CDC {
       base-url = "jdbc:mysql://<host>:<port>/<db>"
       username = "seatunnel"
       password = "***"
       table-names = ["<db>.ice_user"]
       server_id = 5404
       startup_mode = "initial"
       scan.incremental.snapshot.enabled = true
       incremental.snapshot.chunk.size = 3000
       chunk-key-column = "s_id"
       debezium.skipped.operations = "none"
       include.schema.changes = true
       debezium.properties = {
         "poll.interval.ms" = "600000"
         "heartbeat.interval.ms" = "180000"
         "max.batch.size" = "4096"
         "max.queue.size" = "16384"
       }
     }
   }
   
   sink {
     doris {
       fenodes = "<host>:8030"
       username = "root"
       password = "***"
       database = "<db>"
       table = "ice_user"
       sink.model = "UNIQUE_KEYS"
       sink.primary_key = "s_id"
       sink.enable-2pc = true
       sink.enable-delete = true
       batch_size = 2000
       interval_ms = 30000
       max_retries = 10
       doris.config = {
         format = "json"
         read_json_by_line = "true"
         strip_outer_array = "false"
         max_filter_ratio = "0.5"
         strict_mode = "false"
       }
     }
   }
   
   metrics {
     prometheus {
       host = "0.0.0.0"                                  # Prometheus指标监听地址,所有网卡
       port = 9091                                       # 监听端口
       metrics-name-include = "source_record_count,sink_write_duration"  # 
指标过滤,只包含这几个
     }
   }
   
   error_output {
     file {
       path = "/data/seatunnel_error/op_11m_app1/ice_user"  # 错误日志文件路径
       format = "json"                                     # 错误文件格式
       rolling_policy {
         max_part_size = "128MB"                           # 文件最大分片大小
         rollover_interval = "1d"                          # 文件滚动时间间隔,1天
       }
     }
   
   }
   ```
   
   ### Running Command
   
   ```shell
   nohup ./bin/seatunnel.sh --config config/sync_sync_table1.conf -e cluster -n 
sync_sync_table1 > /data/logs/sync_table1.log 2>&1 &
   
   nohup ./bin/seatunnel.sh --config config/sync_sync_table2.conf -e cluster -n 
sync_sync_table2 > /data/logs/sync_table2.log 2>&1 &
   
   ....
   
   nohup ./bin/seatunnel.sh --config config/sync_sync_table12.conf -e cluster 
-n sync_sync_table11 > /data/logs/sync_table12.log 2>&1 &
   ```
   
   ### Error Exception
   
   ```log
   2025-07-26 03:35:51,063 INFO  [o.a.s.e.c.j.JobMetricsRunner  ] 
[job-metrics-runner-1001064698008829953] - 
   ***********************************************
              Job Progress Information
   ***********************************************
   Job Id                    : 1001064698008829953
   Read Count So Far         :            26830015
   Write Count So Far        :            26830015
   Average Read Count        :                 0/s
   Average Write Count       :                 0/s
   Last Statistic Time       : 2025-07-26 03:34:51
   Current Statistic Time    : 2025-07-26 03:35:51
   ***********************************************
   
   2025-07-26 03:36:13,874 INFO  [o.a.s.e.c.j.ClientJobProxy    ] [main] - Job 
(1001064698008829953) end with state FAILED
   2025-07-26 03:36:13,875 INFO  [c.h.c.LifecycleService        ] [main] - 
hz.client_1 [seatunnel] [5.1] HazelcastClient 5.1 (20220228 - 21f20e7) is 
SHUTTING_DOWN
   2025-07-26 03:36:13,894 INFO  [.c.i.c.ClientConnectionManager] [main] - 
hz.client_1 [seatunnel] [5.1] Removed connection to endpoint: 
[localhost]:5801:55cb8b9f-7481-4205-b2dd-6850b1bd35f8, connection: 
ClientConnection{alive=false, connectionId=1, 
channel=NioChannel{/127.0.0.1:54334->localhost/127.0.0.1:5801}, 
remoteAddress=[localhost]:5801, lastReadTime=2025-07-26 03:36:13.847, 
lastWriteTime=2025-07-26 03:36:12.725, closedTime=2025-07-26 03:36:13.890, 
connected server version=5.1}
   2025-07-26 03:36:13,894 INFO  [c.h.c.LifecycleService        ] [main] - 
hz.client_1 [seatunnel] [5.1] HazelcastClient 5.1 (20220228 - 21f20e7) is 
CLIENT_DISCONNECTED
   2025-07-26 03:36:13,901 INFO  [c.h.c.LifecycleService        ] [main] - 
hz.client_1 [seatunnel] [5.1] HazelcastClient 5.1 (20220228 - 21f20e7) is 
SHUTDOWN
   2025-07-26 03:36:13,901 INFO  [s.c.s.s.c.ClientExecuteCommand] [main] - 
Closed SeaTunnel client......
   2025-07-26 03:36:13,901 INFO  [s.c.s.s.c.ClientExecuteCommand] [main] - 
Closed metrics executor service ......
   2025-07-26 03:36:13,901 ERROR [o.a.s.c.s.SeaTunnel           ] [main] - 
   
   
===============================================================================
   
   
   2025-07-26 03:36:13,902 ERROR [o.a.s.c.s.SeaTunnel           ] [main] - 
Fatal Error, 
   
   2025-07-26 03:36:13,902 ERROR [o.a.s.c.s.SeaTunnel           ] [main] - 
Please submit bug report in https://github.com/apache/seatunnel/issues
   
   2025-07-26 03:36:13,902 ERROR [o.a.s.c.s.SeaTunnel           ] [main] - 
Reason:SeaTunnel job executed failed 
   
   2025-07-26 03:36:13,903 ERROR [o.a.s.c.s.SeaTunnel           ] [main] - 
Exception 
StackTrace:org.apache.seatunnel.core.starter.exception.CommandExecuteException: 
SeaTunnel job executed failed
        at 
org.apache.seatunnel.core.starter.seatunnel.command.ClientExecuteCommand.execute(ClientExecuteCommand.java:228)
        at org.apache.seatunnel.core.starter.SeaTunnel.run(SeaTunnel.java:40)
        at 
org.apache.seatunnel.core.starter.seatunnel.SeaTunnelClient.main(SeaTunnelClient.java:40)
   Caused by: 
org.apache.seatunnel.engine.common.exception.SeaTunnelEngineException: 
java.lang.RuntimeException: One or more fetchers have encountered exception
        at 
org.apache.seatunnel.connectors.seatunnel.common.source.reader.fetcher.SplitFetcherManager.checkErrors(SplitFetcherManager.java:147)
        at 
org.apache.seatunnel.connectors.seatunnel.common.source.reader.SourceReaderBase.getNextFetch(SourceReaderBase.java:167)
        at 
org.apache.seatunnel.connectors.seatunnel.common.source.reader.SourceReaderBase.pollNext(SourceReaderBase.java:93)
        at 
org.apache.seatunnel.connectors.cdc.base.source.reader.IncrementalSourceReader.pollNext(IncrementalSourceReader.java:119)
        at 
org.apache.seatunnel.engine.server.task.flow.SourceFlowLifeCycle.collect(SourceFlowLifeCycle.java:159)
        at 
org.apache.seatunnel.engine.server.task.SourceSeaTunnelTask.collect(SourceSeaTunnelTask.java:127)
        at 
org.apache.seatunnel.engine.server.task.SeaTunnelTask.stateProcess(SeaTunnelTask.java:165)
        at 
org.apache.seatunnel.engine.server.task.SourceSeaTunnelTask.call(SourceSeaTunnelTask.java:132)
        at 
org.apache.seatunnel.engine.server.TaskExecutionService$BlockingWorker.run(TaskExecutionService.java:694)
        at 
org.apache.seatunnel.engine.server.TaskExecutionService$NamedTaskWrapper.run(TaskExecutionService.java:1023)
        at org.apache.seatunnel.api.tracing.MDCRunnable.run(MDCRunnable.java:43)
        at 
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
   Caused by: java.lang.RuntimeException: SplitFetcher thread 0 received 
unexpected exception while polling the records
        at 
org.apache.seatunnel.connectors.seatunnel.common.source.reader.fetcher.SplitFetcher.runOnce(SplitFetcher.java:165)
        at 
org.apache.seatunnel.connectors.seatunnel.common.source.reader.fetcher.SplitFetcher.run(SplitFetcher.java:81)
        ... 5 more
   Caused by: org.apache.kafka.connect.errors.ConnectException: An exception 
occurred in the change event producer. This connector will be stopped.
        at 
io.debezium.pipeline.ErrorHandler.setProducerThrowable(ErrorHandler.java:50)
        at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource$ReaderThreadLifecycleListener.onCommunicationFailure(MySqlStreamingChangeEventSource.java:1559)
        at 
com.github.shyiko.mysql.binlog.BinaryLogClient.listenForEventPackets(BinaryLogClient.java:1079)
        at 
com.github.shyiko.mysql.binlog.BinaryLogClient.connect(BinaryLogClient.java:631)
        at 
com.github.shyiko.mysql.binlog.BinaryLogClient$7.run(BinaryLogClient.java:932)
        ... 1 more
   Caused by: io.debezium.DebeziumException: Failed to deserialize data of 
EventHeaderV4{timestamp=1753472097000, eventType=EXT_UPDATE_ROWS, 
serverId=1476473036, headerLength=19, dataLength=827, nextPosition=41373241, 
flags=0}
        at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource.wrap(MySqlStreamingChangeEventSource.java:1503)
        ... 5 more
   Caused by: 
com.github.shyiko.mysql.binlog.event.deserialization.EventDataDeserializationException:
 Failed to deserialize data of EventHeaderV4{timestamp=1753472097000, 
eventType=EXT_UPDATE_ROWS, serverId=1476473036, headerLength=19, 
dataLength=827, nextPosition=41373241, flags=0}
        at 
com.github.shyiko.mysql.binlog.event.deserialization.EventDeserializer.deserializeEventData(EventDeserializer.java:341)
        at 
com.github.shyiko.mysql.binlog.event.deserialization.EventDeserializer.nextEvent(EventDeserializer.java:244)
        at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource$1.nextEvent(MySqlStreamingChangeEventSource.java:273)
        at 
com.github.shyiko.mysql.binlog.BinaryLogClient.listenForEventPackets(BinaryLogClient.java:1051)
        ... 3 more
   Caused by: java.io.EOFException: Failed to read remaining 21 of 177 bytes 
from position 1681833. Block length: 545. Initial block length: 823.
        at 
com.github.shyiko.mysql.binlog.io.ByteArrayInputStream.fill(ByteArrayInputStream.java:115)
        at 
com.github.shyiko.mysql.binlog.io.ByteArrayInputStream.read(ByteArrayInputStream.java:105)
        at 
com.github.shyiko.mysql.binlog.event.deserialization.AbstractRowsEventDataDeserializer.deserializeBlob(AbstractRowsEventDataDeserializer.java:403)
        at 
com.github.shyiko.mysql.binlog.event.deserialization.AbstractRowsEventDataDeserializer.deserializeCell(AbstractRowsEventDataDeserializer.java:191)
        at 
com.github.shyiko.mysql.binlog.event.deserialization.AbstractRowsEventDataDeserializer.deserializeRow(AbstractRowsEventDataDeserializer.java:143)
        at 
com.github.shyiko.mysql.binlog.event.deserialization.UpdateRowsEventDataDeserializer.deserializeRows(UpdateRowsEventDataDeserializer.java:71)
        at 
com.github.shyiko.mysql.binlog.event.deserialization.UpdateRowsEventDataDeserializer.deserialize(UpdateRowsEventDataDeserializer.java:58)
        at 
com.github.shyiko.mysql.binlog.event.deserialization.UpdateRowsEventDataDeserializer.deserialize(UpdateRowsEventDataDeserializer.java:33)
        at 
com.github.shyiko.mysql.binlog.event.deserialization.EventDeserializer.deserializeEventData(EventDeserializer.java:335)
        ... 6 more
   
        at 
org.apache.seatunnel.core.starter.seatunnel.command.ClientExecuteCommand.execute(ClientExecuteCommand.java:220)
        ... 2 more
    
   2025-07-26 03:36:13,903 ERROR [o.a.s.c.s.SeaTunnel           ] [main] - 
   
===============================================================================
   
   
   
   Exception in thread "main" 
org.apache.seatunnel.core.starter.exception.CommandExecuteException: SeaTunnel 
job executed failed
        at 
org.apache.seatunnel.core.starter.seatunnel.command.ClientExecuteCommand.execute(ClientExecuteCommand.java:228)
        at org.apache.seatunnel.core.starter.SeaTunnel.run(SeaTunnel.java:40)
        at 
org.apache.seatunnel.core.starter.seatunnel.SeaTunnelClient.main(SeaTunnelClient.java:40)
   Caused by: 
org.apache.seatunnel.engine.common.exception.SeaTunnelEngineException: 
java.lang.RuntimeException: One or more fetchers have encountered exception
        at 
org.apache.seatunnel.connectors.seatunnel.common.source.reader.fetcher.SplitFetcherManager.checkErrors(SplitFetcherManager.java:147)
        at 
org.apache.seatunnel.connectors.seatunnel.common.source.reader.SourceReaderBase.getNextFetch(SourceReaderBase.java:167)
        at 
org.apache.seatunnel.connectors.seatunnel.common.source.reader.SourceReaderBase.pollNext(SourceReaderBase.java:93)
        at 
org.apache.seatunnel.connectors.cdc.base.source.reader.IncrementalSourceReader.pollNext(IncrementalSourceReader.java:119)
        at 
org.apache.seatunnel.engine.server.task.flow.SourceFlowLifeCycle.collect(SourceFlowLifeCycle.java:159)
        at 
org.apache.seatunnel.engine.server.task.SourceSeaTunnelTask.collect(SourceSeaTunnelTask.java:127)
        at 
org.apache.seatunnel.engine.server.task.SeaTunnelTask.stateProcess(SeaTunnelTask.java:165)
        at 
org.apache.seatunnel.engine.server.task.SourceSeaTunnelTask.call(SourceSeaTunnelTask.java:132)
        at 
org.apache.seatunnel.engine.server.TaskExecutionService$BlockingWorker.run(TaskExecutionService.java:694)
        at 
org.apache.seatunnel.engine.server.TaskExecutionService$NamedTaskWrapper.run(TaskExecutionService.java:1023)
        at org.apache.seatunnel.api.tracing.MDCRunnable.run(MDCRunnable.java:43)
        at 
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
   Caused by: java.lang.RuntimeException: SplitFetcher thread 0 received 
unexpected exception while polling the records
        at 
org.apache.seatunnel.connectors.seatunnel.common.source.reader.fetcher.SplitFetcher.runOnce(SplitFetcher.java:165)
        at 
org.apache.seatunnel.connectors.seatunnel.common.source.reader.fetcher.SplitFetcher.run(SplitFetcher.java:81)
        ... 5 more
   Caused by: org.apache.kafka.connect.errors.ConnectException: An exception 
occurred in the change event producer. This connector will be stopped.
        at 
io.debezium.pipeline.ErrorHandler.setProducerThrowable(ErrorHandler.java:50)
        at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource$ReaderThreadLifecycleListener.onCommunicationFailure(MySqlStreamingChangeEventSource.java:1559)
        at 
com.github.shyiko.mysql.binlog.BinaryLogClient.listenForEventPackets(BinaryLogClient.java:1079)
        at 
com.github.shyiko.mysql.binlog.BinaryLogClient.connect(BinaryLogClient.java:631)
        at 
com.github.shyiko.mysql.binlog.BinaryLogClient$7.run(BinaryLogClient.java:932)
        ... 1 more
   Caused by: io.debezium.DebeziumException: Failed to deserialize data of 
EventHeaderV4{timestamp=1753472097000, eventType=EXT_UPDATE_ROWS, 
serverId=1476473036, headerLength=19, dataLength=827, nextPosition=41373241, 
flags=0}
        at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource.wrap(MySqlStreamingChangeEventSource.java:1503)
        ... 5 more
   Caused by: 
com.github.shyiko.mysql.binlog.event.deserialization.EventDataDeserializationException:
 Failed to deserialize data of EventHeaderV4{timestamp=1753472097000, 
eventType=EXT_UPDATE_ROWS, serverId=1476473036, headerLength=19, 
dataLength=827, nextPosition=41373241, flags=0}
        at 
com.github.shyiko.mysql.binlog.event.deserialization.EventDeserializer.deserializeEventData(EventDeserializer.java:341)
        at 
com.github.shyiko.mysql.binlog.event.deserialization.EventDeserializer.nextEvent(EventDeserializer.java:244)
        at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource$1.nextEvent(MySqlStreamingChangeEventSource.java:273)
        at 
com.github.shyiko.mysql.binlog.BinaryLogClient.listenForEventPackets(BinaryLogClient.java:1051)
        ... 3 more
   Caused by: java.io.EOFException: Failed to read remaining 21 of 177 bytes 
from position 1681833. Block length: 545. Initial block length: 823.
        at 
com.github.shyiko.mysql.binlog.io.ByteArrayInputStream.fill(ByteArrayInputStream.java:115)
        at 
com.github.shyiko.mysql.binlog.io.ByteArrayInputStream.read(ByteArrayInputStream.java:105)
        at 
com.github.shyiko.mysql.binlog.event.deserialization.AbstractRowsEventDataDeserializer.deserializeBlob(AbstractRowsEventDataDeserializer.java:403)
        at 
com.github.shyiko.mysql.binlog.event.deserialization.AbstractRowsEventDataDeserializer.deserializeCell(AbstractRowsEventDataDeserializer.java:191)
        at 
com.github.shyiko.mysql.binlog.event.deserialization.AbstractRowsEventDataDeserializer.deserializeRow(AbstractRowsEventDataDeserializer.java:143)
        at 
com.github.shyiko.mysql.binlog.event.deserialization.UpdateRowsEventDataDeserializer.deserializeRows(UpdateRowsEventDataDeserializer.java:71)
        at 
com.github.shyiko.mysql.binlog.event.deserialization.UpdateRowsEventDataDeserializer.deserialize(UpdateRowsEventDataDeserializer.java:58)
        at 
com.github.shyiko.mysql.binlog.event.deserialization.UpdateRowsEventDataDeserializer.deserialize(UpdateRowsEventDataDeserializer.java:33)
        at 
com.github.shyiko.mysql.binlog.event.deserialization.EventDeserializer.deserializeEventData(EventDeserializer.java:335)
        ... 6 more
   
        at 
org.apache.seatunnel.core.starter.seatunnel.command.ClientExecuteCommand.execute(ClientExecuteCommand.java:220)
        ... 2 more
   2025-07-26 03:36:13,914 INFO  [s.c.s.s.c.ClientExecuteCommand] 
[SeaTunnel-CompletableFuture-Thread-0] - run shutdown hook because get close 
signal
   ```
   
   ### Zeta or Flink or Spark Version
   
   相关连接器版本
   connector-doris-2.3.11.jar
   connector-cdc-mysql-2.3.11.jar
   
   ### Java or Scala Version
   
   jdk11
   
   ### Screenshots
   
   这个是grafana+prometheus 铺货到的截图,可见目前只有两个任务正在正常运行,其余10个任务都失败了 
   <img width="1896" height="3408" alt="Image" 
src="https://github.com/user-attachments/assets/0ec8a32d-a0c0-4df4-834a-88281fcd6b88";
 />
   
   ### Are you willing to submit PR?
   
   - [x] Yes I am willing to submit a PR!
   
   ### Code of Conduct
   
   - [x] I agree to follow this project's [Code of 
Conduct](https://www.apache.org/foundation/policies/conduct)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to