You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyFlink 1.15.2对接RabbitMQ Sink出现序列化注册异常求助

问题

使用Python开发PyFlink应用,版本为Flink 1.15.2,通过flink-sql-connector-rabbitmq-1.15.2.jar连接RabbitMQ读取数据,编写的Sink代码如下:

stream.add_sink(RMQSink(
    connection_config,      # RabbitMQ连接配置
    'queueName',            # 目标RabbitMQ队列名称
    SimpleStringSchema()))

运行时触发gRPC错误栈:

File "/home/ali/.virtualenvs/LAB_920_log_parser_more_investigation-DQLOhTET/lib/python3.8/site-packages/grpc/_channel.py", line 826, in _next
    raise self
grpc._channel._MultiThreadedRendezvous: <_MultiThreadedRendezvous of RPC that terminated with:
    status = StatusCode.CANCELLED
    details = "Multiplexer hanging up"
    debug_error_string = "{"created":"@1662371359.807069114","description":"Error received from peer ipv6:[::1]:44295","file":"src/core/lib/surface/call.cc","file_line":966,"grpc_message":"Multiplexer hanging up","grpc_status":1}"
>
Traceback (most recent call last):
  File "/home/ali/.virtualenvs/LAB_920_log_parser_more_investigation-DQLOhTET/lib/python3.8/site-packages/apache_beam/runners/worker/sdk_worker.py", line 289, in _execute
    response = task()

核心Java层错误为:

RuntimeError: java.lang.UnsupportedOperationException: A serializer has already been registered for the state; re-registration is not allowed.
    at org.apache.flink.runtime.state.StateSerializerProvider$EagerlyRegisteredStateSerializerProvider.registerNewSerializerForRestoredState(StateSerializerProvider.java:344)
    at org.apache.flink.runtime.state.RegisteredKeyValueStateBackendMetaInfo.updateNamespaceSerializer(RegisteredKeyValueStateBackendMetaInfo.java:132)

解决方案

  • 替换RabbitMQ连接器依赖
    当前使用的flink-sql-connector-rabbitmq是面向SQL API的连接器,而DataStream API的RMQSink需要使用专门的flink-connector-rabbitmq依赖。两者实现逻辑不同,混用会引发状态序列化冲突,请替换为对应版本的flink-connector-rabbitmq-1.15.2.jar。

  • 确保状态序列化器一致性
    作业重启或恢复时,状态的序列化器配置必须和之前完全一致。如果混用Table API与DataStream API,避免重复定义状态相关的序列化逻辑;检查算子中是否重复注册了相同的状态描述符(StateDescriptor)。

  • 清理旧状态后重启作业
    若作业遗留了旧状态数据,新的序列化配置与旧状态不兼容会触发该错误。清理作业的状态存储(如RocksDB本地文件或分布式存储中的状态目录),以全新状态启动作业。

内容的提问来源于stack exchange,提问作者Ali Ait-Bachir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:42:24